# ID:	greg@kroah.com|ChangeSet|20030410173830|44862|5a456b78236181c4
# User:	greg
# Host:	kroah.com
# Root:	/home/greg/src/udev

# Patch vers:	1.3
# Patch type:	REGULAR

== ChangeSet ==
greg@kroah.com|ChangeSet|20030410173830|44862|5a456b78236181c4
hannal@us.ibm.com|ChangeSet|20040116002256|63498
D 1.440 04/01/16 13:58:40-08:00 kay.sievers@vrfy.org +3 -0
B greg@kroah.com|ChangeSet|20030410173830|44862|5a456b78236181c4
C
c [PATCH] udev - reverse user query options
c 
c Here we get the ability to query with the name of the node instead of
c the device path. It uses a linear search over the whole database.
c 
c   kay@pim:~/src/udev.kay$ ./udev -q path -n video/webcam0
c   /class/video4linux/video0
K 63539
P ChangeSet
------------------------------------------------

0a0
> greg@kroah.com|udev.c|20030410184827|40572|69de8ccce4541590 kay.sievers@vrfy.org[greg]|udev.c|20040116215838|46481
> dsteklof@us.ibm.com[greg]|udevdb.c|20030805225722|23679|510dafef81aa1749 kay.sievers@vrfy.org[greg]|udevdb.c|20040116215838|47656
> dsteklof@us.ibm.com[greg]|udevdb.h|20030805225722|29020|fdb4ca15d71c3b18 kay.sievers@vrfy.org[greg]|udevdb.h|20040116215838|00139

== udevdb.c ==
dsteklof@us.ibm.com[greg]|udevdb.c|20030805225722|23679|510dafef81aa1749
kay.sievers@vrfy.org[greg]|udevdb.c|20040115215319|51558
D 1.19 04/01/16 02:51:17-08:00 kay.sievers@vrfy.org[greg] +36 -6
B greg@kroah.com|ChangeSet|20030410173830|44862|5a456b78236181c4
C
c udev - reverse user query options
F 40041
K 47656
O -rw-rw-r--
P udevdb.c
------------------------------------------------

D146 1
I146 1
static int (*user_record_callback) (char *path, struct udevice *dev);
D150 2
I151 1
	return user_record_callback((char*) key.dptr, (struct udevice*) dbuf.dptr);
D155 1
I155 1
 * udevdb_call_foreach: dumps whole database by passing record data to user function
D158 1
I158 1
int udevdb_call_foreach(int (*user_record_handler) (char *path, struct udevice *dev))
I159 2
	int retval = 0;
\
D165 1
I165 19
	retval = tdb_traverse(udevdb, traverse_callback, NULL);
	if (retval < 0)
		return -ENODEV;
	else
		return 0;
}
\
static struct udevice *find_dev;
static char *find_path;
static const char *find_name;
\
static int find_device_by_name(char *path, struct udevice *dev)
{
	if (strncmp(dev->name, find_name, sizeof(*dev->name)) == 0) {
		memcpy(find_dev, dev, sizeof(*find_dev));
		strncpy(find_path, path, NAME_SIZE);
		/* stop search */
		return -1;
	}
I166 11
}
\
/**
 * udevdb_get_dev_byname: search device with given name by traversing the whole database
 */
int udevdb_get_dev_byname(const char *name, char *path, struct udevice *dev)
{
	find_path = path;
	find_dev = dev;
	find_name = name;
	return udevdb_call_foreach(find_device_by_name);

== udevdb.h ==
dsteklof@us.ibm.com[greg]|udevdb.h|20030805225722|29020|fdb4ca15d71c3b18
kay.sievers@vrfy.org[greg]|udevdb.h|20040113010119|57180
D 1.14 04/01/16 02:51:17-08:00 kay.sievers@vrfy.org[greg] +2 -1
B greg@kroah.com|ChangeSet|20030410173830|44862|5a456b78236181c4
C
c udev - reverse user query options
F 40041
K 139
O -rw-rw-r--
P udevdb.h
------------------------------------------------

D15 1
I15 1
extern int udevdb_call_foreach(int (*user_record_handler) (char *path, struct udevice *dev));
I19 1
extern int udevdb_get_dev_byname(const char *name, char *path, struct udevice *dev);

== udev.c ==
greg@kroah.com|udev.c|20030410184827|40572|69de8ccce4541590
kay.sievers@vrfy.org[greg]|udev.c|20040115215319|04204
D 1.38 04/01/16 02:51:17-08:00 kay.sievers@vrfy.org[greg] +66 -32
B greg@kroah.com|ChangeSet|20030410173830|44862|5a456b78236181c4
C
c udev - reverse user query options
F 40041
K 46481
O -rw-rw-rw-
P udev.c
------------------------------------------------

D86 1
I86 2
/* callback for database dump */
static int print_record(char *path, struct udevice *dev)
I93 1
	return 0;
I98 1
	PATH,
D106 1
I106 1
	static const char short_options[] = "dn:p:q:rVh";
I122 5
		case 'n':
			dbg("udev name: %s\n", optarg);
			strfieldcpy(dev.name, optarg);
			break;
\
I150 5
			if (strcmp(optarg, "path") == 0) {
				query = PATH;
				break;
			}
\
D164 1
I164 1
			retval = udevdb_call_foreach(print_record);
D182 5
D192 8
D201 3
I203 8
		if (path[0] != '\0') {
			retval = udevdb_get_dev(path, &dev);
			if (retval != 0) {
				printf("device not found in database\n");
				goto exit;
			}
			goto print;
		}
D205 3
I207 8
		if (dev.name[0] != '\0') {
			retval = udevdb_get_dev_byname(dev.name, path, &dev);
			if (retval != 0) {
				printf("device not found in database\n");
				goto exit;
			}
			goto print;
		}
D209 3
I211 2
		printf("query needs device path(-p) or node name(-n) specified\n");
		goto exit;
D213 6
I218 26
print:
		switch(query) {
		case NAME:
			if (root)
			strfieldcpy(result, udev_root);
			strncat(result, dev.name, sizeof(result));
			break;
\
		case SYMLINK:
			strfieldcpy(result, dev.symlink);
			break;
\
		case GROUP:
			strfieldcpy(result, dev.group);
			break;
\
		case OWNER:
			strfieldcpy(result, dev.owner);
			break;
\
		case PATH:
			strfieldcpy(result, path);
			break;
\
		default:
			goto exit;
I219 3
		printf("%s\n", result);
\
exit:
D230 1
I230 1
	printf("Usage: [-npqrdVh]\n"
I236 2
	       "  -n NAME  node name used for query\n"
	       "\n"

# Patch checksum=e8d1fdc7
