chiark / gitweb /
[PATCH] replace strncpy()/strncat() by strlcpy()/strlcat()
[elogind.git] / udevinfo.c
index 6dfb918de58afedc7e880dc8366b30295ce8f867..4d13a5f6dc65027e34eb7676c2a72044ff7e80e4 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.
@@ -29,6 +28,7 @@
 
 #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"
@@ -36,9 +36,7 @@
 #include "logging.h"
 
 
-#define SYSFS_VALUE_SIZE               256
-
-#ifdef LOG
+#ifdef USE_LOG
 void log_message (int level, const char *format, ...)
 {
        va_list args;
@@ -52,12 +50,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;
@@ -181,8 +179,8 @@ exit:
        return retval;
 }
 
-static int print_dump(struct udevice *udev) {
-       printf("%s:%s/%s\n", udev->devpath, udev_root, udev->name);
+static int print_dump(const char *devpath, const char *name) {
+       printf("%s:%s/%s\n", devpath, udev_root, name);
        return 0;
 }
 
@@ -194,9 +192,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 +214,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':
@@ -260,7 +258,7 @@ int main(int argc, char *argv[], char *envp[])
                        break;
 
                case 'd':
-                       udev_db_call_foreach(print_dump);
+                       udev_db_dump_names(print_dump);
                        goto exit;
 
                case 'V':
@@ -285,7 +283,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;
@@ -300,7 +298,7 @@ int main(int argc, char *argv[], char *envp[])
                }
 
                if (name[0] != '\0') {
-                       char devpath[NAME_SIZE];
+                       char devpath[PATH_SIZE];
                        int len;
 
                        /* remove udev_root if given */
@@ -310,7 +308,7 @@ 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");
                                goto exit;
@@ -361,9 +359,9 @@ print:
                } 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;