--- sbase-adding-tar-2.diff	2013-07-12 19:50:18.000000000 +0200
+++ sbase-adding-tar-3.diff	2013-07-12 20:36:39.000000000 +0200
@@ -113,13 +113,15 @@
 +main(int argc, char *argv[])
 +{
 +	char *file, *dir, *ap;
-+	int flg['y'] = {0};
++	char mode = '\0';
 +
 +	ARGBEGIN {
 +	case 'x':
 +	case 'c':
 +	case 't':
-+		flg[(unsigned)ARGC()] = 1;
++		if(mode)
++			usage();
++		mode = ARGC();
 +		break;
 +	case 'C':
 +		dir = EARGF(usage());
@@ -131,61 +133,56 @@
 +		usage();
 +	} ARGEND;
 +
-+	if(flg['x'] + flg['c'] + flg['t'] > 1)
-+		usage();
-+	if(flg['x'] + flg['c'] + flg['t'])
-+		goto Action;
-+
-+	if(argc < 1)
-+		usage();
++	if(!mode) {
++		if(argc < 1)
++			usage();
 +
-+	for(ap = argv[0]; *ap; ap++) {
-+		switch(*ap){
-+		case 'x':
-+		case 'c':
-+		case 't':
-+			flg[(unsigned)*ap] = 1;
-+			break;
-+		case 'f':
-+			if(argc < 2)
-+				usage();
-+			argc--, argv++;
-+			file = argv[0];
-+			break;
-+		case 'C':
-+			if(argc < 2)
++		for(ap = argv[0]; *ap; ap++) {
++			switch(*ap) {
++			case 'x':
++			case 'c':
++			case 't':
++				if(mode)
++					usage();
++				mode = *ap;
++				break;
++			case 'f':
++				if(argc < 2)
++					usage();
++				argc--, argv++;
++				file = argv[0];
++				break;
++			case 'C':
++				if(argc < 2)
++					usage();
++				argc--, argv++;
++				dir = argv[0];
++				break;
++			default:
 +				usage();
-+			argc--, argv++;
-+			dir = argv[0];
-+			break;
-+		default:
-+			usage();
++			}
 +		}
++		argc--, argv++;
 +	}
-+	argc--, argv++;
-+	if(flg['x']+ flg['c']+ flg['t'] != 1)
++
++	if(!mode || (argc != (mode == 'c')))
 +		usage();
 +
-+Action:
 +	if(file) {
-+		tarfile = fopen(file, flg['c'] ? "wb" : "rb");
++		tarfile = fopen(file, (mode == 'c') ? "wb" : "rb");
 +		if(!tarfile)
 +			eprintf("tar: open '%s':", file);
 +	} else {
-+		tarfile = flg['c'] ? stdout : stdin;
++		tarfile = (mode == 'c') ? stdout : stdin;
 +	}
 +
 +	if(dir)
 +		chdir(dir);
 +
-+	if(flg['c']){
-+		if(argc != 1)
-+			usage();
++	if(mode == 'c') {
 +		c(argv[0]);
-+	} else if (flg['x'] || flg['t']){
-+		if(argc != 0)
-+			usage();
-+		xt(flg['x'] ? unarchive : print);
++	} else {
++		xt(mode == 'x' ? unarchive : print);
 +	}
 +
 +	return 0;
