X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Futil.c;h=7281cc8ab88a572b507404f28d5332b7a176437f;hb=8333c77edf8fd1654cd96f3f6ee0f078dd64b58b;hp=0444cf44561360d20f0589e17283c5517fc77ee2;hpb=3baed19327663d012c3313b72cc5b3d02a58720a;p=elogind.git diff --git a/src/shared/util.c b/src/shared/util.c index 0444cf445..7281cc8ab 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -59,6 +59,7 @@ #include #include #include +#include #include "macro.h" #include "util.h" @@ -2264,7 +2265,7 @@ int parse_bytes(const char *t, off_t *bytes) { errno = 0; l = strtoll(p, &e, 10); - if (errno != 0) + if (errno > 0) return -errno; if (l < 0) @@ -2356,6 +2357,24 @@ int dir_is_empty(const char *path) { } } +char* dirname_malloc(const char *path) { + char *d, *dir, *dir2; + + d = strdup(path); + if (!d) + return NULL; + dir = dirname(d); + assert(dir); + + if (dir != d) { + dir2 = strdup(dir); + free(d); + return dir2; + } + + return dir; +} + unsigned long long random_ull(void) { _cleanup_close_ int fd; uint64_t ull; @@ -4172,7 +4191,7 @@ int get_user_creds( } if (!p) - return errno != 0 ? -errno : -ESRCH; + return errno > 0 ? -errno : -ESRCH; if (uid) *uid = p->pw_uid; @@ -4253,7 +4272,7 @@ int get_group_creds(const char **groupname, gid_t *gid) { } if (!g) - return errno != 0 ? -errno : -ESRCH; + return errno > 0 ? -errno : -ESRCH; if (gid) *gid = g->gr_gid; @@ -5708,7 +5727,7 @@ int create_tmp_dir(char template[], char** dir_name) { dt = strjoin(d, "/tmp", NULL); if (!dt) { r = log_oom(); - goto fail2; + goto fail3; } umask(0000); @@ -5716,7 +5735,7 @@ int create_tmp_dir(char template[], char** dir_name) { if (r) { log_error("Can't create directory %s: %m", dt); r = -errno; - goto fail1; + goto fail2; } log_debug("Created temporary directory %s", dt); @@ -5734,6 +5753,8 @@ int create_tmp_dir(char template[], char** dir_name) { fail1: rmdir(dt); fail2: + free(dt); +fail3: rmdir(template); return r; }