summaryrefslogtreecommitdiff
path: root/udev.h
diff options
context:
space:
mode:
authorkay.sievers@vrfy.org <kay.sievers@vrfy.org>2004-03-03 18:16:35 -0800
committerGreg KH <gregkh@suse.de>2005-04-26 21:35:08 -0700
commit9fe3f9a9389bb06cf645d33cbb2b45e1f63d737c (patch)
treeb433b3a99180227203027ec80f825ba94ac59869 /udev.h
parent88ed4bbe5605f6fe17993c5b81709f4d12812b9a (diff)
[PATCH] cleanup mult field string handling
Here I try to cleanup our various multifield iteration over the strings. Inspired by our nice list.h we now have a macro to iterate over the string and process the parts of it: It makes the code more readable and we don't change the string while we process it like the former strsep() does. Example: foreach_strpart(dev->symlink, " ", pos, len) { if (strncmp(&dev->symlink[pos], find_name, len) != 0) continue; ... } For the callout part selector %c{2} we separate now not only by space but also newline and return characters, cause some programs may give multiline values back. A possible RESULT match must contain wildcards for these characters. Also a bug in the recent udevinfo symlink query feature is fixed.
Diffstat (limited to 'udev.h')
-rw-r--r--udev.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/udev.h b/udev.h
index 5737c84c9d..9327e90913 100644
--- a/udev.h
+++ b/udev.h
@@ -97,6 +97,12 @@ do { \
snprintf((to) + strlen(to), maxsize - strlen(to)-1, "%u", i); \
} while (0)
+#define foreach_strpart(str, separator, pos, len) \
+ for(pos = 0, len = strcspn(str, separator); \
+ (pos) < strlen(str); \
+ pos = pos + (len) + 1, len = strcspn((str) + pos, separator)) \
+ if (len > 0)
+
static inline char *get_action(void)
{
char *action;