66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poettering This file is part of systemd.
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poettering Copyright 2010-2012 Lennart Poettering
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poettering systemd is free software; you can redistribute it and/or modify it
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poettering under the terms of the GNU Lesser General Public License as published by
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poettering the Free Software Foundation; either version 2.1 of the License, or
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poettering (at your option) any later version.
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poettering systemd is distributed in the hope that it will be useful, but
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poettering WITHOUT ANY WARRANTY; without even the implied warranty of
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poettering MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poettering Lesser General Public License for more details.
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poettering You should have received a copy of the GNU Lesser General Public License
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poettering along with systemd; If not, see <http://www.gnu.org/licenses/>.
cf0fbc49e67b55f8d346fc94de28c90113505297Thomas Hindoe Paaboel Andersenint is_symlink(const char *path) {
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poetteringint is_dir(const char* path, bool follow) {
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poettering return !!(S_ISBLK(info.st_mode) || S_ISCHR(info.st_mode));
94c156cd452424ea59931920df2454d9da7cb774Lennart Poettering if (S_ISREG(st->st_mode) && st->st_size <= 0)
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poettering /* We don't want to hardcode the major/minor of /dev/null,
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poettering * hence we do a simpler "is this a device node?" check. */
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poettering if (S_ISCHR(st->st_mode) || S_ISBLK(st->st_mode))
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poetteringint path_is_read_only_fs(const char *path) {
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poettering /* On NFS, statvfs() might not reflect whether we can actually
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poettering * write to the remote share. Let's try again with
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poettering * access(W_OK) which is more reliable, at least sometimes. */
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poettering if (access(path, W_OK) < 0 && errno == EROFS)
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poettering /* We use /usr/lib/os-release as flag file if something is an OS */
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poettering p = strjoina(path, "/usr/lib/os-release");
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poettering /* Also check for the old location in /etc, just in case. */
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poettering return r >= 0;
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poetteringint files_same(const char *filea, const char *fileb) {
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poetteringbool is_fs_type(const struct statfs *s, statfs_f_type_t magic_value) {
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poettering assert_cc(sizeof(statfs_f_type_t) >= sizeof(s->f_type));
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poettering return F_TYPE_EQUAL(s->f_type, magic_value);
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poetteringint fd_check_fstype(int fd, statfs_f_type_t magic_value) {
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poetteringint path_check_fstype(const char *path, statfs_f_type_t magic_value) {
66cdd0f2d0670b054bd27dad16fcb5838b11dde3Lennart Poetteringbool is_temporary_fs(const struct statfs *s) {