chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
kernel-install: add compat with 'installkernel'
[elogind.git]
/
src
/
shared
/
util.c
diff --git
a/src/shared/util.c
b/src/shared/util.c
index 2b76a5c885e93fba0faf881f2d9ea56b479fa2bc..5dc605eb8d5480738246340e0faac4300a9621ab 100644
(file)
--- a/
src/shared/util.c
+++ b/
src/shared/util.c
@@
-73,7
+73,7
@@
#include "hashmap.h"
#include "env-util.h"
#include "fileio.h"
#include "hashmap.h"
#include "env-util.h"
#include "fileio.h"
-#include "
utf8
.h"
+#include "
device-nodes
.h"
int saved_argc = 0;
char **saved_argv = NULL;
int saved_argc = 0;
char **saved_argv = NULL;
@@
-2186,8
+2186,10
@@
ssize_t loop_read(int fd, void *buf, size_t nbytes, bool do_poll) {
return n > 0 ? n : -errno;
}
return n > 0 ? n : -errno;
}
- if (pollfd.revents != POLLIN)
- return n > 0 ? n : -EIO;
+ /* We knowingly ignore the revents value here,
+ * and expect that any error/EOF is reported
+ * via read()/write()
+ */
continue;
}
continue;
}
@@
-2234,8
+2236,10
@@
ssize_t loop_write(int fd, const void *buf, size_t nbytes, bool do_poll) {
return n > 0 ? n : -errno;
}
return n > 0 ? n : -errno;
}
- if (pollfd.revents != POLLOUT)
- return n > 0 ? n : -EIO;
+ /* We knowingly ignore the revents value here,
+ * and expect that any error/EOF is reported
+ * via read()/write()
+ */
continue;
}
continue;
}
@@
-3509,7
+3513,7
@@
static char *tag_to_udev_node(const char *tagvalue, const char *by) {
if (t == NULL)
return NULL;
if (t == NULL)
return NULL;
- if (
udev_encode_string
(u, t, enc_len) < 0)
+ if (
encode_devnode_name
(u, t, enc_len) < 0)
return NULL;
if (asprintf(&dn, "/dev/disk/by-%s/%s", by, t) < 0)
return NULL;
if (asprintf(&dn, "/dev/disk/by-%s/%s", by, t) < 0)
@@
-4412,38
+4416,31
@@
int dirent_ensure_type(DIR *d, struct dirent *de) {
}
int in_search_path(const char *path, char **search) {
}
int in_search_path(const char *path, char **search) {
- char **i, *parent;
+ char **i;
+ _cleanup_free_ char *parent = NULL;
int r;
r = path_get_parent(path, &parent);
if (r < 0)
return r;
int r;
r = path_get_parent(path, &parent);
if (r < 0)
return r;
- r = 0;
-
- STRV_FOREACH(i, search) {
- if (path_equal(parent, *i)) {
- r = 1;
- break;
- }
- }
-
- free(parent);
+ STRV_FOREACH(i, search)
+ if (path_equal(parent, *i))
+ return 1;
- return
r
;
+ return
0
;
}
int get_files_in_directory(const char *path, char ***list) {
}
int get_files_in_directory(const char *path, char ***list) {
- DIR *d;
- int r = 0;
- unsigned n = 0;
- char **l = NULL;
+ _cleanup_closedir_ DIR *d = NULL;
+ size_t bufsize = 0, n = 0;
+ _cleanup_strv_free_ char **l = NULL;
assert(path);
/* Returns all files in a directory in *list, and the number
* of files as return value. If list is NULL returns only the
assert(path);
/* Returns all files in a directory in *list, and the number
* of files as return value. If list is NULL returns only the
- * number */
+ * number
.
*/
d = opendir(path);
if (!d)
d = opendir(path);
if (!d)
@@
-4455,11
+4452,9
@@
int get_files_in_directory(const char *path, char ***list) {
int k;
k = readdir_r(d, &buf.de, &de);
int k;
k = readdir_r(d, &buf.de, &de);
- if (k != 0) {
- r = -k;
- goto finish;
- }
-
+ assert(k >= 0);
+ if (k > 0)
+ return -k;
if (!de)
break;
if (!de)
break;
@@
-4469,43
+4464,25
@@
int get_files_in_directory(const char *path, char ***list) {
continue;
if (list) {
continue;
if (list) {
- if ((unsigned) r >= n) {
- char **t;
-
- n = MAX(16, 2*r);
- t = realloc(l, sizeof(char*) * n);
- if (!t) {
- r = -ENOMEM;
- goto finish;
- }
-
- l = t;
- }
-
- assert((unsigned) r < n);
+ /* one extra slot is needed for the terminating NULL */
+ if (!GREEDY_REALLOC(l, bufsize, n + 2))
+ return -ENOMEM;
- l[r] = strdup(de->d_name);
- if (!l[r]) {
- r = -ENOMEM;
- goto finish;
- }
+ l[n] = strdup(de->d_name);
+ if (!l[n])
+ return -ENOMEM;
- l[++
r
] = NULL;
+ l[++
n
] = NULL;
} else
} else
-
r
++;
+
n
++;
}
}
-finish:
- if (d)
- closedir(d);
-
- if (r >= 0) {
- if (list)
- *list = l;
- } else
- strv_free(l);
+ if (list) {
+ *list = l;
+ l = NULL; /* avoid freeing */
+ }
- return
r
;
+ return
n
;
}
char *strjoin(const char *x, ...) {
}
char *strjoin(const char *x, ...) {