summaryrefslogtreecommitdiffstats
path: root/meta
diff options
context:
space:
mode:
authorJaeyoon Jung <jaeyoon.jung@lge.com>2024-08-07 03:44:37 +0900
committerRichard Purdie <richard.purdie@linuxfoundation.org>2024-08-08 14:28:49 +0100
commit454fcf36c7ad9bde5a0a9e3993874c19e407ee93 (patch)
treeb171d94dbdbf55a74d3f8fd1934e3e119d03b1bd /meta
parent0043986334e587dd09887b81535644ae437b2893 (diff)
downloadpoky-454fcf36c7ad9bde5a0a9e3993874c19e407ee93.tar.gz
makedevs: Fix issue when rootdir of / is given
Treating rootdir "/" as "" leads an error in parse_devtable(). Preserve it as it is given and use a separate variable for path name prepending. Another minor fix is to add a return statement at the end of convert2guid() to avoid an error with -Werror=return-type. (From OE-Core rev: 4d52e6276c687a8950bde21850072ddf14893fb2) Signed-off-by: Jaeyoon Jung <jaeyoon.jung@lge.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
-rw-r--r--meta/recipes-devtools/makedevs/makedevs/makedevs.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/meta/recipes-devtools/makedevs/makedevs/makedevs.c b/meta/recipes-devtools/makedevs/makedevs/makedevs.c
index df2e3cfad5..2254b54891 100644
--- a/meta/recipes-devtools/makedevs/makedevs/makedevs.c
+++ b/meta/recipes-devtools/makedevs/makedevs/makedevs.c
@@ -36,6 +36,7 @@ static const char *const app_name = "makedevs";
36static const char *const memory_exhausted = "memory exhausted"; 36static const char *const memory_exhausted = "memory exhausted";
37static char default_rootdir[]="."; 37static char default_rootdir[]=".";
38static char *rootdir = default_rootdir; 38static char *rootdir = default_rootdir;
39static char *rootdir_prepend = default_rootdir;
39static int trace = 0; 40static int trace = 0;
40 41
41struct name_id { 42struct name_id {
@@ -217,6 +218,9 @@ static unsigned long convert2guid(char *id_buf, struct name_id *search_list)
217 } 218 }
218 error_msg_and_die("No entry for %s in search list", id_buf); 219 error_msg_and_die("No entry for %s in search list", id_buf);
219 } 220 }
221
222 // Unreachable, but avoid an error with -Werror=return-type
223 return 0;
220} 224}
221 225
222static void free_list(struct name_id *list) 226static void free_list(struct name_id *list)
@@ -379,8 +383,8 @@ static int interpret_table_entry(char *line)
379 error_msg_and_die("Device table entries require absolute paths"); 383 error_msg_and_die("Device table entries require absolute paths");
380 } 384 }
381 name = xstrdup(path + 1); 385 name = xstrdup(path + 1);
382 /* prefix path with rootdir */ 386 /* prefix path with rootdir_prepend */
383 sprintf(path, "%s/%s", rootdir, name); 387 sprintf(path, "%s/%s", rootdir_prepend, name);
384 388
385 /* XXX Why is name passed into all of the add_new_*() routines? */ 389 /* XXX Why is name passed into all of the add_new_*() routines? */
386 switch (type) { 390 switch (type) {
@@ -406,11 +410,11 @@ static int interpret_table_entry(char *line)
406 410
407 for (i = start; i < start + count; i++) { 411 for (i = start; i < start + count; i++) {
408 sprintf(buf, "%s%d", name, i); 412 sprintf(buf, "%s%d", name, i);
409 sprintf(path, "%s/%s%d", rootdir, name, i); 413 sprintf(path, "%s/%s%d", rootdir_prepend, name, i);
410 /* FIXME: MKDEV uses illicit insider knowledge of kernel 414 /* FIXME: MKDEV uses illicit insider knowledge of kernel
411 * major/minor representation... */ 415 * major/minor representation... */
412 rdev = MKDEV(major, minor + (i - start) * increment); 416 rdev = MKDEV(major, minor + (i - start) * increment);
413 sprintf(path, "%s/%s\0", rootdir, buf); 417 sprintf(path, "%s/%s\0", rootdir_prepend, buf);
414 add_new_device(buf, path, uid, gid, mode, rdev); 418 add_new_device(buf, path, uid, gid, mode, rdev);
415 } 419 }
416 } else { 420 } else {
@@ -541,12 +545,11 @@ int main(int argc, char **argv)
541 } else { 545 } else {
542 closedir(dir); 546 closedir(dir);
543 } 547 }
544 /* If "/" is specified, use "" because rootdir is always prepended to a 548 rootdir = xstrdup(optarg);
545 * string that starts with "/" */ 549 if (0 == strcmp(rootdir, "/"))
546 if (0 == strcmp(optarg, "/")) 550 rootdir_prepend = xstrdup("");
547 rootdir = xstrdup("");
548 else 551 else
549 rootdir = xstrdup(optarg); 552 rootdir_prepend = xstrdup(rootdir);
550 break; 553 break;
551 554
552 case 't': 555 case 't':