mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-08-29 19:26:33 +00:00
fix most of ReactOS to build with -Wall -Werror by default svn path=/trunk/; revision=6645
137 lines
2.3 KiB
C
Executable File
137 lines
2.3 KiB
C
Executable File
/*
|
|
* Copy a text file with end-of-line character transformation (EOL)
|
|
*
|
|
* Usage: rline input-file output-file
|
|
*/
|
|
#include <sys/stat.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
|
|
char* convert_path(char* origpath)
|
|
{
|
|
char* newpath;
|
|
int i;
|
|
|
|
newpath = strdup(origpath);
|
|
|
|
i = 0;
|
|
while (newpath[i] != 0)
|
|
{
|
|
#ifdef UNIX_PATHS
|
|
if (newpath[i] == '\\')
|
|
{
|
|
newpath[i] = '/';
|
|
}
|
|
#else
|
|
#ifdef DOS_PATHS
|
|
if (newpath[i] == '/')
|
|
{
|
|
newpath[i] = '\\';
|
|
}
|
|
#endif
|
|
#endif
|
|
i++;
|
|
}
|
|
return(newpath);
|
|
}
|
|
|
|
int
|
|
fsize (FILE * f)
|
|
{
|
|
struct stat st;
|
|
int fh = fileno (f);
|
|
|
|
if (fh < 0 || fstat (fh, &st) < 0)
|
|
return -1;
|
|
return (int) st.st_size;
|
|
}
|
|
|
|
int main(int argc, char* argv[])
|
|
{
|
|
char* path1;
|
|
char* path2;
|
|
FILE* in;
|
|
FILE* out;
|
|
char* in_buf;
|
|
int in_size;
|
|
int in_ptr;
|
|
int linelen;
|
|
int n_in;
|
|
int n_out;
|
|
char eol_buf[2];
|
|
|
|
/* Terminate the line with windows EOL characters (CRLF) */
|
|
eol_buf[0] = '\r';
|
|
eol_buf[1] = '\n';
|
|
|
|
if (argc != 3)
|
|
{
|
|
fprintf(stderr, "Wrong argument count\n");
|
|
exit(1);
|
|
}
|
|
|
|
path1 = convert_path(argv[1]);
|
|
path2 = convert_path(argv[2]);
|
|
|
|
in = fopen(path1, "rb");
|
|
if (in == NULL)
|
|
{
|
|
perror("Cannot open input file");
|
|
exit(1);
|
|
}
|
|
|
|
in_size = fsize(in);
|
|
in_buf = malloc(in_size);
|
|
if (in_buf == NULL)
|
|
{
|
|
perror("Not enough free memory");
|
|
fclose(in);
|
|
exit(1);
|
|
}
|
|
|
|
out = fopen(path2, "wb");
|
|
if (out == NULL)
|
|
{
|
|
perror("Cannot open output file");
|
|
fclose(in);
|
|
exit(1);
|
|
}
|
|
|
|
/* Read it all in */
|
|
n_in = fread(in_buf, 1, in_size, in);
|
|
|
|
in_ptr = 0;
|
|
while (in_ptr < in_size)
|
|
{
|
|
linelen = 0;
|
|
|
|
while ((in_ptr + linelen < in_size) && (in_buf[in_ptr + linelen] != '\r') && (in_buf[in_ptr + linelen] != '\n'))
|
|
{
|
|
linelen++;
|
|
}
|
|
if (linelen > 0)
|
|
{
|
|
n_out = fwrite(&in_buf[in_ptr], 1, linelen, out);
|
|
in_ptr += linelen;
|
|
}
|
|
/* Terminate the line */
|
|
n_out = fwrite(&eol_buf[0], 1, sizeof(eol_buf), out);
|
|
|
|
if ((in_ptr < in_size) && (in_buf[in_ptr] == '\r'))
|
|
{
|
|
in_ptr++;
|
|
}
|
|
|
|
if ((in_ptr < in_size) && (in_buf[in_ptr] == '\n'))
|
|
{
|
|
in_ptr++;
|
|
}
|
|
}
|
|
|
|
free(in_buf);
|
|
fclose(in);
|
|
|
|
exit(0);
|
|
}
|