fgetrune.c - sbase - suckless unix tools
(HTM) git clone git://git.suckless.org/sbase
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
fgetrune.c (576B)
---
1 /* See LICENSE file for copyright and license details. */
2 #include <errno.h>
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <string.h>
6
7 #include "../utf.h"
8
9 int
10 fgetrune(Rune *r, FILE *fp)
11 {
12 char buf[UTFmax];
13 int i = 0, c;
14
15 while (i < UTFmax && (c = fgetc(fp)) != EOF) {
16 buf[i++] = c;
17 if (charntorune(r, buf, i) > 0)
18 break;
19 }
20 if (ferror(fp))
21 return -1;
22
23 return i;
24 }
25
26 int
27 efgetrune(Rune *r, FILE *fp, const char *file)
28 {
29 int ret;
30
31 if ((ret = fgetrune(r, fp)) < 0) {
32 fprintf(stderr, "fgetrune %s: %s\n", file, strerror(errno));
33 exit(1);
34 }
35 return ret;
36 }