X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=udevd.c;h=afefb9148351681f08ced949a1b0c0df4fa24ad6;hb=4110664d4f25f203b7d76ee56e5e23220b04eb69;hp=645b068c0eea99daf58958b789ec0e96e26fabfc;hpb=1343a9524f9d2145dfbf2ba479eb859faf6a1e95;p=elogind.git diff --git a/udevd.c b/udevd.c index 645b068c0..afefb9148 100644 --- a/udevd.c +++ b/udevd.c @@ -76,15 +76,16 @@ void log_message(int priority, const char *format, ...) if (priority > udev_log_priority) return; - va_start(args, format); - vsyslog(priority, format, args); - va_end(args); - if (verbose) { + printf("[%d] ", (int) getpid()); va_start(args, format); vprintf(format, args); va_end(args); printf("\n"); + } else { + va_start(args, format); + vsyslog(priority, format, args); + va_end(args); } } @@ -147,8 +148,9 @@ static int udev_event_process(struct udevd_uevent_msg *msg) strlcpy(program, name_loop->name, sizeof(program)); udev_rules_apply_format(udev, program, sizeof(program)); if (run_program(program, udev->dev->subsystem, NULL, 0, NULL, - (udev_log_priority >= LOG_INFO))) - retval = -1; + (udev_log_priority >= LOG_INFO)) != 0) + if (!name_loop->ignore_error) + retval = -1; } } } @@ -257,7 +259,7 @@ static void udev_event_run(struct udevd_uevent_msg *msg) setpriority(PRIO_PROCESS, 0, UDEV_PRIORITY); retval = udev_event_process(msg); - info("seq %llu finished", msg->seqnum); + info("seq %llu finished with %i", msg->seqnum, retval); logging_close(); if (retval) @@ -318,61 +320,43 @@ static void msg_queue_insert(struct udevd_uevent_msg *msg) static int mem_size_mb(void) { - int f; - char buf[8192]; - long int len; - const char *pos; - long int memsize; - - f = open("/proc/meminfo", O_RDONLY); - if (f == -1) - return -1; - - len = read(f, buf, sizeof(buf)-1); - close(f); + FILE* f; + char buf[4096]; + long int memsize = -1; - if (len <= 0) + f = fopen("/proc/meminfo", "r"); + if (f == NULL) return -1; - buf[len] = '\0'; - pos = strstr(buf, "MemTotal: "); - if (pos == NULL) - return -1; + while (fgets(buf, sizeof(buf), f) != NULL) { + long int value; - if (sscanf(pos, "MemTotal: %ld kB", &memsize) != 1) - return -1; + if (sscanf(buf, "MemTotal: %ld kB", &value) == 1) { + memsize = value / 1024; + break; + } + } - return memsize / 1024; + fclose(f); + return memsize; } static int cpu_count(void) { - int f; - char buf[65536]; - int len; - const char *pos; + FILE* f; + char buf[4096]; int count = 0; - f = open("/proc/stat", O_RDONLY); - if (f == -1) - return -1; - - len = read(f, buf, sizeof(buf)-1); - close(f); - if (len <= 0) - return -1; - buf[len] = '\0'; - - pos = strstr(buf, "cpu"); - if (pos == NULL) + f = fopen("/proc/stat", "r"); + if (f == NULL) return -1; - while (pos != NULL) { - if (strncmp(pos, "cpu", 3) == 0 &&isdigit(pos[3])) + while (fgets(buf, sizeof(buf), f) != NULL) { + if (strncmp(buf, "cpu", 3) == 0 && isdigit(buf[3])) count++; - pos = strstr(&pos[3], "cpu"); } + fclose(f); if (count == 0) return -1; return count; @@ -380,29 +364,24 @@ static int cpu_count(void) static int running_processes(void) { - int f; - char buf[32768]; - int len; - int running; - const char *pos; + FILE* f; + char buf[4096]; + int running = -1; - f = open("/proc/stat", O_RDONLY); - if (f == -1) + f = fopen("/proc/stat", "r"); + if (f == NULL) return -1; - len = read(f, buf, sizeof(buf)-1); - close(f); - if (len <= 0) - return -1; - buf[len] = '\0'; + while (fgets(buf, sizeof(buf), f) != NULL) { + int value; - pos = strstr(buf, "procs_running "); - if (pos == NULL) - return -1; - - if (sscanf(pos, "procs_running %u", &running) != 1) - return -1; + if (sscanf(buf, "procs_running %u", &value) == 1) { + running = value; + break; + } + } + fclose(f); return running; } @@ -980,7 +959,6 @@ int main(int argc, char *argv[], char *envp[]) selinux_init(); dbg("version %s", UDEV_VERSION); - /* parse commandline options */ while (1) { option = getopt_long(argc, argv, "dtvhV", options, NULL); if (option == -1)