static const char *const memory_exhausted = "memory exhausted";
static char default_rootdir[]=".";
static char *rootdir = default_rootdir;
+static char *rootdir_prepend = default_rootdir;
static int trace = 0;
struct name_id {
}
error_msg_and_die("No entry for %s in search list", id_buf);
}
+
+ // Unreachable, but avoid an error with -Werror=return-type
+ return 0;
}
static void free_list(struct name_id *list)
error_msg_and_die("Device table entries require absolute paths");
}
name = xstrdup(path + 1);
- /* prefix path with rootdir */
- sprintf(path, "%s/%s", rootdir, name);
+ /* prefix path with rootdir_prepend */
+ sprintf(path, "%s/%s", rootdir_prepend, name);
/* XXX Why is name passed into all of the add_new_*() routines? */
switch (type) {
for (i = start; i < start + count; i++) {
sprintf(buf, "%s%d", name, i);
- sprintf(path, "%s/%s%d", rootdir, name, i);
+ sprintf(path, "%s/%s%d", rootdir_prepend, name, i);
/* FIXME: MKDEV uses illicit insider knowledge of kernel
* major/minor representation... */
rdev = MKDEV(major, minor + (i - start) * increment);
- sprintf(path, "%s/%s\0", rootdir, buf);
+ sprintf(path, "%s/%s\0", rootdir_prepend, buf);
add_new_device(buf, path, uid, gid, mode, rdev);
}
} else {
} else {
closedir(dir);
}
- /* If "/" is specified, use "" because rootdir is always prepended to a
- * string that starts with "/" */
- if (0 == strcmp(optarg, "/"))
- rootdir = xstrdup("");
+ rootdir = xstrdup(optarg);
+ if (0 == strcmp(rootdir, "/"))
+ rootdir_prepend = xstrdup("");
else
- rootdir = xstrdup(optarg);
+ rootdir_prepend = xstrdup(rootdir);
break;
case 't':