Fixing whitespaces.

This commit is contained in:
Christoph Lohmann 2013-05-04 07:49:51 +02:00
parent c451683c3f
commit f648c7fa71
1 changed files with 34 additions and 33 deletions

67
paste.c
View File

@ -28,9 +28,9 @@ main(int argc, char **argv) {
size_t len; size_t len;
Fdescr *dsc; Fdescr *dsc;
int i, c; int i, c;
setlocale(LC_CTYPE, ""); setlocale(LC_CTYPE, "");
while((c = getopt(argc, argv, "sd:")) != -1) while((c = getopt(argc, argv, "sd:")) != -1)
switch(c) { switch(c) {
case 's': case 's':
@ -44,58 +44,58 @@ main(int argc, char **argv) {
eusage(); eusage();
break; break;
} }
argc -= optind; argc -= optind;
argv += optind; argv += optind;
if(argc == 0) if(argc == 0)
eusage(); eusage();
/* populate delimeters */ /* populate delimeters */
if(!adelim) if(!adelim)
adelim = "\t"; adelim = "\t";
len = mbstowcs(NULL, adelim, 0); len = mbstowcs(NULL, adelim, 0);
if(len == (size_t)-1) if(len == (size_t)-1)
eprintf("invalid delimiter\n"); eprintf("invalid delimiter\n");
delim = malloc((len + 1) * sizeof(*delim)); delim = malloc((len + 1) * sizeof(*delim));
if(!delim) if(!delim)
eprintf("out of memory\n"); eprintf("out of memory\n");
mbstowcs(delim, adelim, len); mbstowcs(delim, adelim, len);
len = unescape(delim); len = unescape(delim);
if(len == 0) if(len == 0)
eprintf("no delimiters specified\n"); eprintf("no delimiters specified\n");
/* populate file list */ /* populate file list */
dsc = malloc(argc * sizeof(*dsc)); dsc = malloc(argc * sizeof(*dsc));
if(!dsc) if(!dsc)
eprintf("out of memory\n"); eprintf("out of memory\n");
for(i = 0; i < argc; i++) { for(i = 0; i < argc; i++) {
const char *name = argv[i]; const char *name = argv[i];
if(strcmp(name, "-") == 0) if(strcmp(name, "-") == 0)
dsc[i].fp = stdin; dsc[i].fp = stdin;
else else
dsc[i].fp = fopen(name, "r"); dsc[i].fp = fopen(name, "r");
if(!dsc[i].fp) if(!dsc[i].fp)
eprintf("can't open '%s':", name); eprintf("can't open '%s':", name);
dsc[i].name = name; dsc[i].name = name;
} }
if(seq) if(seq)
sequential(dsc, argc, delim, len); sequential(dsc, argc, delim, len);
else else
parallel(dsc, argc, delim, len); parallel(dsc, argc, delim, len);
for(i = 0; i < argc; i++) { for(i = 0; i < argc; i++) {
if(dsc[i].fp != stdin) if(dsc[i].fp != stdin)
(void)fclose(dsc[i].fp); (void)fclose(dsc[i].fp);
} }
free(delim); free(delim);
free(dsc); free(dsc);
return 0; return 0;
@ -111,7 +111,7 @@ unescape(wchar_t *delim) {
wchar_t c; wchar_t c;
size_t i; size_t i;
size_t len; size_t len;
for(i = 0, len = 0; (c = delim[i++]) != '\0'; len++) { for(i = 0, len = 0; (c = delim[i++]) != '\0'; len++) {
if(c == '\\') { if(c == '\\') {
switch(delim[i++]) { switch(delim[i++]) {
@ -135,17 +135,17 @@ unescape(wchar_t *delim) {
} else } else
delim[len] = c; delim[len] = c;
} }
return len; return len;
} }
static wint_t static wint_t
in(Fdescr *f) { in(Fdescr *f) {
wint_t c = fgetwc(f->fp); wint_t c = fgetwc(f->fp);
if(c == WEOF && ferror(f->fp)) if(c == WEOF && ferror(f->fp))
eprintf("'%s' read error:", f->name); eprintf("'%s' read error:", f->name);
return c; return c;
} }
@ -159,26 +159,26 @@ out(wchar_t c) {
static void static void
sequential(Fdescr *dsc, int len, const wchar_t *delim, size_t cnt) { sequential(Fdescr *dsc, int len, const wchar_t *delim, size_t cnt) {
int i; int i;
for(i = 0; i < len; i++) { for(i = 0; i < len; i++) {
size_t d = 0; size_t d = 0;
wint_t c, last = WEOF; wint_t c, last = WEOF;
while((c = in(&dsc[i])) != WEOF) { while((c = in(&dsc[i])) != WEOF) {
if(last == '\n') { if(last == '\n') {
if(delim[d] != '\0') if(delim[d] != '\0')
out(delim[d]); out(delim[d]);
d++; d++;
d %= cnt; d %= cnt;
} }
if(c != '\n') if(c != '\n')
out((wchar_t)c); out((wchar_t)c);
last = c; last = c;
} }
if(last == '\n') if(last == '\n')
out((wchar_t)last); out((wchar_t)last);
} }
@ -187,45 +187,46 @@ sequential(Fdescr *dsc, int len, const wchar_t *delim, size_t cnt) {
static void static void
parallel(Fdescr *dsc, int len, const wchar_t *delim, size_t cnt) { parallel(Fdescr *dsc, int len, const wchar_t *delim, size_t cnt) {
int last; int last;
do { do {
int i; int i;
last = 0; last = 0;
for(i = 0; i < len; i++) { for(i = 0; i < len; i++) {
wint_t c; wint_t c;
wchar_t d = delim[i % cnt]; wchar_t d = delim[i % cnt];
do { do {
wint_t o = in(&dsc[i]); wint_t o = in(&dsc[i]);
c = o; c = o;
switch(c) { switch(c) {
case WEOF: case WEOF:
if(last == 0) if(last == 0)
break; break;
o = '\n'; o = '\n';
/* fallthrough */ /* fallthrough */
case '\n': case '\n':
if(i != len - 1) if(i != len - 1)
o = d; o = d;
break; break;
default: default:
break; break;
} }
if(o != WEOF) { if(o != WEOF) {
/* pad with delimiters up to this point */ /* pad with delimiters up to this point */
while(++last < i) { while(++last < i) {
if(d != '\0') if(d != '\0')
out(d); out(d);
} }
out((wchar_t)o); out((wchar_t)o);
} }
} while(c != '\n' && c != WEOF); } while(c != '\n' && c != WEOF);
} }
} while(last > 0); } while(last > 0);
} }