chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Prep v234: Apply missing upstream fixes in src/basic (1/6)
[elogind.git]
/
src
/
basic
/
fileio.c
diff --git
a/src/basic/fileio.c
b/src/basic/fileio.c
index 03238151c64694ea3222292ce2acbfae3f2d2c7f..7bafe9038cc139ad542182a937083033faa0f580 100644
(file)
--- a/
src/basic/fileio.c
+++ b/
src/basic/fileio.c
@@
-50,7
+50,7
@@
#define READ_FULL_BYTES_MAX (4U*1024U*1024U)
#define READ_FULL_BYTES_MAX (4U*1024U*1024U)
-int write_string_stream
(FILE *f, const char *line, bool enforce_newline
) {
+int write_string_stream
_ts(FILE *f, const char *line, bool enforce_newline, struct timespec *ts
) {
assert(f);
assert(line);
assert(f);
assert(line);
@@
-59,6
+59,13
@@
int write_string_stream(FILE *f, const char *line, bool enforce_newline) {
if (enforce_newline && !endswith(line, "\n"))
fputc('\n', f);
if (enforce_newline && !endswith(line, "\n"))
fputc('\n', f);
+ if (ts) {
+ struct timespec twice[2] = {*ts, *ts};
+
+ if (futimens(fileno(f), twice) < 0)
+ return -errno;
+ }
+
return fflush_and_check(f);
}
return fflush_and_check(f);
}
@@
-88,7
+95,7
@@
static int write_string_file_atomic(const char *fn, const char *line, bool enfor
return r;
}
return r;
}
-int write_string_file
(const char *fn, const char *line, WriteStringFileFlags flag
s) {
+int write_string_file
_ts(const char *fn, const char *line, WriteStringFileFlags flags, struct timespec *t
s) {
_cleanup_fclose_ FILE *f = NULL;
int q, r;
_cleanup_fclose_ FILE *f = NULL;
int q, r;
@@
-103,7
+110,8
@@
int write_string_file(const char *fn, const char *line, WriteStringFileFlags fla
goto fail;
return r;
goto fail;
return r;
- }
+ } else
+ assert(ts == NULL);
if (flags & WRITE_STRING_FILE_CREATE) {
f = fopen(fn, "we");
if (flags & WRITE_STRING_FILE_CREATE) {
f = fopen(fn, "we");
@@
-130,7
+138,7
@@
int write_string_file(const char *fn, const char *line, WriteStringFileFlags fla
}
}
}
}
- r = write_string_stream
(f, line, !(flags & WRITE_STRING_FILE_AVOID_NEWLINE)
);
+ r = write_string_stream
_ts(f, line, !(flags & WRITE_STRING_FILE_AVOID_NEWLINE), ts
);
if (r < 0)
goto fail;
if (r < 0)
goto fail;
@@
-788,7
+796,9
@@
static int merge_env_file_push(
}
expanded_value = replace_env(value, *env,
}
expanded_value = replace_env(value, *env,
- REPLACE_ENV_USE_ENVIRONMENT|REPLACE_ENV_ALLOW_BRACELESS);
+ REPLACE_ENV_USE_ENVIRONMENT|
+ REPLACE_ENV_ALLOW_BRACELESS|
+ REPLACE_ENV_ALLOW_EXTENDED);
if (!expanded_value)
return -ENOMEM;
if (!expanded_value)
return -ENOMEM;
@@
-803,7
+813,7
@@
int merge_env_file(
const char *fname) {
/* NOTE: this function supports braceful and braceless variable expansions,
const char *fname) {
/* NOTE: this function supports braceful and braceless variable expansions,
- * unlike other exported parsing functions.
+ *
plus "extended" substitutions,
unlike other exported parsing functions.
*/
return parse_env_file_internal(f, fname, NEWLINE, merge_env_file_push, env, NULL);
*/
return parse_env_file_internal(f, fname, NEWLINE, merge_env_file_push, env, NULL);
@@
-1437,7
+1447,6
@@
int link_tmpfile(int fd, const char *path, const char *target) {
return 0;
}
return 0;
}
-#endif // 0
int read_nul_string(FILE *f, char **ret) {
_cleanup_free_ char *x = NULL;
int read_nul_string(FILE *f, char **ret) {
_cleanup_free_ char *x = NULL;
@@
-1498,3
+1507,4
@@
int mkdtemp_malloc(const char *template, char **ret) {
*ret = p;
return 0;
}
*ret = p;
return 0;
}
+#endif // 0