From a49e038bab7b3927b6a9c7d0c52f9e1a9cb82629 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Mon, 8 Apr 2013 22:49:59 -0400 Subject: optimize mbrtowc this simple change, in my measurements, makes about a 7% performance improvement. at first glance this change would seem like a compiler-specific hack, since the modified code is not even used. however, I suspect the reason is that I'm eliminating a second path into the main body of the code, allowing the compiler more flexibility to optimize the normal (hot) path into the main body. so even if it weren't for the measurable (and quite notable) difference in performance, I think the change makes sense. --- src/multibyte/mbrtowc.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'src/multibyte') diff --git a/src/multibyte/mbrtowc.c b/src/multibyte/mbrtowc.c index cc497810..ec323859 100644 --- a/src/multibyte/mbrtowc.c +++ b/src/multibyte/mbrtowc.c @@ -22,9 +22,8 @@ size_t mbrtowc(wchar_t *restrict wc, const char *restrict src, size_t n, mbstate c = *(unsigned *)st; if (!s) { - s = (void *)""; - wc = (void *)&wc; - n = 1; + if (c) goto ilseq; + return 0; } else if (!wc) wc = (void *)&wc; if (!n) return -2; -- cgit v1.2.1