]> git.saurik.com Git - apple/libc.git/blobdiff - locale/FreeBSD/wcstof.c
Libc-763.11.tar.gz
[apple/libc.git] / locale / FreeBSD / wcstof.c
index 19836cbd4c97685a3460f5f9046e046f5ddc687d..a68b382d989c21395d7b202ba781f6b49aaf2a8e 100644 (file)
@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/locale/wcstof.c,v 1.1 2003/03/13 06:29:53 tjr Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/locale/wcstof.c,v 1.3 2004/04/07 09:47:56 tjr Exp $");
 
 #include <stdlib.h>
 #include <wchar.h>
@@ -38,45 +38,31 @@ float
 wcstof(const wchar_t * __restrict nptr, wchar_t ** __restrict endptr)
 {
        static const mbstate_t initial;
-       mbstate_t state;
+       mbstate_t mbs;
        float val;
-       char *buf, *end, *p;
+       char *buf, *end;
        const wchar_t *wcp;
-       size_t clen, len;
+       size_t len;
 
        while (iswspace(*nptr))
                nptr++;
 
-       state = initial;
        wcp = nptr;
-       if ((len = wcsrtombs(NULL, &wcp, 0, &state)) == (size_t)-1) {
+       mbs = initial;
+       if ((len = wcsrtombs(NULL, &wcp, 0, &mbs)) == (size_t)-1) {
                if (endptr != NULL)
                        *endptr = (wchar_t *)nptr;
                return (0.0);
        }
        if ((buf = malloc(len + 1)) == NULL)
                return (0.0);
-       state = initial;
-       wcsrtombs(buf, &wcp, len + 1, &state);
+       mbs = initial;
+       wcsrtombs(buf, &wcp, len + 1, &mbs);
 
        val = strtof(buf, &end);
 
-       if (endptr != NULL) {
-#if 1                                  /* Fast, assume 1:1 WC:MBS mapping. */
+       if (endptr != NULL)
                *endptr = (wchar_t *)nptr + (end - buf);
-               (void)clen;
-               (void)p;
-#else                                  /* Slow, conservative approach. */
-               state = initial;
-               *endptr = (wchar_t *)nptr;
-               p = buf;
-               while (p < end &&
-                   (clen = mbrlen(p, end - p, &state)) > 0) {
-                       p += clen;
-                       (*endptr)++;
-               }
-#endif
-       }
 
        free(buf);