chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
unit: add minimal condition checker for unit startup
[elogind.git]
/
src
/
util.c
diff --git
a/src/util.c
b/src/util.c
index bdc194e80c9ce45bde0975d7ef9c5ab4b4482bfd..d09e44777671b298f02eac2f1f7beea3152e1891 100644
(file)
--- a/
src/util.c
+++ b/
src/util.c
@@
-600,13
+600,13
@@
finish:
int parse_env_file(
const char *fname,
int parse_env_file(
const char *fname,
- const char *sep
e
rator, ...) {
+ const char *sep
a
rator, ...) {
- int r;
+ int r
= 0
;
char *contents, *p;
assert(fname);
char *contents, *p;
assert(fname);
- assert(sep
e
rator);
+ assert(sep
a
rator);
if ((r = read_full_file(fname, &contents)) < 0)
return r;
if ((r = read_full_file(fname, &contents)) < 0)
return r;
@@
-615,7
+615,7
@@
int parse_env_file(
for (;;) {
const char *key = NULL;
for (;;) {
const char *key = NULL;
- p += strspn(p, sep
e
rator);
+ p += strspn(p, sep
a
rator);
p += strspn(p, WHITESPACE);
if (!*p)
p += strspn(p, WHITESPACE);
if (!*p)
@@
-625,7
+625,7
@@
int parse_env_file(
va_list ap;
char **value;
va_list ap;
char **value;
- va_start(ap, sep
e
rator);
+ va_start(ap, sep
a
rator);
while ((key = va_arg(ap, char *))) {
size_t n;
char *v;
while ((key = va_arg(ap, char *))) {
size_t n;
char *v;
@@
-638,7
+638,7
@@
int parse_env_file(
continue;
p += n + 1;
continue;
p += n + 1;
- n = strcspn(p, sep
e
rator);
+ n = strcspn(p, sep
a
rator);
if (n >= 2 &&
strchr(QUOTES, p[0]) &&
if (n >= 2 &&
strchr(QUOTES, p[0]) &&
@@
-653,21
+653,27
@@
int parse_env_file(
goto fail;
}
goto fail;
}
+ if (v[0] == '\0') {
+ /* return empty value strings as NULL */
+ free(v);
+ v = NULL;
+ }
+
free(*value);
*value = v;
p += n;
free(*value);
*value = v;
p += n;
+
+ r ++;
break;
}
va_end(ap);
}
if (!key)
break;
}
va_end(ap);
}
if (!key)
- p += strcspn(p, sep
e
rator);
+ p += strcspn(p, sep
a
rator);
}
}
- r = 0;
-
fail:
free(contents);
return r;
fail:
free(contents);
return r;
@@
-3302,6
+3308,23
@@
int wait_for_terminate_and_warn(const char *name, pid_t pid) {
}
}
+void freeze(void) {
+ for (;;)
+ pause();
+}
+
+bool null_or_empty(struct stat *st) {
+ assert(st);
+
+ if (S_ISREG(st->st_mode) && st->st_size <= 0)
+ return true;
+
+ if (S_ISCHR(st->st_mode) || S_ISBLK(st->st_mode))
+ return true;
+
+ return false;
+}
+
static const char *const ioprio_class_table[] = {
[IOPRIO_CLASS_NONE] = "none",
[IOPRIO_CLASS_RT] = "realtime",
static const char *const ioprio_class_table[] = {
[IOPRIO_CLASS_NONE] = "none",
[IOPRIO_CLASS_RT] = "realtime",