mirror of
https://github.com/sheumann/hush.git
synced 2024-12-22 14:30:31 +00:00
Bernhard Fischer trimmed down dos2unix a bit.
This commit is contained in:
parent
078bacf1e9
commit
f815469a76
@ -35,28 +35,24 @@
|
|||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include "busybox.h"
|
#include "busybox.h"
|
||||||
|
|
||||||
#define CT_AUTO 0
|
|
||||||
#define CT_UNIX2DOS 1
|
#define CT_UNIX2DOS 1
|
||||||
#define CT_DOS2UNIX 2
|
#define CT_DOS2UNIX 2
|
||||||
|
|
||||||
/* We are making a lame pseudo-random string generator here. in
|
/* We are making a lame pseudo-random string generator here. in
|
||||||
* convert(), each pass through the while loop will add more and more
|
* 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
|
* 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 being accurate. We care about it being messy, since we use it
|
||||||
* it by the sizeof(letters) and then use that as an index into letters
|
|
||||||
* to pick a random letter to add to out temporary file. */
|
* to pick a random letter to add to out temporary file. */
|
||||||
typedef unsigned long int bb_uint64_t;
|
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)
|
static int convert(char *fn, int ConvType)
|
||||||
{
|
{
|
||||||
int c, fd;
|
int c, fd;
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
char tempFn[BUFSIZ];
|
RESERVE_CONFIG_BUFFER(tempFn, BUFSIZ);
|
||||||
static bb_uint64_t value=0;
|
static bb_uint64_t value=0;
|
||||||
FILE *in = stdin, *out = stdout;
|
FILE *in, *out;
|
||||||
|
|
||||||
if (fn != NULL) {
|
if (fn != NULL) {
|
||||||
in = bb_xfopen(fn, "rw");
|
in = bb_xfopen(fn, "rw");
|
||||||
@ -73,7 +69,9 @@ static int convert(char *fn, int ConvType)
|
|||||||
* the input file... */
|
* the input file... */
|
||||||
gettimeofday (&tv, NULL);
|
gettimeofday (&tv, NULL);
|
||||||
value += ((bb_uint64_t) tv.tv_usec << 16) ^ tv.tv_sec ^ getpid ();
|
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';
|
tempFn[c+1] = '\0';
|
||||||
value /= 62;
|
value /= 62;
|
||||||
|
|
||||||
@ -88,12 +86,16 @@ static int convert(char *fn, int ConvType)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
in = stdin;
|
||||||
|
out = stdout;
|
||||||
}
|
}
|
||||||
|
|
||||||
while ((c = fgetc(in)) != EOF) {
|
while ((c = fgetc(in)) != EOF) {
|
||||||
if (c == '\r') {
|
if (c == '\r') {
|
||||||
if ((ConvType == CT_UNIX2DOS) && (fn != NULL)) {
|
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);
|
remove(tempFn);
|
||||||
if (fclose(in) < 0 || fclose(out) < 0) {
|
if (fclose(in) < 0 || fclose(out) < 0) {
|
||||||
bb_perror_nomsg();
|
bb_perror_nomsg();
|
||||||
@ -101,13 +103,12 @@ static int convert(char *fn, int ConvType)
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (!ConvType)
|
|
||||||
ConvType = CT_DOS2UNIX;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (c == '\n') {
|
if (c == '\n') {
|
||||||
if ((ConvType == CT_DOS2UNIX) && (fn != NULL)) {
|
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);
|
remove(tempFn);
|
||||||
if ((fclose(in) < 0) || (fclose(out) < 0)) {
|
if ((fclose(in) < 0) || (fclose(out) < 0)) {
|
||||||
bb_perror_nomsg();
|
bb_perror_nomsg();
|
||||||
@ -115,27 +116,21 @@ static int convert(char *fn, int ConvType)
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (!ConvType) {
|
|
||||||
ConvType = CT_UNIX2DOS;
|
|
||||||
}
|
|
||||||
if (ConvType == CT_UNIX2DOS) {
|
if (ConvType == CT_UNIX2DOS) {
|
||||||
fputc('\r', out);
|
fputc('\r', out);
|
||||||
}
|
}
|
||||||
fputc('\n', out);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
fputc(c, out);
|
fputc(c, out);
|
||||||
}
|
}
|
||||||
if (c != EOF)
|
while (c != EOF && (c = fgetc(in)) != EOF) {
|
||||||
while ((c = fgetc(in)) != EOF) {
|
if (c == '\r')
|
||||||
if (c == '\r')
|
continue;
|
||||||
continue;
|
if (c == '\n') {
|
||||||
if (c == '\n') {
|
if (ConvType == CT_UNIX2DOS)
|
||||||
if (ConvType == CT_UNIX2DOS)
|
fputc('\r', out);
|
||||||
fputc('\r', out);
|
fputc('\n', out);
|
||||||
fputc('\n', out);
|
continue;
|
||||||
continue;
|
}
|
||||||
}
|
|
||||||
fputc(c, out);
|
fputc(c, out);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -160,30 +155,23 @@ static int convert(char *fn, int ConvType)
|
|||||||
|
|
||||||
int dos2unix_main(int argc, char *argv[])
|
int dos2unix_main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int ConvType = CT_AUTO;
|
int ConvType;
|
||||||
int o;
|
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') {
|
if (argv[0][0]=='d') {
|
||||||
ConvType = CT_DOS2UNIX;
|
ConvType = CT_DOS2UNIX;
|
||||||
}
|
} else {
|
||||||
if (argv[0][0]=='u') {
|
|
||||||
ConvType = CT_UNIX2DOS;
|
ConvType = CT_UNIX2DOS;
|
||||||
}
|
}
|
||||||
|
|
||||||
// process parameters
|
/* process parameters */
|
||||||
while ((o = getopt(argc, argv, "du")) != EOF) {
|
o = bb_getopt_ulflags(argc, argv, "ud");
|
||||||
switch (o) {
|
|
||||||
case 'd':
|
/* Do the conversion requested by an argument else do the default
|
||||||
ConvType = CT_UNIX2DOS;
|
* conversion depending on our name. */
|
||||||
break;
|
if (o)
|
||||||
case 'u':
|
ConvType = o;
|
||||||
ConvType = CT_DOS2UNIX;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
bb_show_usage();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (optind < argc) {
|
if (optind < argc) {
|
||||||
while(optind < argc)
|
while(optind < argc)
|
||||||
|
Loading…
Reference in New Issue
Block a user