eject: -T (implements single button open/close)
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)
| @@ -638,11 +638,12 @@ USE_FEATURE_DATE_ISOFMT( \ | |
| "Erik\\nis\\ncool\n") | |
| #define eject_trivial_usage \ | |
| - | "[-t] [DEVICE]" |
| + | "[-t] [-T] [DEVICE]" |
| #define eject_full_usage \ | |
| "Eject specified DEVICE (or default /dev/cdrom).\n\n" \ | |
| "Options:\n" \ | |
| - | "\t-t\tclose tray" |
| + | "\t-t\tclose tray\n" \ |
| + | "\t-T\topen/close tray (toggle)" |
| #define ed_trivial_usage "" | |
| #define ed_full_usage "" | |
| @@ -21,25 +21,40 @@ | |
| #define CDROMEJECT 0x5309 /* Ejects the cdrom media */ | |
| #define DEFAULT_CDROM "/dev/cdrom" | |
| + | #define FLAG_CLOSE 1 |
| + | #define FLAG_SMART 2 |
| + | |
| int eject_main(int argc, char **argv) | |
| { | |
| unsigned long flags; | |
| char *device; | |
| struct mntent *m; | |
| + | int dev; |
| - | flags = bb_getopt_ulflags(argc, argv, "t"); |
| + | /*bb_opt_complementally = "t--T:T--t";*/ |
| + | flags = bb_getopt_ulflags(argc, argv, "tT"); |
| device = argv[optind] ? : DEFAULT_CDROM; | |
| - | if ((m = find_mount_point(device, bb_path_mtab_file))) { |
| + | m = find_mount_point(device, bb_path_mtab_file); |
| + | if (m) { |
| if (umount(m->mnt_dir)) { | |
| - | bb_error_msg_and_die("Can't umount"); |
| + | bb_error_msg_and_die("can't umount"); |
| } else if (ENABLE_FEATURE_MTAB_SUPPORT) { | |
| erase_mtab(m->mnt_fsname); | |
| } | |
| } | |
| - | if (ioctl(xopen(device, (O_RDONLY | O_NONBLOCK)), |
| - | (flags ? CDROMCLOSETRAY : CDROMEJECT))) { |
| - | bb_perror_msg_and_die("%s", device); |
| + | |
| + | dev = xopen(device, O_RDONLY|O_NONBLOCK); |
| + | |
| + | if (flags & FLAG_CLOSE) goto close_tray; |
| + | |
| + | if (ioctl(dev, CDROMEJECT)) { |
| + | close_tray: |
| + | if (ioctl(dev, CDROMCLOSETRAY)) |
| + | bb_perror_msg_and_die("%s", device); |
| } | |
| - | return (EXIT_SUCCESS); |
| + | |
| + | if (ENABLE_FEATURE_CLEAN_UP) close(dev); |
| + | |
| + | return EXIT_SUCCESS; |
| } | |