svn commit: trunk/busybox/coreutils

landley at busybox.net landley at busybox.net
Thu Sep 1 03:11:28 UTC 2005


Author: landley
Date: 2005-08-31 20:11:19 -0700 (Wed, 31 Aug 2005)
New Revision: 11308

Log:
Bernhard Fischer trimmed down dos2unix a bit.


Modified:
   trunk/busybox/coreutils/dos2unix.c


Changeset:
Modified: trunk/busybox/coreutils/dos2unix.c
===================================================================
--- trunk/busybox/coreutils/dos2unix.c	2005-09-01 03:02:23 UTC (rev 11307)
+++ trunk/busybox/coreutils/dos2unix.c	2005-09-01 03:11:19 UTC (rev 11308)
@@ -35,28 +35,24 @@
 #include <sys/time.h>
 #include "busybox.h"
 
-#define CT_AUTO         0
 #define CT_UNIX2DOS     1
 #define CT_DOS2UNIX     2
 
 /* We are making a lame pseudo-random string generator here.  in
  * convert(), each pass through the while loop will add more and more
  * stuff into value, which is _supposed_ to wrap.  We don't care about
- * it being accurate.  We care about it being messy, since we then mod
- * it by the sizeof(letters) and then use that as an index into letters
+ * it being accurate.  We care about it being messy, since we use it
  * to pick a random letter to add to out temporary file. */
 typedef unsigned long int bb_uint64_t;
 
-static const char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
-
-// if fn is NULL then input is stdin and output is stdout
+/* if fn is NULL then input is stdin and output is stdout */
 static int convert(char *fn, int ConvType)
 {
 	int c, fd;
 	struct timeval tv;
-	char tempFn[BUFSIZ];
+	RESERVE_CONFIG_BUFFER(tempFn, BUFSIZ);
 	static bb_uint64_t value=0;
-	FILE *in = stdin, *out = stdout;
+	FILE *in, *out;
 
 	if (fn != NULL) {
 		in = bb_xfopen(fn, "rw");
@@ -73,7 +69,9 @@
 		     * the input file... */
 		    gettimeofday (&tv, NULL);
 		    value += ((bb_uint64_t) tv.tv_usec << 16) ^ tv.tv_sec ^ getpid ();
-		    tempFn[++c] = letters[value % 62];
+		    tempFn[++c] = ((value%62) < 26)?(value%62)+97:
+				   ((value%62) < 52)?(value%62)+39:
+				    (value%62)-4;
 		    tempFn[c+1] = '\0';
 		    value /= 62;
 
@@ -88,12 +86,16 @@
 		    }
 		    break;
 		}
+	} else {
+		in = stdin;
+		out = stdout;
 	}
 
 	while ((c = fgetc(in)) != EOF) {
 		if (c == '\r') {
 			if ((ConvType == CT_UNIX2DOS) && (fn != NULL)) {
-				// file is alredy in DOS format so it is not necessery to touch it
+				/* file is already in DOS format so it is
+				 * not necessary to touch it.  */
 				remove(tempFn);
 				if (fclose(in) < 0 || fclose(out) < 0) {
 					bb_perror_nomsg();
@@ -101,13 +103,12 @@
 				}
 				return 0;
 			}
-			if (!ConvType)
-				ConvType = CT_DOS2UNIX;
 			break;
 		}
 		if (c == '\n') {
 			if ((ConvType == CT_DOS2UNIX) && (fn != NULL)) {
-				// file is alredy in UNIX format so it is not necessery to touch it
+				/* file is already in DOS format so it is
+				 * not necessary to touch it.  */
 				remove(tempFn);
 				if ((fclose(in) < 0) || (fclose(out) < 0)) {
 					bb_perror_nomsg();
@@ -115,27 +116,21 @@
 				}
 				return 0;
 			}
-			if (!ConvType) {
-				ConvType = CT_UNIX2DOS;
-			}
 			if (ConvType == CT_UNIX2DOS) {
 				fputc('\r', out);
 			}
-			fputc('\n', out);
-			break;
 		}
 		fputc(c, out);
 	}
-	if (c != EOF)
-		while ((c = fgetc(in)) != EOF) {
-			if (c == '\r')
-				continue;
-			if (c == '\n') {
-				if (ConvType == CT_UNIX2DOS)
-					fputc('\r', out);
-				fputc('\n', out);
-				continue;
-			}
+	while (c != EOF && (c = fgetc(in)) != EOF) {
+		if (c == '\r')
+			continue;
+		if (c == '\n') {
+			if (ConvType == CT_UNIX2DOS)
+				fputc('\r', out);
+			fputc('\n', out);
+			continue;
+		}
 		fputc(c, out);
 	}
 
@@ -160,31 +155,24 @@
 
 int dos2unix_main(int argc, char *argv[])
 {
-	int ConvType = CT_AUTO;
+	int ConvType;
 	int o;
 
-	//See if we are supposed to be doing dos2unix or unix2dos
+	/* See if we are supposed to be doing dos2unix or unix2dos */
 	if (argv[0][0]=='d') {
 	    ConvType = CT_DOS2UNIX;
-	}
-	if (argv[0][0]=='u') {
+	} else {
 	    ConvType = CT_UNIX2DOS;
 	}
 
-	// process parameters
-	while ((o = getopt(argc, argv, "du")) != EOF) {
-		switch (o) {
-		case 'd':
-			ConvType = CT_UNIX2DOS;
-			break;
-		case 'u':
-			ConvType = CT_DOS2UNIX;
-			break;
-		default:
-			bb_show_usage();
-		}
-	}
+	/* process parameters */
+	o = bb_getopt_ulflags(argc, argv, "ud");
 
+	/* Do the conversion requested by an argument else do the default
+	 * conversion depending on our name.  */
+	if (o)
+		ConvType = o;
+
 	if (optind < argc) {
 		while(optind < argc)
 			if ((o = convert(argv[optind++], ConvType)) < 0)



More information about the busybox-cvs mailing list