#include <stdarg.h>
#include <unistd.h>
#include <errno.h>
-#include <sysfs/libsysfs.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"
int main_argc;
#ifdef LOG
-unsigned char logname[42];
+unsigned char logname[LOGNAME_SIZE];
void log_message (int level, const char *format, ...)
{
va_list args;
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;
printf("S: %s\n", dev->symlink);
printf("O: %s\n", dev->owner);
printf("G: %s\n", dev->group);
+ printf("F: %s\n", dev->config_file);
+ printf("L: %i\n", dev->config_line);
+ printf("T: %li\n", dev->config_time);
printf("\n");
return 0;
}
SYMLINK,
MODE,
OWNER,
- GROUP
+ GROUP,
+ ALL
};
static int print_device_chain(const char *path)
struct sysfs_device *sysfs_dev;
struct sysfs_device *sysfs_dev_parent;
int retval = 0;
+ char type;
+
+ type = get_device_type(path, "");
+ dbg("device type is %c", type);
/* get the class dev */
class_dev = sysfs_open_class_device_path(path);
return -1;
}
- /* read the 'dev' file for major/minor*/
- attr = sysfs_get_classdev_attr(class_dev, "dev");
- if (attr == NULL) {
- printf("couldn't get the \"dev\" file\n");
- retval = -1;
- goto exit;
+ 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");
+
+ if (type == 'b' || type =='c') {
+ /* read the 'dev' file for major/minor*/
+ attr = sysfs_get_classdev_attr(class_dev, "dev");
+ if (attr == NULL) {
+ printf("couldn't get the \"dev\" file\n");
+ retval = -1;
+ goto exit;
+ }
+ printf("device '%s' has major:minor %s", class_dev->path, attr->value);
}
- printf("\ndevice '%s' has major:minor %s", class_dev->path, attr->value);
- sysfs_close_attribute(attr);
/* open sysfs class device directory and print all attributes */
printf(" looking at class device '%s':\n", class_dev->path);
/* get the device link (if parent exists look here) */
class_dev_parent = sysfs_get_classdev_parent(class_dev);
- if (class_dev_parent != NULL) {
- //sysfs_close_class_device(class_dev);
- class_dev = class_dev_parent;
- }
- sysfs_dev = sysfs_get_classdev_device(class_dev);
+ if (class_dev_parent != NULL)
+ sysfs_dev = sysfs_get_classdev_device(class_dev_parent);
+ else
+ sysfs_dev = sysfs_get_classdev_device(class_dev);
+
if (sysfs_dev != NULL)
printf("follow the class device's \"device\"\n");
if (sysfs_dev_parent == NULL)
break;
- //sysfs_close_device(sysfs_dev);
sysfs_dev = sysfs_dev_parent;
}
- sysfs_close_device(sysfs_dev);
exit:
- //sysfs_close_class_device(class_dev);
+ sysfs_close_class_device(class_dev);
return retval;
}
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"