X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=udevcontrol.c;h=5d8fa77683eeee2455e378ff6f142a9cc7df9efe;hp=6a278a04c1fc4eef05b6f5dced4378b1dd12bf23;hb=be962ec9a8fa6e7bd5328b29894e7b6186496cc6;hpb=3b47c7394d042b8a3fcf426920a926d4ffedacad diff --git a/udevcontrol.c b/udevcontrol.c index 6a278a04c..5d8fa7768 100644 --- a/udevcontrol.c +++ b/udevcontrol.c @@ -1,11 +1,8 @@ /* * udevcontrol.c * - * Userspace devfs - * * Copyright (C) 2005 Kay Sievers * - * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation version 2 of the License. @@ -37,18 +34,23 @@ #include "udev.h" #include "udev_version.h" #include "udevd.h" +#include "udev_utils.h" #include "logging.h" /* global variables */ static int sock = -1; +static int log = 0; #ifdef USE_LOG -void log_message (int level, const char *format, ...) +void log_message (int priority, const char *format, ...) { va_list args; + if (priority > log) + return; + va_start(args, format); - vsyslog(level, format, args); + vsyslog(priority, format, args); va_end(args); } #endif @@ -59,31 +61,50 @@ int main(int argc, char *argv[], char *envp[]) static struct udevd_msg usend_msg; struct sockaddr_un saddr; socklen_t addrlen; + const char *env; + const char *val; + int *intval; int retval = 1; + env = getenv("UDEV_LOG"); + if (env) + log = log_priority(env); + logging_init("udevcontrol"); dbg("version %s", UDEV_VERSION); if (argc != 2) { - info("usage: udevcontrol \n"); + err("error finding comand"); goto exit; } memset(&usend_msg, 0x00, sizeof(struct udevd_msg)); strcpy(usend_msg.magic, UDEV_MAGIC); - if (strstr(argv[1], "stop_exec_queue")) + if (!strcmp(argv[1], "stop_exec_queue")) usend_msg.type = UDEVD_STOP_EXEC_QUEUE; - else if (strstr(argv[1], "start_exec_queue")) + else if (!strcmp(argv[1], "start_exec_queue")) usend_msg.type = UDEVD_START_EXEC_QUEUE; - else { - info("unknown command\n"); + else if (!strncmp(argv[1], "log_priority=", strlen("log_priority="))) { + intval = (int *) usend_msg.envbuf; + val = &argv[1][strlen("log_priority=")]; + usend_msg.type = UDEVD_SET_LOG_LEVEL; + *intval = log_priority(val); + info("send log_priority=%i", *intval); + } else if (!strncmp(argv[1], "max_childs=", strlen("max_childs="))) { + intval = (int *) usend_msg.envbuf; + val = &argv[1][strlen("max_childs=")]; + usend_msg.type = UDEVD_SET_MAX_CHILDS; + *intval = atoi(val); + info("send max_childs=%i", *intval); + } else { + err("error parsing command\n"); goto exit; } sock = socket(AF_LOCAL, SOCK_DGRAM, 0); if (sock == -1) { - info("error getting socket"); + err("error getting socket"); goto exit; } @@ -95,8 +116,13 @@ int main(int argc, char *argv[], char *envp[]) retval = sendto(sock, &usend_msg, sizeof(usend_msg), 0, (struct sockaddr *)&saddr, addrlen); - if (retval == -1) + if (retval == -1) { info("error sending message (%s)", strerror(errno)); + retval = 1; + } else { + dbg("sent message type=0x%02x, %u bytes sent", usend_msg.type, retval); + retval = 0; + } close(sock);