function old new delta getopt32 1370 1385 +15 sulogin_main 490 494 +4 realpath_main 84 86 +2 sleep_main 76 77 +1 mt_main 256 257 +1 printenv_main 75 74 -1 fdformat_main 546 545 -1 usleep_main 44 42 -2 setlogcons_main 77 75 -2 ed_main 2654 2649 -5 deallocvt_main 69 64 -5 addgroup_main 373 368 -5 mkfs_minix_main 2989 2982 -7 tail_main 1221 1213 -8 sv_main 1254 1241 -13 du_main 348 328 -20 tftp_main 325 302 -23 split_main 581 558 -23 nc_main 1000 977 -23 diff_main 891 868 -23 arping_main 1797 1770 -27 ls_main 893 847 -46 od_main 2797 2750 -47 readprofile_main 1944 1895 -49 tcpudpsvd_main 1973 1922 -51 udhcpc_main 2590 2513 -77 grep_main 824 722 -102 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 5/22 up/down: 23/-560) Total: -537 bytes text data bss dec hex filename 796973 658 7428 805059 c48c3 busybox_old 796479 662 7420 804561 c46d1 busybox_unstripped
		
			
				
	
	
		
			141 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* vi: set sw=4 ts=4: */
 | 
						|
/*
 | 
						|
 * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
 | 
						|
 */
 | 
						|
 | 
						|
#include "libbb.h"
 | 
						|
#include <sys/mtio.h>
 | 
						|
 | 
						|
/* missing: eod/seod, stoptions, stwrthreshold, densities */
 | 
						|
static const short opcode_value[] = {
 | 
						|
	MTBSF,
 | 
						|
	MTBSFM,
 | 
						|
	MTBSR,
 | 
						|
	MTBSS,
 | 
						|
	MTCOMPRESSION,
 | 
						|
	MTEOM,
 | 
						|
	MTERASE,
 | 
						|
	MTFSF,
 | 
						|
	MTFSFM,
 | 
						|
	MTFSR,
 | 
						|
	MTFSS,
 | 
						|
	MTLOAD,
 | 
						|
	MTLOCK,
 | 
						|
	MTMKPART,
 | 
						|
	MTNOP,
 | 
						|
	MTOFFL,
 | 
						|
	MTOFFL,
 | 
						|
	MTRAS1,
 | 
						|
	MTRAS2,
 | 
						|
	MTRAS3,
 | 
						|
	MTRESET,
 | 
						|
	MTRETEN,
 | 
						|
	MTREW,
 | 
						|
	MTSEEK,
 | 
						|
	MTSETBLK,
 | 
						|
	MTSETDENSITY,
 | 
						|
	MTSETDRVBUFFER,
 | 
						|
	MTSETPART,
 | 
						|
	MTTELL,
 | 
						|
	MTWSM,
 | 
						|
	MTUNLOAD,
 | 
						|
	MTUNLOCK,
 | 
						|
	MTWEOF,
 | 
						|
	MTWEOF
 | 
						|
};
 | 
						|
 | 
						|
static const char opcode_name[] ALIGN1 =
 | 
						|
	"bsf"             "\0"
 | 
						|
	"bsfm"            "\0"
 | 
						|
	"bsr"             "\0"
 | 
						|
	"bss"             "\0"
 | 
						|
	"datacompression" "\0"
 | 
						|
	"eom"             "\0"
 | 
						|
	"erase"           "\0"
 | 
						|
	"fsf"             "\0"
 | 
						|
	"fsfm"            "\0"
 | 
						|
	"fsr"             "\0"
 | 
						|
	"fss"             "\0"
 | 
						|
	"load"            "\0"
 | 
						|
	"lock"            "\0"
 | 
						|
	"mkpart"          "\0"
 | 
						|
	"nop"             "\0"
 | 
						|
	"offline"         "\0"
 | 
						|
	"rewoffline"      "\0"
 | 
						|
	"ras1"            "\0"
 | 
						|
	"ras2"            "\0"
 | 
						|
	"ras3"            "\0"
 | 
						|
	"reset"           "\0"
 | 
						|
	"retension"       "\0"
 | 
						|
	"rewind"          "\0"
 | 
						|
	"seek"            "\0"
 | 
						|
	"setblk"          "\0"
 | 
						|
	"setdensity"      "\0"
 | 
						|
	"drvbuffer"       "\0"
 | 
						|
	"setpart"         "\0"
 | 
						|
	"tell"            "\0"
 | 
						|
	"wset"            "\0"
 | 
						|
	"unload"          "\0"
 | 
						|
	"unlock"          "\0"
 | 
						|
	"eof"             "\0"
 | 
						|
	"weof"            "\0";
 | 
						|
 | 
						|
int mt_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 | 
						|
int mt_main(int argc ATTRIBUTE_UNUSED, char **argv)
 | 
						|
{
 | 
						|
	const char *file = "/dev/tape";
 | 
						|
	struct mtop op;
 | 
						|
	struct mtpos position;
 | 
						|
	int fd, mode, idx;
 | 
						|
 | 
						|
	if (!argv[1]) {
 | 
						|
		bb_show_usage();
 | 
						|
	}
 | 
						|
 | 
						|
	if (strcmp(argv[1], "-f") == 0) {
 | 
						|
		if (!argv[2] || !argv[3])
 | 
						|
			bb_show_usage();
 | 
						|
		file = argv[2];
 | 
						|
		argv += 2;
 | 
						|
	}
 | 
						|
 | 
						|
	idx = index_in_strings(opcode_name, argv[1]);
 | 
						|
 | 
						|
	if (idx < 0)
 | 
						|
		bb_error_msg_and_die("unrecognized opcode %s", argv[1]);
 | 
						|
 | 
						|
	op.mt_op = opcode_value[idx];
 | 
						|
	if (argv[2])
 | 
						|
		op.mt_count = xatoi_u(argv[2]);
 | 
						|
	else
 | 
						|
		op.mt_count = 1;		/* One, not zero, right? */
 | 
						|
 | 
						|
	switch (opcode_value[idx]) {
 | 
						|
		case MTWEOF:
 | 
						|
		case MTERASE:
 | 
						|
		case MTWSM:
 | 
						|
		case MTSETDRVBUFFER:
 | 
						|
			mode = O_WRONLY;
 | 
						|
			break;
 | 
						|
 | 
						|
		default:
 | 
						|
			mode = O_RDONLY;
 | 
						|
			break;
 | 
						|
	}
 | 
						|
 | 
						|
	fd = xopen(file, mode);
 | 
						|
 | 
						|
	switch (opcode_value[idx]) {
 | 
						|
		case MTTELL:
 | 
						|
			ioctl_or_perror_and_die(fd, MTIOCPOS, &position, "%s", file);
 | 
						|
			printf("At block %d\n", (int) position.mt_blkno);
 | 
						|
			break;
 | 
						|
 | 
						|
		default:
 | 
						|
			ioctl_or_perror_and_die(fd, MTIOCTOP, &op, "%s", file);
 | 
						|
			break;
 | 
						|
	}
 | 
						|
 | 
						|
	return EXIT_SUCCESS;
 | 
						|
}
 |