diff options
author | tjr <tjr@FreeBSD.org> | 2003-10-31 10:55:19 +0000 |
---|---|---|
committer | tjr <tjr@FreeBSD.org> | 2003-10-31 10:55:19 +0000 |
commit | 1ace50578bbafd1583677cd06569e31a4d096cc6 (patch) | |
tree | bda7f700cfffc732def355acd6b5a16f1f6cdad6 /lib/libc/locale/frune.c | |
parent | a724a8fc6f3b79fd666092452a4cfcb3a5a747dd (diff) | |
download | FreeBSD-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/frune.c')
-rw-r--r-- | lib/libc/locale/frune.c | 44 |
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); } |