[make-initrd] [PATCH 1/3] Reimplement ueventd

Alexey Gladkov gladkov.alexey at gmail.com
Fri May 5 20:16:18 MSK 2023


On Fri, May 05, 2023 at 07:03:16AM +0300, Leonid Krivoshein wrote:
> 
> On 5/4/23 16:42, Alexey Gladkov wrote:
> > [...]
> > diff --git a/datasrc/ueventd/queue-processor.c b/datasrc/ueventd/queue-processor.c
> > new file mode 100644
> > index 00000000..ab5e03e4
> > --- /dev/null
> > +++ b/datasrc/ueventd/queue-processor.c
> > @@ -0,0 +1,116 @@
> > +/* SPDX-License-Identifier: GPL-2.0-or-later */
> > +
> > +#include <sys/types.h>
> > +#include <sys/stat.h>
> > +#include <sys/wait.h>
> > +
> > +#include <stdlib.h>
> > +#include <stdio.h>
> > +#include <string.h>
> > +#include <signal.h>
> > +#include <dirent.h>
> > +#include <fcntl.h>
> > +#include <errno.h>
> > +
> > +#include "ueventd.h"
> > +
> > +static void event_handler(struct watch *queue, char *path) __attribute__((nonnull(1, 2)));
> > +static void move_files(char *srcdir, char *dstdir)         __attribute__((nonnull(1, 2)));
> > +static void signal_unhandled_events(struct watch *queue)   __attribute__((nonnull(1)));
> > +
> > +void event_handler(struct watch *queue, char *path)
> > +{
> > +	char *argv[] = { handler_file, path, NULL };
> > +	pid_t pid = vfork();
> > +
> > +	if (pid < 0) {
> > +		err("fork: %m");
> 
> Сначала я подумал, что тут пропущен первый аргумент и таких мест 
> оказалось много. err() -- и твой макрос из ueventd.h, и стандартный 
> вызов из <err.h> с отличающейся семантикой. В новом коде ueventd 
> используется твой макрос, но в остальном коде make-initrd используется 
> стандартный вызов. Так недолго самому запутаться, см.: git grep 'err('.

Да, ты прав. Название неудачное. Сначала сделал со стандартными, но потом
пришлось делать свои так как ни err.h, ни syslog не умеют время выводить.

> > +
> > +	} else if (!pid) {
> > +		execve(argv[0], argv, environ);
> > +		fatal("exec: %s: %m", argv[0]);
> > +	} else {
> > +		int status = 0;
> > +
> > +		if (waitpid_retry(pid, &status, 0) != pid || !WIFEXITED(status))
> > +			info("%s: session=%lu: %s failed",
> > +			     queue->q_name, session, handler_file);
> > +		else
> > +			info("%s: session=%lu: %s finished with return code %d",
> > +			     queue->q_name, session, handler_file, WEXITSTATUS(status));
> > +	}
> > +}
> > [...]
> 
> 
> -- 
> WBR, Leonid Krivoshein.
> _______________________________________________
> Make-initrd mailing list
> Make-initrd at lists.altlinux.org
> https://lists.altlinux.org/mailman/listinfo/make-initrd

-- 
Rgrds, legion



More information about the Make-initrd mailing list