1
0
mirror of https://github.com/systemd/systemd.git synced 2025-01-09 01:18:19 +03:00

io-util: add new helper fputs_with_newline()

This commit is contained in:
Lennart Poettering 2024-06-13 09:29:10 +02:00
parent c01ab8ffbc
commit cdf6f34a2f
3 changed files with 21 additions and 4 deletions

View File

@ -306,3 +306,19 @@ ssize_t sparse_write(int fd, const void *p, size_t sz, size_t run_length) {
return q - (const uint8_t*) p;
}
int fputs_with_newline(const char *s, FILE *f) {
assert(s);
assert(f);
/* This is like fputs() but outputs a trailing newline char, but only if the string doesn't end in a
* newline anyway. Just like fputs() returns EOF on error. Otherwise returns 0 in case we didn't
* append a newline, > 0 otherwise. */
if (fputs(s, f) == EOF)
return EOF;
if (endswith(s, "\n"))
return 0;
return fputc('\n', f) == EOF ? EOF : 1;
}

View File

@ -5,6 +5,7 @@
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <sys/types.h>
#include "macro.h"
@ -44,3 +45,5 @@ static inline bool FILE_SIZE_VALID_OR_INFINITY(uint64_t l) {
return FILE_SIZE_VALID(l);
}
int fputs_with_newline(const char *s, FILE *f);

View File

@ -33,6 +33,7 @@
#include "format-util.h"
#include "id128-util.h"
#include "install.h"
#include "io-util.h"
#include "iovec-util.h"
#include "label-util.h"
#include "load-dropin.h"
@ -4569,10 +4570,7 @@ int unit_write_setting(Unit *u, UnitWriteFlags flags, const char *name, const ch
if (u->transient_file) {
/* When this is a transient unit file in creation, then let's not create a new drop-in but instead
* write to the transient unit file. */
fputs(data, u->transient_file);
if (!endswith(data, "\n"))
fputc('\n', u->transient_file);
fputs_with_newline(data, u->transient_file);
/* Remember which section we wrote this entry to */
u->last_section_private = !!(flags & UNIT_PRIVATE);