/*
- * udevinfo.c - fetches stored device information or sysfs attributes
- *
- * Copyright (C) 2004-2005 Kay Sievers <kay.sievers@vrfy.org>
+ * Copyright (C) 2004-2006 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
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
- * 675 Mass Ave, Cambridge, MA 02139, USA.
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#include <unistd.h>
#include <dirent.h>
#include <errno.h>
+#include <getopt.h>
#include "udev.h"
}
#endif
-static void print_all_attributes(const char *devpath)
+static void print_all_attributes(const char *devpath, const char *key)
{
char path[PATH_SIZE];
DIR *dir;
}
replace_untrusted_chars(value);
- printf(" SYSFS{%s}==\"%s\"\n", dent->d_name, value);
+ printf(" %s{%s}==\"%s\"\n", key, dent->d_name, value);
}
}
printf("\n");
return -1;
printf(" looking at device '%s':\n", dev->devpath);
- printf(" KERNEL==\"%s\"\n", dev->kernel_name);
+ printf(" KERNEL==\"%s\"\n", dev->kernel);
printf(" SUBSYSTEM==\"%s\"\n", dev->subsystem);
printf(" DRIVER==\"%s\"\n", dev->driver);
- print_all_attributes(dev->devpath);
+ print_all_attributes(dev->devpath, "ATTR");
/* walk up the chain of devices */
while (1) {
if (dev == NULL)
break;
printf(" looking at parent device '%s':\n", dev->devpath);
- printf(" ID==\"%s\"\n", dev->kernel_name);
- printf(" BUS==\"%s\"\n", dev->subsystem);
- printf(" DRIVER==\"%s\"\n", dev->driver);
+ printf(" KERNELS==\"%s\"\n", dev->kernel);
+ printf(" SUBSYSTEMS==\"%s\"\n", dev->subsystem);
+ printf(" DRIVERS==\"%s\"\n", dev->driver);
- print_all_attributes(dev->devpath);
+ print_all_attributes(dev->devpath, "ATTRS");
}
return 0;
name_list_cleanup(&name_list);
}
-static void print_help(void)
-{
- 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"
- " 'path' sysfs device path\n"
- " 'env' the device related imported environment\n"
- " 'all' all values\n"
- "\n"
- " -p PATH sysfs device path used for query or chain\n"
- " -n NAME node/symlink name used for query\n"
- "\n"
- " -r prepend to query result or print udev_root\n"
- " -a print all SYSFS_attributes along the device chain\n"
- " -e export the content of the udev database\n"
- " -V print udev version\n"
- " -h print this help text\n"
- "\n");
-}
-
int main(int argc, char *argv[], char *envp[])
{
- static const char short_options[] = "aden:p:q:rVh";
int option;
struct udevice *udev;
int root = 0;
+ static const struct option options[] = {
+ { "name", 1, NULL, 'n' },
+ { "path", 1, NULL, 'p' },
+ { "query", 1, NULL, 'q' },
+ { "attribute-walk", 0, NULL, 'a' },
+ { "export-db", 0, NULL, 'e' },
+ { "root", 0, NULL, 'r' },
+ { "version", 0, NULL, 'V' },
+ { "help", 0, NULL, 'h' },
+ {}
+ };
+
enum action_type {
ACTION_NONE,
ACTION_QUERY,
int rc = 0;
logging_init("udevinfo");
-
udev_config_init();
sysfs_init();
/* get command line options */
while (1) {
- option = getopt(argc, argv, short_options);
+ option = getopt_long(argc, argv, "aden:p:q:rVh", options, NULL);
if (option == -1)
break;
printf("udevinfo, version %s\n", UDEV_VERSION);
goto exit;
case 'h':
- case '?':
+ printf("Usage: udevinfo OPTIONS\n"
+ " --query=<type> query database for the specified value:\n"
+ " name name of device node\n"
+ " symlink pointing to node\n"
+ " path sysfs device path\n"
+ " env the device related imported environment\n"
+ " all all values\n"
+ "\n"
+ " --path=<devpath> sysfs device path used for query or chain\n"
+ " --name=<name> node or symlink name used for query\n"
+ "\n"
+ " --root prepend to query result or print udev_root\n"
+ " --attribute-walk print all SYSFS_attributes along the device chain\n"
+ " --export-db export the content of the udev database\n"
+ " --verision print udev version\n"
+ " --help print this text\n"
+ "\n");
+ goto exit;
default:
- print_help();
goto exit;
}
}
}
udev_db_get_device(udev, devpath);
} else {
- fprintf(stderr, "query needs device path(-p) or node name(-n) specified\n");
+ fprintf(stderr, "query needs --path or node --name specified\n");
rc = 4;
goto exit;
}
print_record(udev);
break;
default:
- print_help();
+ fprintf(stderr, "unknown query type\n");
break;
}
break;
}
print_device_chain(devpath);
} else {
- fprintf(stderr, "attribute walk needs device path(-p) or node name(-n) specified\n");
+ fprintf(stderr, "attribute walk needs --path or node --name specified\n");
rc = 5;
goto exit;
}
printf("%s\n", udev_root);
break;
default:
- print_help();
+ fprintf(stderr, "missing option\n");
rc = 1;
break;
}