Bug fix: umount wasn't detaching loop devices unless mtab support was enabled. Made some whitespace cleanups while I was there.
This commit was genuinely broken at the time (not related to our build system): scripts/config/mkconfigs.c (2005-08-01 - 2006-10-05 arasi) uretilen bbconfigopts.h icine .config satirlarini kacissiz, ham newline'larla gömüyordu - gecerli C degildi, busybox'un kendi bb_mkdep araci bile parse edemiyordu (7d219aab7 ile duzeltildi, mkconfigs shell scripte cevrildi)
No binary (build failed)
—
(log yok)
| @@ -21,7 +21,7 @@ | |
| #include <getopt.h> | |
| #include "busybox.h" | |
| - | #define OPTION_STRING "flDnrva" |
| + | #define OPTION_STRING "flDnrvad" |
| #define OPT_FORCE 1 | |
| #define OPT_LAZY 2 | |
| #define OPT_DONTFREELOOP 4 | |
| @@ -36,7 +36,7 @@ int umount_main(int argc, char **argv) | |
| char path[2*PATH_MAX]; | |
| struct mntent me; | |
| FILE *fp; | |
| - | int status=EXIT_SUCCESS; |
| + | int status = EXIT_SUCCESS; |
| unsigned long opt; | |
| struct mtab_list { | |
| char *dir; | |
| @@ -46,7 +46,7 @@ int umount_main(int argc, char **argv) | |
| /* Parse any options */ | |
| - | opt = bb_getopt_ulflags (argc, argv, OPTION_STRING); |
| + | opt = bb_getopt_ulflags(argc, argv, OPTION_STRING); |
| argc -= optind; | |
| argv += optind; | |
| @@ -59,52 +59,55 @@ int umount_main(int argc, char **argv) | |
| * entry. Notice that this also naturally reverses the list so that -a | |
| * umounts the most recent entries first. */ | |
| - | m=mtl=0; |
| - | if(opt & OPT_ALL) { |
| + | m = mtl = 0; |
| - | /* If we're umounting all, then m points to the start of the list and |
| - | * the argument list should be empty (which will match all). */ |
| + | /* If we're umounting all, then m points to the start of the list and |
| + | * the argument list should be empty (which will match all). */ |
| - | if(!(fp = setmntent(bb_path_mtab_file, "r"))) |
| + | if (!(fp = setmntent(bb_path_mtab_file, "r"))) { |
| + | if (opt & OPT_ALL) |
| bb_error_msg_and_die("Cannot open %s", bb_path_mtab_file); | |
| - | while (getmntent_r(fp,&me,path,sizeof(path))) { |
| - | m=xmalloc(sizeof(struct mtab_list)); |
| - | m->next=mtl; |
| - | m->device=bb_xstrdup(me.mnt_fsname); |
| - | m->dir=bb_xstrdup(me.mnt_dir); |
| - | mtl=m; |
| - | } |
| - | endmntent(fp); |
| + | } else while (getmntent_r(fp,&me,path,sizeof(path))) { |
| + | m = xmalloc(sizeof(struct mtab_list)); |
| + | m->next = mtl; |
| + | m->device = bb_xstrdup(me.mnt_fsname); |
| + | m->dir = bb_xstrdup(me.mnt_dir); |
| + | mtl = m; |
| + | } |
| + | endmntent(fp); |
| /* If we're not mounting all, we need at least one argument. */ | |
| - | } else if(argc <= 0) bb_show_usage(); |
| + | if (!(opt & OPT_ALL)) { |
| + | m = 0; |
| + | if (!argc) bb_show_usage(); |
| + | } |
| + | |
| + | |
| // Loop through everything we're supposed to umount, and do so. | |
| - | for(;;) { |
| + | for (;;) { |
| int curstat; | |
| // Do we already know what to umount this time through the loop? | |
| - | if(m) safe_strncpy(path,m->dir,PATH_MAX); |
| + | if (m) safe_strncpy(path, m->dir, PATH_MAX); |
| // For umount -a, end of mtab means time to exit. | |
| - | else if(opt & OPT_ALL) break; |
| + | else if (opt & OPT_ALL) break; |
| // Get next command line argument (and look it up in mtab list) | |
| - | else if(!argc--) break; |
| + | else if (!argc--) break; |
| else { | |
| - | // Get next command line argument (and look it up in mtab list) |
| realpath(*argv++, path); | |
| - | if (ENABLE_FEATURE_MTAB_SUPPORT) |
| - | for(m = mtl; m; m = m->next) |
| - | if(!strcmp(path, m->dir) || !strcmp(path, m->device)) |
| - | break; |
| + | for (m = mtl; m; m = m->next) |
| + | if (!strcmp(path, m->dir) || !strcmp(path, m->device)) |
| + | break; |
| } | |
| // Let's ask the thing nicely to unmount. | |
| curstat = umount(path); | |
| // Force the unmount, if necessary. | |
| - | if(curstat && doForce) { |
| + | if (curstat && doForce) { |
| curstat = umount2(path, doForce); | |
| - | if(curstat) |
| + | if (curstat) |
| bb_error_msg_and_die("forced umount of %s failed!", path); | |
| } | |
| @@ -117,10 +120,10 @@ int umount_main(int argc, char **argv) | |
| /* De-allocate the loop device. This ioctl should be ignored on any | |
| * non-loop block devices. */ | |
| - | if(ENABLE_FEATURE_MOUNT_LOOP && !(opt & OPT_DONTFREELOOP) && m) |
| + | if (ENABLE_FEATURE_MOUNT_LOOP && !(opt & OPT_DONTFREELOOP) && m) |
| del_loop(m->device); | |
| - | if(curstat) { |
| + | if (curstat) { |
| /* Yes, the ENABLE is redundant here, but the optimizer for ARM | |
| * can't do simple constant propagation in local variables... */ | |
| if(ENABLE_FEATURE_MTAB_SUPPORT && !(opt & OPT_NO_MTAB) && m) | |
| @@ -129,16 +132,16 @@ int umount_main(int argc, char **argv) | |
| bb_perror_msg("Couldn't umount %s", path); | |
| } | |
| // Find next matching mtab entry for -a or umount /dev | |
| - | while(m && (m = m->next)) |
| - | if((opt & OPT_ALL) || !strcmp(path,m->device)) |
| + | while (m && (m = m->next)) |
| + | if ((opt & OPT_ALL) || !strcmp(path,m->device)) |
| break; | |
| } | |
| // Free mtab list if necessary | |
| - | if(ENABLE_FEATURE_CLEAN_UP) { |
| - | while(mtl) { |
| - | m=mtl->next; |
| + | if (ENABLE_FEATURE_CLEAN_UP) { |
| + | while (mtl) { |
| + | m = mtl->next; |
| free(mtl->device); | |
| free(mtl->dir); | |
| free(mtl); | |