summaryrefslogtreecommitdiff
path: root/udev.h
diff options
context:
space:
mode:
authorkay.sievers@vrfy.org <kay.sievers@vrfy.org>2004-02-26 19:40:22 -0800
committerGreg KH <gregkh@suse.de>2005-04-26 21:32:30 -0700
commit831f800da34ddb449aecae925cd1f154f20b1eed (patch)
treee58de05592252bab5a83fca240941be313cba94b /udev.h
parentbef370d6ebd6707cc2ef183c2dc83f4a62d8111b (diff)
downloadsystemd-831f800da34ddb449aecae925cd1f154f20b1eed.tar.gz
[PATCH] udev - safer string handling - part two
As promised, here is the next round. We provide in addition to the already used macros: strfieldcpy(to, from) strfieldcat(to, from) the corresponding friends, if the size of the target is not known and must be provided by the caller: strnfieldcpy(to, from, maxsize) strnfieldcat(to, from, maxsize) and switch nearly all possibly unsafe users of strcat(), strncat(), strcpy() and strncpy() to these safer macros. The last known remaining issue seems the use of sprintf() and snprintf(). I will take on it later today or tomorrow.
Diffstat (limited to 'udev.h')
-rw-r--r--udev.h14
1 files changed, 13 insertions, 1 deletions
diff --git a/udev.h b/udev.h
index fc44a9847c..0ce010f3c4 100644
--- a/udev.h
+++ b/udev.h
@@ -64,7 +64,19 @@ do { \
#define strfieldcat(to, from) \
do { \
to[sizeof(to)-1] = '\0'; \
- strncat(to, from, sizeof(to) - strlen(to) -1); \
+ strncat(to, from, sizeof(to) - strlen(to)-1); \
+} while (0)
+
+#define strnfieldcpy(to, from, maxsize) \
+do { \
+ to[maxsize-1] = '\0'; \
+ strncpy(to, from, maxsize-1); \
+} while (0)
+
+#define strnfieldcat(to, from, maxsize) \
+do { \
+ to[maxsize-1] = '\0'; \
+ strncat(to, from, maxsize - strlen(to)-1); \
} while (0)
extern int udev_add_device(char *path, char *subsystem, int fake);