[systemd-devel] [PATCH 1/5] Factorize some machine-id-setup functions to be reused
Lennart Poettering
lennart at poettering.net
Tue Dec 2 18:11:17 PST 2014
On Tue, 02.12.14 11:43, Didier Roche (didrocks at ubuntu.com) wrote:
Looks good! Applied!
> Le 01/12/2014 18:38, Lennart Poettering a écrit :
> >On Mon, 24.11.14 12:35, Didier Roche (didrocks at ubuntu.com) wrote:
> >
> >>+static int get_valid_machine_id(int fd, char id[34]) {
> >>+ assert(fd >= 0);
> >>+ assert(id);
> >>+
> >>+ if (loop_read(fd, id, 33, false) == 33 && id[32] == '\n') {
> >>+ id[32] = 0;
> >>+
> >>+ if (id128_is_valid(id)) {
> >>+ id[32] = '\n';
> >>+ id[33] = 0;
> >>+ return 0;
> >>+ }
> >>+ }
> >>+
> >>+ return -EINVAL;
> >>+}
> >As a matter of coding style we try hard to avoid functions that clobber
> >their parameters if they fail. Please follow the same scheme here.
> That makes sense, I rewrote the function to avoid this.
>
> Didier
> >From 7cf7322ab08c9434ba303d9958517f262b1797e0 Mon Sep 17 00:00:00 2001
> From: Didier Roche <didrocks at ubuntu.com>
> Date: Mon, 24 Nov 2014 09:40:57 +0100
> Subject: [PATCH 1/5] Factorize some machine-id-setup functions to be reused
>
> ---
> src/core/machine-id-setup.c | 44 ++++++++++++++++++++++++++++++++++----------
> 1 file changed, 34 insertions(+), 10 deletions(-)
>
> diff --git a/src/core/machine-id-setup.c b/src/core/machine-id-setup.c
> index 6710038..f3763ed 100644
> --- a/src/core/machine-id-setup.c
> +++ b/src/core/machine-id-setup.c
> @@ -157,6 +157,37 @@ static int generate(char id[34], const char *root) {
> return 0;
> }
>
> +static int get_valid_machine_id(int fd, char id[34]) {
> + char id_to_validate[34];
> +
> + assert(fd >= 0);
> + assert(id);
> +
> + if (loop_read(fd, id_to_validate, 33, false) == 33 && id_to_validate[32] == '\n') {
> + id_to_validate[32] = 0;
> +
> + if (id128_is_valid(id_to_validate)) {
> + strncpy(id, id_to_validate, sizeof(id_to_validate));
> + id[32] = '\n';
> + id[33] = 0;
> + return 0;
> + }
> + }
> +
> + return -EINVAL;
> +}
> +
> +static int write_machine_id(int fd, char id[34]) {
> + assert(fd >= 0);
> + assert(id);
> + lseek(fd, 0, SEEK_SET);
> +
> + if (loop_write(fd, id, 33, false) == 33)
> + return 0;
> +
> + return -errno;
> +}
> +
> int machine_id_setup(const char *root) {
> const char *etc_machine_id, *run_machine_id;
> _cleanup_close_ int fd = -1;
> @@ -207,13 +238,8 @@ int machine_id_setup(const char *root) {
> if (fstat(fd, &st) < 0)
> return log_error_errno(errno, "fstat() failed: %m");
>
> - if (S_ISREG(st.st_mode))
> - if (loop_read(fd, id, 33, false) == 33 && id[32] == '\n') {
> - id[32] = 0;
> -
> - if (id128_is_valid(id))
> - return 0;
> - }
> + if (S_ISREG(st.st_mode) && get_valid_machine_id(fd, id) == 0)
> + return 0;
>
> /* Hmm, so, the id currently stored is not useful, then let's
> * generate one */
> @@ -223,9 +249,7 @@ int machine_id_setup(const char *root) {
> return r;
>
> if (S_ISREG(st.st_mode) && writable) {
> - lseek(fd, 0, SEEK_SET);
> -
> - if (loop_write(fd, id, 33, false) == 33)
> + if (write_machine_id(fd, id) == 0)
> return 0;
> }
>
> --
> 2.1.3
>
Lennart
--
Lennart Poettering, Red Hat
More information about the systemd-devel
mailing list