X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fbasic%2Ffileio.c;h=da53c3e7589e5e6ac6cd37e81a797a70f2566e2f;hp=4adae102bbf0060a5ee95f9220ebcd43b1117d19;hb=5f7e5870f06e8ffa0603ae971de74e3f3f6344e5;hpb=eaca07ccfdf5d7dabc50afc7e539c2413dd69d3e diff --git a/src/basic/fileio.c b/src/basic/fileio.c index 4adae102b..da53c3e75 100644 --- a/src/basic/fileio.c +++ b/src/basic/fileio.c @@ -1,5 +1,3 @@ -/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ - /*** This file is part of systemd. @@ -19,6 +17,15 @@ along with systemd; If not, see . ***/ +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include "alloc-util.h" @@ -28,15 +35,17 @@ #include "fileio.h" #include "fs-util.h" #include "hexdecoct.h" +//#include "log.h" +//#include "macro.h" #include "parse-util.h" #include "path-util.h" #include "random-util.h" #include "stdio-util.h" #include "string-util.h" #include "strv.h" +//#include "time-util.h" #include "umask-util.h" #include "utf8.h" -#include "util.h" int write_string_stream(FILE *f, const char *line, bool enforce_newline) { @@ -154,7 +163,7 @@ int read_one_line_file(const char *fn, char **line) { if (!fgets(t, sizeof(t), f)) { if (ferror(f)) - return errno ? -errno : -EIO; + return errno > 0 ? -errno : -EIO; t[0] = 0; } @@ -343,7 +352,7 @@ static int parse_env_file_internal( case KEY: if (strchr(newline, c)) { state = PRE_KEY; - line ++; + line++; n_key = 0; } else if (c == '=') { state = PRE_VALUE; @@ -367,7 +376,7 @@ static int parse_env_file_internal( case PRE_VALUE: if (strchr(newline, c)) { state = PRE_KEY; - line ++; + line++; key[n_key] = 0; if (value) @@ -407,7 +416,7 @@ static int parse_env_file_internal( case VALUE: if (strchr(newline, c)) { state = PRE_KEY; - line ++; + line++; key[n_key] = 0; @@ -526,7 +535,7 @@ static int parse_env_file_internal( state = COMMENT_ESCAPE; else if (strchr(newline, c)) { state = PRE_KEY; - line ++; + line++; } break; @@ -579,7 +588,7 @@ static int parse_env_file_push( va_list aq, *ap = userdata; if (!utf8_is_valid(key)) { - _cleanup_free_ char *p; + _cleanup_free_ char *p = NULL; p = utf8_escape_invalid(key); log_error("%s:%u: invalid UTF-8 in key '%s', ignoring.", strna(filename), line, p); @@ -587,7 +596,7 @@ static int parse_env_file_push( } if (value && !utf8_is_valid(value)) { - _cleanup_free_ char *p; + _cleanup_free_ char *p = NULL; p = utf8_escape_invalid(value); log_error("%s:%u: invalid UTF-8 value for key %s: '%s', ignoring.", strna(filename), line, key, p); @@ -636,6 +645,7 @@ int parse_env_file( return r < 0 ? r : n_pushed; } +#if 0 /// UNNEEDED by elogind static int load_env_file_push( const char *filename, unsigned line, const char *key, char *value, @@ -691,8 +701,6 @@ int load_env_file(FILE *f, const char *fname, const char *newline, char ***rl) { return 0; } -/// UNNEDED by elogind -#if 0 static int load_env_file_push_pairs( const char *filename, unsigned line, const char *key, char *value, @@ -751,7 +759,6 @@ int load_env_file_pairs(FILE *f, const char *fname, const char *newline, char ** *rl = m; return 0; } -#endif // 0 static void write_env_var(FILE *f, const char *v) { const char *p; @@ -813,8 +820,6 @@ int write_env_file(const char *fname, char **l) { return r; } -/// UNNEEDED by elogind -#if 0 int executable_is_script(const char *path, char **interpreter) { int r; _cleanup_free_ char *line = NULL; @@ -905,7 +910,7 @@ int get_proc_field(const char *filename, const char *pattern, const char *termin /* Back off one char if there's nothing but whitespace and zeros */ if (!*t || isspace(*t)) - t --; + t--; } len = strcspn(t, terminator); @@ -937,6 +942,7 @@ DIR *xopendirat(int fd, const char *name, int flags) { return d; } +#if 0 /// UNNEEDED by elogind static int search_and_fopen_internal(const char *path, const char *mode, const char *root, char **search, FILE **_f) { char **i; @@ -997,8 +1003,6 @@ int search_and_fopen(const char *path, const char *mode, const char *root, const return search_and_fopen_internal(path, mode, root, copy, _f); } -/// UNNEEDED by elogind -#if 0 int search_and_fopen_nulstr(const char *path, const char *mode, const char *root, const char *search, FILE **_f) { _cleanup_strv_free_ char **s = NULL; @@ -1062,14 +1066,14 @@ int fflush_and_check(FILE *f) { fflush(f); if (ferror(f)) - return errno ? -errno : -EIO; + return errno > 0 ? -errno : -EIO; return 0; } /* This is much like like mkostemp() but is subject to umask(). */ int mkostemp_safe(char *pattern, int flags) { - _cleanup_umask_ mode_t u; + _cleanup_umask_ mode_t u = 0; int fd; assert(pattern); @@ -1083,8 +1087,7 @@ int mkostemp_safe(char *pattern, int flags) { return fd; } -/// UNNEEDED by elogind -#if 0 +#if 0 /// UNNEEDED by elogind int open_tmpfile(const char *path, int flags) { char *p; int fd; @@ -1142,6 +1145,7 @@ int tempfn_xxxxxx(const char *p, const char *extra, char **ret) { return 0; } +#if 0 /// UNNEEDED by elogind int tempfn_random(const char *p, const char *extra, char **ret) { const char *fn; char *t, *x; @@ -1184,8 +1188,6 @@ int tempfn_random(const char *p, const char *extra, char **ret) { return 0; } -/// UNNEEDED by elogind -#if 0 int tempfn_random_child(const char *p, const char *extra, char **ret) { char *t, *x; uint64_t u; @@ -1254,4 +1256,33 @@ int read_timestamp_file(const char *fn, usec_t *ret) { *ret = (usec_t) t; return 0; } + +int fputs_with_space(FILE *f, const char *s, const char *separator, bool *space) { + int r; + + assert(s); + + /* Outputs the specified string with fputs(), but optionally prefixes it with a separator. The *space parameter + * when specified shall initially point to a boolean variable initialized to false. It is set to true after the + * first invocation. This call is supposed to be use in loops, where a separator shall be inserted between each + * element, but not before the first one. */ + + if (!f) + f = stdout; + + if (space) { + if (!separator) + separator = " "; + + if (*space) { + r = fputs(separator, f); + if (r < 0) + return r; + } + + *space = true; + } + + return fputs(s, f); +} #endif // 0