chiark / gitweb /
[PATCH] udevinfo: print errors to stderr instead of stdout
[elogind.git] / udevinfo.c
index b2d22e984e44caa3a5d5e0d0bcdf5f22479de02a..d1dd663d8185a28eb668f058e64d63ab71811b50 100644 (file)
@@ -3,7 +3,6 @@
  *
  * Copyright (C) 2004 Kay Sievers <kay.sievers@vrfy.org>
  *
- *
  *     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.
@@ -28,7 +27,7 @@
 #include <errno.h>
 
 #include "libsysfs/sysfs/libsysfs.h"
-#include "libsysfs/dlist.h"
+#include "udev_libc_wrapper.h"
 #include "udev.h"
 #include "udev_utils.h"
 #include "udev_version.h"
 #include "logging.h"
 
 
-#define SYSFS_VALUE_SIZE               256
-
-#ifdef LOG
-void log_message (int level, const char *format, ...)
+#ifdef USE_LOG
+void log_message (int priority, const char *format, ...)
 {
        va_list args;
 
+       if (priority > udev_log_priority)
+               return;
+
        va_start(args, format);
-       vsyslog(level, format, args);
+       vsyslog(priority, format, args);
        va_end(args);
 }
 #endif
@@ -52,12 +52,12 @@ void log_message (int level, const char *format, ...)
 static void print_all_attributes(struct dlist *attr_list)
 {
        struct sysfs_attribute *attr;
-       char value[SYSFS_VALUE_SIZE];
+       char value[VALUE_SIZE];
        int len;
 
        dlist_for_each_data(attr_list, attr, struct sysfs_attribute) {
                if (attr->value != NULL) {
-                       strfieldcpy(value, attr->value);
+                       strlcpy(value, attr->value, sizeof(value));
                        len = strlen(value);
                        if (len == 0)
                                continue;
@@ -75,7 +75,7 @@ static void print_all_attributes(struct dlist *attr_list)
                                len--;
                        }
                        if (len == 0)
-                               printf("    SYSFS{%s}=\"%s\"\n", attr->name, value);
+                               printf("    SYSFS{%s}==\"%s\"\n", attr->name, value);
                }
        }
        printf("\n");
@@ -114,7 +114,7 @@ static int print_device_chain(const char *path)
        /*  get the class dev */
        class_dev = sysfs_open_class_device_path(path);
        if (class_dev == NULL) {
-               printf("couldn't get the class device\n");
+               fprintf(stderr, "couldn't get the class device\n");
                return -1;
        }
 
@@ -132,11 +132,11 @@ static int print_device_chain(const char *path)
 
        /* open sysfs class device directory and print all attributes */
        printf("  looking at class device '%s':\n", class_dev->path);
-       printf("    SUBSYSTEM=\"%s\"\n", class_dev->classname);
+       printf("    SUBSYSTEM==\"%s\"\n", class_dev->classname);
 
        attr_list = sysfs_get_classdev_attributes(class_dev);
        if (attr_list == NULL) {
-               printf("couldn't open class device directory\n");
+               fprintf(stderr, "couldn't open class device directory\n");
                retval = -1;
                goto exit;
        }
@@ -156,15 +156,15 @@ static int print_device_chain(const char *path)
        while (sysfs_dev != NULL) {
                attr_list = sysfs_get_device_attributes(sysfs_dev);
                if (attr_list == NULL) {
-                       printf("couldn't open device directory\n");
+                       fprintf(stderr, "couldn't open device directory\n");
                        retval = -1;
                        goto exit;
                }
 
                printf("  looking at the device chain at '%s':\n", sysfs_dev->path);
-               printf("    BUS=\"%s\"\n", sysfs_dev->bus);
-               printf("    ID=\"%s\"\n", sysfs_dev->bus_id);
-               printf("    DRIVER=\"%s\"\n", sysfs_dev->driver_name);
+               printf("    BUS==\"%s\"\n", sysfs_dev->bus);
+               printf("    ID==\"%s\"\n", sysfs_dev->bus_id);
+               printf("    DRIVER==\"%s\"\n", sysfs_dev->driver_name);
 
                /* open sysfs device directory and print all attributes */
                print_all_attributes(attr_list);
@@ -182,7 +182,7 @@ exit:
 }
 
 static int print_dump(const char *devpath, const char *name) {
-       printf("%s:%s/%s\n", devpath, udev_root, name);
+       printf("%s=%s/%s\n", devpath, udev_root, name);
        return 0;
 }
 
@@ -194,9 +194,9 @@ int main(int argc, char *argv[], char *envp[])
        int root = 0;
        int attributes = 0;
        enum query_type query = NONE;
-       char path[NAME_SIZE] = "";
-       char name[NAME_SIZE] = "";
-       char temp[NAME_SIZE];
+       char path[PATH_SIZE] = "";
+       char name[PATH_SIZE] = "";
+       char temp[PATH_SIZE];
        struct name_entry *name_loop;
        char *pos;
        int retval = 0;
@@ -216,12 +216,12 @@ int main(int argc, char *argv[], char *envp[])
                switch (option) {
                case 'n':
                        dbg("udev name: %s\n", optarg);
-                       strfieldcpy(name, optarg);
+                       strlcpy(name, optarg, sizeof(name));
                        break;
 
                case 'p':
                        dbg("udev path: %s\n", optarg);
-                       strfieldcpy(path, optarg);
+                       strlcpy(path, optarg, sizeof(path));
                        break;
 
                case 'q':
@@ -247,7 +247,7 @@ int main(int argc, char *argv[], char *envp[])
                                break;
                        }
 
-                       printf("unknown query type\n");
+                       fprintf(stderr, "unknown query type\n");
                        retval = 1;
                        goto exit;
 
@@ -285,7 +285,7 @@ int main(int argc, char *argv[], char *envp[])
                                if (path[0] != '/') {
                                        /* prepend '/' if missing */
                                        strcpy(temp, "/");
-                                       strfieldcat(temp, path);
+                                       strlcpy(temp, path, sizeof(temp));
                                        pos = temp;
                                } else {
                                        pos = path;
@@ -293,14 +293,14 @@ int main(int argc, char *argv[], char *envp[])
                        }
                        retval = udev_db_get_device(&udev, pos);
                        if (retval != 0) {
-                               printf("device not found in database\n");
+                               fprintf(stderr, "device not found in database\n");
                                goto exit;
                        }
                        goto print;
                }
 
                if (name[0] != '\0') {
-                       char devpath[NAME_SIZE];
+                       char devpath[PATH_SIZE];
                        int len;
 
                        /* remove udev_root if given */
@@ -310,16 +310,16 @@ int main(int argc, char *argv[], char *envp[])
                        } else
                                pos = name;
 
-                       retval = udev_db_search_name(devpath, DEVPATH_SIZE, pos);
+                       retval = udev_db_search_name(devpath, sizeof(devpath), pos);
                        if (retval != 0) {
-                               printf("device not found in database\n");
+                               fprintf(stderr, "device not found in database\n");
                                goto exit;
                        }
                        udev_db_get_device(&udev, devpath);
                        goto print;
                }
 
-               printf("query needs device path(-p) or node name(-n) specified\n");
+               fprintf(stderr, "query needs device path(-p) or node name(-n) specified\n");
                retval = 3;
                goto exit;
 
@@ -355,15 +355,15 @@ print:
 
        if (attributes) {
                if (path[0] == '\0') {
-                       printf("attribute walk on device chain needs path(-p) specified\n");
+                       fprintf(stderr, "attribute walk on device chain needs path(-p) specified\n");
                        retval = 4;
                        goto exit;
                } else {
                        if (strncmp(path, sysfs_path, strlen(sysfs_path)) != 0) {
                                /* prepend sysfs mountpoint if not given */
-                               strfieldcpy(temp, path);
-                               strfieldcpy(path, sysfs_path);
-                               strfieldcat(path, temp);
+                               snprintf(temp, sizeof(temp), "%s%s", sysfs_path, path);
+                               temp[sizeof(temp)-1] = '\0';
+                               strlcpy(path, temp, sizeof(temp));
                        }
                        print_device_chain(path);
                        goto exit;
@@ -376,7 +376,7 @@ print:
        }
 
 help:
-       printf("Usage: udevinfo [-anpqrVh]\n"
+       fprintf(stderr, "Usage: udevinfo [-anpqrVh]\n"
               "  -q TYPE  query database for the specified value:\n"
               "             'name'    name of device node\n"
               "             'symlink' pointing to node\n"