Scrap writerune(), introducing fputrune()
Interface and function as proposed by cls. Code is also shorter, everything else analogous to fgetrune().
This commit is contained in:
parent
a5ae899a48
commit
7c578bf5b0
2
Makefile
2
Makefile
@ -24,7 +24,7 @@ LIBUTFSRC =\
|
|||||||
libutf/utf.c\
|
libutf/utf.c\
|
||||||
libutf/chartorunearr.c\
|
libutf/chartorunearr.c\
|
||||||
libutf/fgetrune.c\
|
libutf/fgetrune.c\
|
||||||
libutf/writerune.c\
|
libutf/fputrune.c\
|
||||||
libutf/isalnumrune.c\
|
libutf/isalnumrune.c\
|
||||||
libutf/isalpharune.c\
|
libutf/isalpharune.c\
|
||||||
libutf/isblankrune.c\
|
libutf/isblankrune.c\
|
||||||
|
2
expand.c
2
expand.c
@ -72,7 +72,7 @@ expand(const char *file, FILE *fp)
|
|||||||
col++;
|
col++;
|
||||||
if (r != ' ')
|
if (r != ' ')
|
||||||
bol = 0;
|
bol = 0;
|
||||||
writerune("<stdout>", stdout, &r);
|
efputrune(&r, stdout, "<stdout>");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
27
libutf/fputrune.c
Normal file
27
libutf/fputrune.c
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
/* See LICENSE file for copyright and license details. */
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "../utf.h"
|
||||||
|
|
||||||
|
int
|
||||||
|
fputrune(const Rune *r, FILE *fp)
|
||||||
|
{
|
||||||
|
char buf[UTFmax];
|
||||||
|
|
||||||
|
return fwrite(buf, runetochar(buf, r), 1, fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
efputrune(const Rune *r, FILE *fp, const char *file)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if ((ret = fputrune(r, fp)) < 0) {
|
||||||
|
fprintf(stderr, "fputrune %s: %s\n", file, strerror(errno));
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
@ -1,23 +0,0 @@
|
|||||||
/* See LICENSE file for copyright and license details. */
|
|
||||||
#include <errno.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#include "../utf.h"
|
|
||||||
|
|
||||||
void
|
|
||||||
writerune(const char *file, FILE *fp, Rune *r)
|
|
||||||
{
|
|
||||||
char buf[UTFmax];
|
|
||||||
int n;
|
|
||||||
|
|
||||||
if ((n = runetochar(buf, r)) > 0) {
|
|
||||||
fwrite(buf, n, 1, fp);
|
|
||||||
if (ferror(fp)) {
|
|
||||||
fprintf(stderr, "%s: write error: %s\n",
|
|
||||||
file, strerror(errno));
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
14
paste.c
14
paste.c
@ -26,17 +26,17 @@ sequential(struct fdescr *dsc, int fdescrlen, Rune *delim, size_t delimlen)
|
|||||||
while (efgetrune(&c, dsc[i].fp, dsc[i].name)) {
|
while (efgetrune(&c, dsc[i].fp, dsc[i].name)) {
|
||||||
if (last == '\n') {
|
if (last == '\n') {
|
||||||
if (delim[d] != '\0')
|
if (delim[d] != '\0')
|
||||||
writerune("<stdout>", stdout, &delim[d]);
|
efputrune(&delim[d], stdout, "<stdout>");
|
||||||
d = (d + 1) % delimlen;
|
d = (d + 1) % delimlen;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c != '\n')
|
if (c != '\n')
|
||||||
writerune("<stdout>", stdout, &c);
|
efputrune(&c, stdout, "<stdout>");
|
||||||
last = c;
|
last = c;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (last == '\n')
|
if (last == '\n')
|
||||||
writerune("<stdout>", stdout, &last);
|
efputrune(&last, stdout, "<stdout>");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,22 +56,22 @@ nextline:
|
|||||||
|
|
||||||
for (; efgetrune(&c, dsc[i].fp, dsc[i].name) ;) {
|
for (; efgetrune(&c, dsc[i].fp, dsc[i].name) ;) {
|
||||||
for (m = last + 1; m < i; m++)
|
for (m = last + 1; m < i; m++)
|
||||||
writerune("<stdout>", stdout, &(delim[m % delimlen]));
|
efputrune(&(delim[m % delimlen]), stdout, "<stdout>");
|
||||||
last = i;
|
last = i;
|
||||||
if (c == '\n') {
|
if (c == '\n') {
|
||||||
if (i != fdescrlen - 1)
|
if (i != fdescrlen - 1)
|
||||||
c = d;
|
c = d;
|
||||||
writerune("<stdout>", stdout, &c);
|
efputrune(&c, stdout, "<stdout>");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
writerune("<stdout>", stdout, &c);
|
efputrune(&c, stdout, "<stdout>");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c == 0 && last != -1) {
|
if (c == 0 && last != -1) {
|
||||||
if (i == fdescrlen - 1)
|
if (i == fdescrlen - 1)
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
else
|
else
|
||||||
writerune("<stdout>", stdout, &d);
|
efputrune(&d, stdout, "<stdout>");
|
||||||
last++;
|
last++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
2
tail.c
2
tail.c
@ -63,7 +63,7 @@ taketail(FILE *fp, const char *str)
|
|||||||
fputs(ring[j], stdout);
|
fputs(ring[j], stdout);
|
||||||
free(ring[j]);
|
free(ring[j]);
|
||||||
} else if (r) {
|
} else if (r) {
|
||||||
writerune("<stdout>", stdout, &r[j]);
|
efputrune(&r[j], stdout, "<stdout>");
|
||||||
}
|
}
|
||||||
} while ((j = (j + 1) % num) != i);
|
} while ((j = (j + 1) % num) != i);
|
||||||
|
|
||||||
|
2
tr.c
2
tr.c
@ -271,6 +271,6 @@ read:
|
|||||||
goto read;
|
goto read;
|
||||||
write:
|
write:
|
||||||
lastrune = r;
|
lastrune = r;
|
||||||
writerune("<stdout>", stdout, &r);
|
efputrune(&r, stdout, "<stdout>");
|
||||||
goto read;
|
goto read;
|
||||||
}
|
}
|
||||||
|
10
unexpand.c
10
unexpand.c
@ -44,10 +44,10 @@ unexpandspan(size_t last, size_t col)
|
|||||||
|
|
||||||
r = '\t';
|
r = '\t';
|
||||||
for (; last + tablist[i] <= col; last += tablist[i])
|
for (; last + tablist[i] <= col; last += tablist[i])
|
||||||
writerune("<stdout>", stdout, &r);
|
efputrune(&r, stdout, "<stdout>");
|
||||||
r = ' ';
|
r = ' ';
|
||||||
for (; last < col; last++)
|
for (; last < col; last++)
|
||||||
writerune("<stdout>", stdout, &r);
|
efputrune(&r, stdout, "<stdout>");
|
||||||
} else {
|
} else {
|
||||||
for (i = 0; i < tablistlen; i++)
|
for (i = 0; i < tablistlen; i++)
|
||||||
if (col < tablist[i])
|
if (col < tablist[i])
|
||||||
@ -57,12 +57,12 @@ unexpandspan(size_t last, size_t col)
|
|||||||
break;
|
break;
|
||||||
r = '\t';
|
r = '\t';
|
||||||
for (; j < i; j++) {
|
for (; j < i; j++) {
|
||||||
writerune("<stdout>", stdout, &r);
|
efputrune(&r, stdout, "<stdout>");
|
||||||
last = tablist[j];
|
last = tablist[j];
|
||||||
}
|
}
|
||||||
r = ' ';
|
r = ' ';
|
||||||
for (; last < col; last++)
|
for (; last < col; last++)
|
||||||
writerune("<stdout>", stdout, &r);
|
efputrune(&r, stdout, "<stdout>");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,7 +115,7 @@ unexpand(const char *file, FILE *fp)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if ((r != ' ' && r != '\t') || (!aflag && !bol))
|
if ((r != ' ' && r != '\t') || (!aflag && !bol))
|
||||||
writerune("<stdout>", stdout, &r);
|
efputrune(&r, stdout, "<stdout>");
|
||||||
}
|
}
|
||||||
if (last < col && (bol || aflag))
|
if (last < col && (bol || aflag))
|
||||||
unexpandspan(last, col);
|
unexpandspan(last, col);
|
||||||
|
4
utf.h
4
utf.h
@ -61,5 +61,7 @@ Rune toupperrune(Rune);
|
|||||||
|
|
||||||
int fgetrune(Rune *, FILE *);
|
int fgetrune(Rune *, FILE *);
|
||||||
int efgetrune(Rune *, FILE *, const char *);
|
int efgetrune(Rune *, FILE *, const char *);
|
||||||
void writerune(const char *, FILE *, Rune *);
|
int fputrune(const Rune *, FILE *);
|
||||||
|
int efputrune(const Rune *, FILE *, const char *);
|
||||||
|
|
||||||
int chartorunearr(const char*, Rune **);
|
int chartorunearr(const char*, Rune **);
|
||||||
|
Loading…
Reference in New Issue
Block a user