#include <unistd.h>
#include <errno.h>
+#include "libsysfs/sysfs/libsysfs.h"
+#include "libsysfs/dlist.h"
#include "udev.h"
+#include "udev_lib.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;
+#ifdef LOG
+unsigned char logname[LOGNAME_SIZE];
+void log_message (int level, const char *format, ...)
+{
+ va_list args;
+
+ va_start(args, format);
+ vsyslog(level, format, args);
+ va_end(args);
+}
+#endif
+
static int print_all_attributes(const char *path)
{
struct dlist *attributes;
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;
len--;
}
if (len == 0)
- printf(" SYSFS_%s=\"%s\"\n", attr->name, value);
+ printf(" SYSFS{%s}=\"%s\"\n", attr->name, value);
}
}
printf("\n");
SYMLINK,
MODE,
OWNER,
- GROUP
+ GROUP,
+ ALL
};
static int print_device_chain(const char *path)
retval = -1;
goto exit;
}
- printf("\ndevice '%s' has major:minor %s", class_dev->path, attr->value);
+
+ printf("\nudevinfo starts with the device the node belongs to and then walks up the\n"
+ "device chain, to print for every device found, all possibly useful attributes\n"
+ "in the udev key format.\n"
+ "Only attributes within one device section may be used together in one rule,\n"
+ "to match the device for which the node will be created.\n"
+ "\n");
+ printf("device '%s' has major:minor %s", class_dev->path, attr->value);
sysfs_close_attribute(attr);
/* open sysfs class device directory and print all attributes */
break;
}
+ if (strcmp(optarg, "all") == 0) {
+ query = ALL;
+ break;
+ }
+
printf("unknown query type\n");
exit(1);
} else {
if (path[0] != '/') {
/* prepend '/' if missing */
- strcat(temp, "/");
- strncat(temp, path, sizeof(path));
+ strfieldcat(temp, "/");
+ strfieldcat(temp, path);
pos = temp;
} else {
pos = path;
case NAME:
if (root)
strfieldcpy(result, udev_root);
- strncat(result, dev.name, sizeof(result));
+ strfieldcat(result, dev.name);
break;
case SYMLINK:
strfieldcpy(result, path);
break;
+ case ALL:
+ print_record(path, &dev);
+ goto exit;
+
default:
goto 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;
" '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"
main_argv = argv;
main_argc = argc;
+ init_logging("udevinfo");
+
/* initialize our configuration */
udev_init_config();