svn commit: trunk/busybox/editors

vda at busybox.net vda at busybox.net
Fri Sep 22 09:02:31 UTC 2006


Author: vda
Date: 2006-09-22 02:02:30 -0700 (Fri, 22 Sep 2006)
New Revision: 16185

Log:
awk: getopt_ulflags'isation


Modified:
   trunk/busybox/editors/awk.c


Changeset:
Modified: trunk/busybox/editors/awk.c
===================================================================
--- trunk/busybox/editors/awk.c	2006-09-22 08:56:03 UTC (rev 16184)
+++ trunk/busybox/editors/awk.c	2006-09-22 09:02:30 UTC (rev 16185)
@@ -2605,6 +2605,8 @@
 
 int awk_main(int argc, char **argv)
 {
+	unsigned long opt;
+	char *opt_F, *opt_v, *opt_W;
 	char *s, *s1;
 	int i, j, c, flen;
 	var *v;
@@ -2660,49 +2662,37 @@
 		free(s);
 	}
 
-	while((c = getopt(argc, argv, "F:v:f:W:")) != EOF) {
-		switch (c) {
-			case 'F':
-				setvar_s(V[FS], optarg);
-				break;
-			case 'v':
-				if (! is_assignment(optarg))
-					bb_show_usage();
-				break;
-			case 'f':
-				from_file = TRUE;
-				F = afopen(programname = optarg, "r");
-				s = NULL;
-				/* one byte is reserved for some trick in next_token */
-				if (fseek(F, 0, SEEK_END) == 0) {
-					flen = ftell(F);
-					s = (char *)xmalloc(flen+4);
-					fseek(F, 0, SEEK_SET);
-					i = 1 + fread(s+1, 1, flen, F);
-				} else {
-					for (i=j=1; j>0; i+=j) {
-						s = (char *)xrealloc(s, i+4096);
-						j = fread(s+i, 1, 4094, F);
-					}
-				}
-				s[i] = '\0';
-				fclose(F);
-				parse_program(s+1);
-				free(s);
-				break;
-			case 'W':
-				bb_error_msg("Warning: unrecognized option '-W %s' ignored", optarg);
-				break;
-
-			default:
-				bb_show_usage();
+	opt = bb_getopt_ulflags(argc, argv, "F:v:f:W:", &opt_F, &opt_v, &programname, &opt_W);
+	if (opt & 0x1) setvar_s(V[FS], opt_F); // -F
+	if (opt & 0x2) if (!is_assignment(opt_v)) bb_show_usage(); // -v
+	if (opt & 0x4) { // -f
+		from_file = TRUE;
+		F = afopen(programname, "r");
+		s = NULL;
+		/* one byte is reserved for some trick in next_token */
+		if (fseek(F, 0, SEEK_END) == 0) {
+			flen = ftell(F);
+			s = (char *)xmalloc(flen+4);
+			fseek(F, 0, SEEK_SET);
+			i = 1 + fread(s+1, 1, flen, F);
+		} else {
+			for (i=j=1; j>0; i+=j) {
+				s = (char *)xrealloc(s, i+4096);
+				j = fread(s+i, 1, 4094, F);
+			}
 		}
+		s[i] = '\0';
+		fclose(F);
+		parse_program(s+1);
+		free(s);
 	}
+	if (opt & 0x8) // -W
+		bb_error_msg("Warning: unrecognized option '-W %s' ignored", opt_W);
 
 	if (!from_file) {
 		if (argc == optind)
 			bb_show_usage();
-		programname="cmd. line";
+		programname = "cmd. line";
 		parse_program(argv[optind++]);
 
 	}




More information about the busybox-cvs mailing list