path-util: unify code for detecting OS trees
This also makes sure we always detect an OS tree the same way, by checking for /etc/os-release.
This commit is contained in:
@@ -413,3 +413,15 @@ int path_is_read_only_fs(const char *path) {
|
||||
|
||||
return !!(st.f_flag & ST_RDONLY);
|
||||
}
|
||||
|
||||
int path_is_os_tree(const char *path) {
|
||||
char *p;
|
||||
int r;
|
||||
|
||||
/* We use /etc/os-release as flag file if something is an OS */
|
||||
|
||||
p = strappenda(path, "/etc/os-release");
|
||||
r = access(p, F_OK);
|
||||
|
||||
return r < 0 ? 0 : 1;
|
||||
}
|
||||
|
||||
@@ -40,3 +40,4 @@ char **path_strv_canonicalize_uniq(char **l);
|
||||
|
||||
int path_is_mount_point(const char *path, bool allow_symlink);
|
||||
int path_is_read_only_fs(const char *path);
|
||||
int path_is_os_tree(const char *path);
|
||||
|
||||
@@ -684,3 +684,15 @@ int unlink_noerrno(const char *path);
|
||||
_new_ = alloca(_len_); \
|
||||
(void *) memset(_new_, 0, _len_); \
|
||||
})
|
||||
|
||||
#define strappenda(a, b) \
|
||||
({ \
|
||||
const char *_a_ = (a), *_b_ = (b); \
|
||||
char *_c_; \
|
||||
size_t _x_, _y_; \
|
||||
_x_ = strlen(_a_); \
|
||||
_y_ = strlen(_b_); \
|
||||
_c_ = alloca(_x_ + _y_ + 1); \
|
||||
strcpy(stpcpy(_c_, _a_), _b_); \
|
||||
_c_; \
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user