/* fromdos.c : strip the stupid ^M characters without mistakes! */ /* this can do in-place conversion or be used as a pipe... */ #include #include #include #include int main(int argc, char** argv) { int f,c; if (argc <= 1) { if (isatty(0)) { fprintf(stderr,"usage : %s \nStrips ^M characters.\nCan do in-place conversion of many files or can be used in a pipe\n",argv[0]); return 1; } for (;;) { c = getchar(); while (c == '\r') { c = getchar(); if (c != '\n') putchar(c); } if (c < 0) break; putchar(c); } return 0; } for (f = 1; f < argc; f++) { char* fname = argv[f]; char tempname[1024]; FILE* in = fopen(fname,"rb"); FILE* out; int mod = 0; if (!in) { fprintf(stderr,"%s : %s\n", fname, strerror(errno)); return 1; } strcpy(tempname, fname); strcat(tempname, ".temp"); out = fopen(tempname, "wb"); if (!out) { fprintf(stderr,"%s : %s\n", fname, strerror(errno)); return 1; } for (;;) { c = getc(in); while (c == '\r') { c = getc(in); if (c == '\n') mod=1; else putc(c,out); } if (c < 0) break; putc(c,out); } fclose(in); fclose(out); if (!mod) { fprintf(stderr,"%s : no change\n", fname); unlink(tempname); } else if (rename(tempname, fname)) { fprintf(stderr,"Can't mv %s %s : %s\n",tempname,fname,strerror(errno)); return 1; } } return 0; }