summaryrefslogtreecommitdiffstats
path: root/lib/libc/locale
diff options
context:
space:
mode:
authortjr <tjr@FreeBSD.org>2003-10-31 10:55:19 +0000
committertjr <tjr@FreeBSD.org>2003-10-31 10:55:19 +0000
commit1ace50578bbafd1583677cd06569e31a4d096cc6 (patch)
treebda7f700cfffc732def355acd6b5a16f1f6cdad6 /lib/libc/locale
parenta724a8fc6f3b79fd666092452a4cfcb3a5a747dd (diff)
downloadFreeBSD-src-1ace50578bbafd1583677cd06569e31a4d096cc6.zip
FreeBSD-src-1ace50578bbafd1583677cd06569e31a4d096cc6.tar.gz
Implement fgetrune(), fungetrune() and fputrune() as wrappers around
fgetwc(), ungetwc() and fputwc().
Diffstat (limited to 'lib/libc/locale')
-rw-r--r--lib/libc/locale/frune.c44
1 files changed, 8 insertions, 36 deletions
diff --git a/lib/libc/locale/frune.c b/lib/libc/locale/frune.c
index 634ab5f..996bf120 100644
--- a/lib/libc/locale/frune.c
+++ b/lib/libc/locale/frune.c
@@ -1,4 +1,5 @@
/*-
+ * Copyright (c) 2003 Tim J. Robbins. All rights reserved.
* Copyright (c) 1993
* The Regents of the University of California. All rights reserved.
*
@@ -47,33 +48,18 @@ __FBSDID("$FreeBSD$");
#include <rune.h>
#include <stddef.h>
#include <stdio.h>
+#include <wchar.h>
__warn_references(fgetrune, "warning: fgetrune() is deprecated. See fgetrune(3).");
long
fgetrune(fp)
FILE *fp;
{
- rune_t r;
- int c, len;
- char buf[MB_LEN_MAX];
- char const *result;
+ wint_t ch;
- len = 0;
- do {
- if ((c = getc(fp)) == EOF) {
- if (len)
- break;
- return (EOF);
- }
- buf[len++] = c;
-
- if ((r = sgetrune(buf, len, &result)) != _INVALID_RUNE)
- return (r);
- } while (result == buf && len < MB_LEN_MAX);
-
- while (--len > 0)
- ungetc(buf[len], fp);
- return (_INVALID_RUNE);
+ if ((ch = fgetwc(fp)) == WEOF)
+ return (feof(fp) ? EOF : _INVALID_RUNE);
+ return ((long)ch);
}
__warn_references(fungetrune, "warning: fungetrune() is deprecated. See fungetrune(3).");
@@ -82,14 +68,8 @@ fungetrune(r, fp)
rune_t r;
FILE* fp;
{
- int len;
- char buf[MB_LEN_MAX];
- len = sputrune(r, buf, MB_LEN_MAX, 0);
- while (len-- > 0)
- if (ungetc(buf[len], fp) == EOF)
- return (EOF);
- return (0);
+ return (ungetwc((wint_t)r, fp) == WEOF ? EOF : 0);
}
__warn_references(fputrune, "warning: fputrune() is deprecated. See fputrune(3).");
@@ -98,14 +78,6 @@ fputrune(r, fp)
rune_t r;
FILE *fp;
{
- int i, len;
- char buf[MB_LEN_MAX];
-
- len = sputrune(r, buf, MB_LEN_MAX, 0);
-
- for (i = 0; i < len; ++i)
- if (putc(buf[i], fp) == EOF)
- return (EOF);
- return (0);
+ return (fputwc((wchar_t)r, fp) == WEOF ? EOF : 0);
}
OpenPOWER on IntegriCloud