X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=udev%2Fudev-util.c;h=645293d389b6572f7a92cee9bf25500aabc38f7b;hb=f9b3f88f71f5bdfb18aa4bfba00d72fa41fdf286;hp=2620d9a994ba0e4ea3d96d36965f7f6957975f82;hpb=a391f49d7f5433e6204f35331b81391c2d110309;p=elogind.git diff --git a/udev/udev-util.c b/udev/udev-util.c index 2620d9a99..645293d38 100644 --- a/udev/udev-util.c +++ b/udev/udev-util.c @@ -36,7 +36,7 @@ int util_create_path(struct udev *udev, const char *path) struct stat stats; int ret; - util_strlcpy(p, path, sizeof(p)); + util_strscpy(p, sizeof(p), path); pos = strrchr(p, '/'); if (pos == p || pos == NULL) return 0; @@ -135,46 +135,46 @@ uid_t util_lookup_user(struct udev *udev, const char *user) if (strcmp(user, "root") == 0) return 0; - uid = strtoul(user, &endptr, 10); - if (endptr[0] == '\0') - return uid; - - errno = 0; - getpwnam_r(user, &pwbuf, buf, buflen, &pw); - if (pw != NULL) - return pw->pw_uid; - if (errno == 0 || errno == ENOENT || errno == ESRCH) - err(udev, "specified user '%s' unknown\n", user); - else - err(udev, "error resolving user '%s': %m\n", user); - return 0; - } + uid = strtoul(user, &endptr, 10); + if (endptr[0] == '\0') + return uid; + + errno = 0; + getpwnam_r(user, &pwbuf, buf, buflen, &pw); + if (pw != NULL) + return pw->pw_uid; + if (errno == 0 || errno == ENOENT || errno == ESRCH) + err(udev, "specified user '%s' unknown\n", user); + else + err(udev, "error resolving user '%s': %m\n", user); + return 0; +} - extern gid_t util_lookup_group(struct udev *udev, const char *group) - { - char *endptr; - int buflen = sysconf(_SC_GETGR_R_SIZE_MAX); - char buf[buflen]; - struct group grbuf; - struct group *gr; - gid_t gid = 0; +gid_t util_lookup_group(struct udev *udev, const char *group) +{ + char *endptr; + int buflen = sysconf(_SC_GETGR_R_SIZE_MAX); + char buf[buflen]; + struct group grbuf; + struct group *gr; + gid_t gid = 0; - if (strcmp(group, "root") == 0) - return 0; - gid = strtoul(group, &endptr, 10); - if (endptr[0] == '\0') - return gid; - - errno = 0; - getgrnam_r(group, &grbuf, buf, buflen, &gr); - if (gr != NULL) - return gr->gr_gid; - if (errno == 0 || errno == ENOENT || errno == ESRCH) - err(udev, "specified group '%s' unknown\n", group); - else - err(udev, "error resolving group '%s': %m\n", group); + if (strcmp(group, "root") == 0) return 0; - } + gid = strtoul(group, &endptr, 10); + if (endptr[0] == '\0') + return gid; + + errno = 0; + getgrnam_r(group, &grbuf, buf, buflen, &gr); + if (gr != NULL) + return gr->gr_gid; + if (errno == 0 || errno == ENOENT || errno == ESRCH) + err(udev, "specified group '%s' unknown\n", group); + else + err(udev, "error resolving group '%s': %m\n", group); + return 0; +} /* handle "[/]" format */ int util_resolve_subsys_kernel(struct udev *udev, const char *string, @@ -186,12 +186,10 @@ int util_resolve_subsys_kernel(struct udev *udev, const char *string, struct udev_device *dev; char *attr; - if (string == NULL) - string = result; if (string[0] != '[') return -1; - util_strlcpy(temp, string, sizeof(temp)); + util_strscpy(temp, sizeof(temp), string); subsys = &temp[1]; @@ -223,16 +221,18 @@ int util_resolve_subsys_kernel(struct udev *udev, const char *string, val = udev_device_get_sysattr_value(dev, attr); if (val != NULL) - util_strlcpy(result, val, maxsize); + util_strscpy(result, maxsize, val); else result[0] = '\0'; info(udev, "value '[%s/%s]%s' is '%s'\n", subsys, sysname, attr, result); } else { - util_strlcpy(result, udev_device_get_syspath(dev), maxsize); - if (attr != NULL) { - util_strlcat(result, "/", maxsize); - util_strlcat(result, attr, maxsize); - } + size_t l; + char *s; + + s = result; + l = util_strpcpyl(&s, maxsize, udev_device_get_syspath(dev), NULL); + if (attr != NULL) + util_strpcpyl(&s, l, "/", attr, NULL); info(udev, "path '[%s/%s]%s' is '%s'\n", subsys, sysname, attr, result); } udev_device_unref(dev); @@ -254,7 +254,7 @@ int util_run_program(struct udev *udev, const char *command, char **envp, int err = 0; /* build argv from command */ - util_strlcpy(arg, command, sizeof(arg)); + util_strscpy(arg, sizeof(arg), command); i = 0; if (strchr(arg, ' ') != NULL) { char *pos = arg; @@ -294,9 +294,8 @@ int util_run_program(struct udev *udev, const char *command, char **envp, } /* allow programs in /lib/udev/ to be called without the path */ - if (strchr(argv[0], '/') == NULL) { - util_strlcpy(program, UDEV_PREFIX "/lib/udev/", sizeof(program)); - util_strlcat(program, argv[0], sizeof(program)); + if (argv[0][0] != '/') { + util_strscpyl(program, sizeof(program), UDEV_PREFIX "/lib/udev/", argv[0], NULL); argv[0] = program; } @@ -444,7 +443,7 @@ int util_run_program(struct udev *udev, const char *command, char **envp, if (WEXITSTATUS(status) != 0) err = -1; } else { - err(udev, "'%s' abnormal exit\n", argv[0]); + err(udev, "'%s' abnormal exit\n", command); err = -1; } }