From: Yu Watanabe Date: Wed, 14 Apr 2021 16:40:49 +0000 (+0900) Subject: fileio: introduce a new flag to make write_string_file() ignore trailing newline X-Git-Tag: v249-rc1~406^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6873d20392722324fe22df4d0bbde9539e8de772;p=thirdparty%2Fsystemd.git fileio: introduce a new flag to make write_string_file() ignore trailing newline When writing a sysfs attribute, kernel may automatically append newline at the end, e.g., 'portno' attribute for qeth driver. --- diff --git a/src/basic/fileio.c b/src/basic/fileio.c index abd822796e7..adfde64cbc8 100644 --- a/src/basic/fileio.c +++ b/src/basic/fileio.c @@ -286,7 +286,7 @@ fail: /* OK, the operation failed, but let's see if the right * contents in place already. If so, eat up the error. */ - q = verify_file(fn, line, !(flags & WRITE_STRING_FILE_AVOID_NEWLINE)); + q = verify_file(fn, line, !(flags & WRITE_STRING_FILE_AVOID_NEWLINE) || (flags & WRITE_STRING_FILE_VERIFY_IGNORE_NEWLINE)); if (q <= 0) return r; diff --git a/src/basic/fileio.h b/src/basic/fileio.h index 64a30ab7bb1..752995c2a3d 100644 --- a/src/basic/fileio.h +++ b/src/basic/fileio.h @@ -15,16 +15,17 @@ #define LONG_LINE_MAX (1U*1024U*1024U) typedef enum { - WRITE_STRING_FILE_CREATE = 1 << 0, - WRITE_STRING_FILE_TRUNCATE = 1 << 1, - WRITE_STRING_FILE_ATOMIC = 1 << 2, - WRITE_STRING_FILE_AVOID_NEWLINE = 1 << 3, - WRITE_STRING_FILE_VERIFY_ON_FAILURE = 1 << 4, - WRITE_STRING_FILE_SYNC = 1 << 5, - WRITE_STRING_FILE_DISABLE_BUFFER = 1 << 6, - WRITE_STRING_FILE_NOFOLLOW = 1 << 7, - WRITE_STRING_FILE_MKDIR_0755 = 1 << 8, - WRITE_STRING_FILE_MODE_0600 = 1 << 9, + WRITE_STRING_FILE_CREATE = 1 << 0, + WRITE_STRING_FILE_TRUNCATE = 1 << 1, + WRITE_STRING_FILE_ATOMIC = 1 << 2, + WRITE_STRING_FILE_AVOID_NEWLINE = 1 << 3, + WRITE_STRING_FILE_VERIFY_ON_FAILURE = 1 << 4, + WRITE_STRING_FILE_VERIFY_IGNORE_NEWLINE = 1 << 5, + WRITE_STRING_FILE_SYNC = 1 << 6, + WRITE_STRING_FILE_DISABLE_BUFFER = 1 << 7, + WRITE_STRING_FILE_NOFOLLOW = 1 << 8, + WRITE_STRING_FILE_MKDIR_0755 = 1 << 9, + WRITE_STRING_FILE_MODE_0600 = 1 << 10, /* And before you wonder, why write_string_file_atomic_label_ts() is a separate function instead of just one more flag here: it's about linking: we don't want to pull -lselinux into all users of write_string_file()