* See the COPYING file for license information.
*/
-#include <stdio.h>
-#include <stdlib.h>
#include <string.h>
-#include <errno.h>
#include <getopt.h>
#include "busybox.h"
-#define CT_AUTO 0
-#define CT_UNIX2DOS 1
-#define CT_DOS2UNIX 2
-
-int convert(char *fn, int ConvType);
-
-int dos2unix_main(int argc, char *argv[]) {
- int ConvType = CT_AUTO;
- int o;
-
- // process parameters
- while ((o = getopt(argc, argv, "du")) != EOF) {
- switch (o) {
- case 'd':
- ConvType = CT_UNIX2DOS;
- break;
- case 'u':
- ConvType = CT_DOS2UNIX;
- break;
- default:
- show_usage();
- }
- }
-
- if (optind < argc) {
- while(optind < argc)
- if ((o = convert(argv[optind++], ConvType)) < 0)
- break;
- }
- else
- o = convert(NULL, ConvType);
-
- return o;
-}
-
// if fn is NULL then input is stdin and output is stdout
-int convert(char *fn, int ConvType) {
+static int convert(char *fn, int ConvType) {
char c;
char *tempFn = NULL;
FILE *in = stdin, *out = stdout;
if (fn != NULL) {
- if ((in = fopen(fn, "r")) == NULL) {
- perror_msg(fn);
+ if ((in = wfopen(fn, "r")) == NULL) {
return -1;
}
- tempFn = tmpnam(NULL);
- if (tempFn == NULL || (out = fopen(tempFn, "w")) == NULL) {
+ if ((out = tmpfile()) == NULL) {
perror_msg(NULL);
return -2;
}
if (c == '\r') {
if ((ConvType == CT_UNIX2DOS) && (fn != NULL)) {
// file is alredy in DOS format so it is not necessery to touch it
- if (fclose(in) < 0 || fclose(out) < 0 || remove(tempFn) < 0) {
+ if (fclose(in) < 0 || fclose(out) < 0) {
perror_msg(NULL);
return -2;
}
if (c == '\n') {
if ((ConvType == CT_DOS2UNIX) && (fn != NULL)) {
// file is alredy in UNIX format so it is not necessery to touch it
- if (fclose(in) < 0 || fclose(out) < 0 || remove(tempFn) < 0) {
+ if ((fclose(in) < 0) || (fclose(out) < 0)) {
perror_msg(NULL);
return -2;
}
return 0;
}
- if (!ConvType)
+ if (!ConvType) {
ConvType = CT_UNIX2DOS;
- if (ConvType == CT_UNIX2DOS)
+ }
+ if (ConvType == CT_UNIX2DOS) {
fputc('\r', out);
+ }
fputc('\n', out);
break;
}
if (fn != NULL) {
if (fclose(in) < 0 || fclose(out) < 0 ||
(in = fopen(tempFn, "r")) == NULL || (out = fopen(fn, "w")) == NULL) {
- perror_msg(NULL);
- return -2;
+ perror_msg(NULL);
+ return -2;
}
- while ((c = fgetc(in)) != EOF)
- fputc(c, out);
+ while ((c = fgetc(in)) != EOF) {
+ fputc(c, out);
+ }
- if (fclose(in) < 0 || fclose(out) < 0 || remove(tempFn) < 0) {
- perror_msg(NULL);
- return -2;
+ if ((fclose(in) < 0) || (fclose(out) < 0)) {
+ perror_msg(NULL);
+ return -2;
}
}
return 0;
}
+
+int dos2unix_main(int argc, char *argv[]) {
+ int ConvType = CT_AUTO;
+ int o;
+
+ // process parameters
+ while ((o = getopt(argc, argv, "du")) != EOF) {
+ switch (o) {
+ case 'd':
+ ConvType = CT_UNIX2DOS;
+ break;
+ case 'u':
+ ConvType = CT_DOS2UNIX;
+ break;
+ default:
+ show_usage();
+ }
+ }
+
+ if (optind < argc) {
+ while(optind < argc)
+ if ((o = convert(argv[optind++], ConvType)) < 0)
+ break;
+ }
+ else
+ o = convert(NULL, ConvType);
+
+ return o;
+}
+