From 111e4f81ff057fd5869d152a503ad982e2116f85 Mon Sep 17 00:00:00 2001 From: Alan Jenkins Date: Tue, 21 Oct 2008 22:42:15 +0100 Subject: [PATCH] replace strncpy() with strlcpy() The problem was strncpy() doesn't stop after writing the terminating NUL; by definition it goes on to zero the entire buffer. I spy another use of strncpy in udev_device_add_property_from_string(), which is responsible for another ~1% user cpu time... Signed-off-by: Alan Jenkins --- extras/scsi_id/scsi_id.c | 12 ++++-------- udev/lib/libudev-device.c | 2 +- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/extras/scsi_id/scsi_id.c b/extras/scsi_id/scsi_id.c index 6334af38..86c76cfc 100644 --- a/extras/scsi_id/scsi_id.c +++ b/extras/scsi_id/scsi_id.c @@ -135,8 +135,7 @@ static void set_type(char *to, const char *from, size_t len) break; } } - strncpy(to, type, len); - to[len-1] = '\0'; + util_strlcpy(to, type, len); } /* @@ -385,8 +384,7 @@ static int set_options(struct udev *udev, case 'd': dev_specified = 1; - strncpy(maj_min_dev, optarg, MAX_PATH_LEN); - maj_min_dev[MAX_PATH_LEN-1] = '\0'; + util_strlcpy(maj_min_dev, optarg, MAX_PATH_LEN); break; case 'e': @@ -394,8 +392,7 @@ static int set_options(struct udev *udev, break; case 'f': - strncpy(config_file, optarg, MAX_PATH_LEN); - config_file[MAX_PATH_LEN-1] = '\0'; + util_strlcpy(config_file, optarg, MAX_PATH_LEN); break; case 'g': @@ -461,8 +458,7 @@ static int set_options(struct udev *udev, } if (optind < argc && !dev_specified) { dev_specified = 1; - strncpy(maj_min_dev, argv[optind], MAX_PATH_LEN); - maj_min_dev[MAX_PATH_LEN-1] = '\0'; + util_strlcpy(maj_min_dev, argv[optind], MAX_PATH_LEN); } return 0; } diff --git a/udev/lib/libudev-device.c b/udev/lib/libudev-device.c index 5a435487..f56db7ff 100644 --- a/udev/lib/libudev-device.c +++ b/udev/lib/libudev-device.c @@ -1001,7 +1001,7 @@ struct udev_list_entry *udev_device_add_property_from_string(struct udev_device char name[UTIL_PATH_SIZE]; char *val; - strncpy(name, property, sizeof(name)); + util_strlcpy(name, property, sizeof(name)); val = strchr(name, '='); if (val == NULL) return NULL; -- 2.39.5