X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=udevinfo.c;h=01c2a2a8ae646a6cd0d19e67a8052f2816cf5393;hp=103ebce08cad295a2d7443237e37e545031705cf;hb=8ea84a8a781c22f67def088eb9df581590393cda;hpb=51a8bb2f361d86013e7579570faba446eed9c66d diff --git a/udevinfo.c b/udevinfo.c index 103ebce08..01c2a2a8a 100644 --- a/udevinfo.c +++ b/udevinfo.c @@ -27,23 +27,30 @@ #include #include +#include "libsysfs/sysfs/libsysfs.h" +#include "libsysfs/dlist.h" #include "udev.h" #include "udev_version.h" #include "logging.h" #include "udevdb.h" -#include "libsysfs/libsysfs.h" # define SYSFS_VALUE_MAX 200 char **main_argv; int main_argc; -unsigned char logname[42]; -int log_ok(void) +#ifdef LOG +unsigned char logname[42]; +void log_message (int level, const char *format, ...) { - return 1; + va_list args; + + va_start(args, format); + vsyslog(level, format, args); + va_end(args); } +#endif static int print_all_attributes(const char *path) { @@ -66,7 +73,7 @@ static int print_all_attributes(const char *path) dlist_for_each_data(attributes, attr, struct sysfs_attribute) { if (attr->value != NULL) { - strncpy(value, attr->value, SYSFS_VALUE_MAX); + strfieldcpy(value, attr->value); len = strlen(value); if (len == 0) continue; @@ -84,7 +91,7 @@ static int print_all_attributes(const char *path) len--; } if (len == 0) - printf(" SYSFS_%s=\"%s\"\n", attr->name, value); + printf(" SYSFS{%s}=\"%s\"\n", attr->name, value); } } printf("\n"); @@ -115,7 +122,8 @@ enum query_type { SYMLINK, MODE, OWNER, - GROUP + GROUP, + ALL }; static int print_device_chain(const char *path) @@ -251,6 +259,11 @@ static int process_options(void) break; } + if (strcmp(optarg, "all") == 0) { + query = ALL; + break; + } + printf("unknown query type\n"); exit(1); @@ -299,8 +312,8 @@ static int process_options(void) } else { if (path[0] != '/') { /* prepend '/' if missing */ - strcat(temp, "/"); - strncat(temp, path, sizeof(path)); + strfieldcat(temp, "/"); + strfieldcat(temp, path); pos = temp; } else { pos = path; @@ -336,7 +349,7 @@ print: case NAME: if (root) strfieldcpy(result, udev_root); - strncat(result, dev.name, sizeof(result)); + strfieldcat(result, dev.name); break; case SYMLINK: @@ -359,6 +372,10 @@ print: strfieldcpy(result, path); break; + case ALL: + print_record(path, &dev); + goto exit; + default: goto exit; } @@ -378,7 +395,7 @@ exit: /* prepend sysfs mountpoint if not given */ strfieldcpy(temp, path); strfieldcpy(path, sysfs_path); - strncat(path, temp, sizeof(path)); + strfieldcat(path, temp); } print_device_chain(path); return 0; @@ -399,8 +416,10 @@ help: " 'owner' of node\n" " 'group' of node\n" " 'path' sysfs device path\n" + " 'all' all values\n" + "\n" " -p PATH sysfs device path used for query or chain\n" - " -n NAME node name used for query\n" + " -n NAME node/symlink name used for query\n" "\n" " -r print udev root\n" " -a print all SYSFS_attributes along the device chain\n"