This file had been imported from musl as part of the commit 
79d5ad7d6f7bbcc20edf2ce2bbf3cc08f04b08dd.
It looks like it got slightly modified to possibly silence the compiler (see 
the diff below).

```
diff musl/src/locale/strfmon.c libc/locale/strfmon.c
12c12
<       int fill, nogrp, negpar, nosym, left, intl;
---
>       int left;
25,28d24
<               fill = ' ';
<               nogrp = 0;
<               negpar = 0;
<               nosym = 0;
33d28
<                               fill = *++fmt;
36d30
<                               nogrp = 1;
39d32
<                               negpar = 1;
43d35
<                               nosym = 1;
61,62d52
<               intl = *fmt++ == 'i';
<
```

More specifically if one looks at the musl code,
the variables fill, nogrp, negpar, nosym and intl are set but never 
referenced/used.
As a matter of fact dropping the statements 'fill = *++fmt;' and 'intl = *fmt++ 
== 'i';'
affects fmt variable and possibly has a bug.

TODO: Add a test.

Signed-off-by: Waldemar Kozaczuk <jwkozac...@gmail.com>
---
 Makefile              |  2 +-
 libc/locale/strfmon.c | 91 -------------------------------------------
 2 files changed, 1 insertion(+), 92 deletions(-)
 delete mode 100644 libc/locale/strfmon.c

diff --git a/Makefile b/Makefile
index 0abbd196..168a6bdd 100644
--- a/Makefile
+++ b/Makefile
@@ -1046,7 +1046,7 @@ musl += locale/strcasecmp_l.o
 libc += locale/strcoll.o
 libc += locale/strcoll_l.o
 musl += locale/strerror_l.o
-libc += locale/strfmon.o
+musl += locale/strfmon.o
 libc += locale/strftime_l.o
 musl += locale/strncasecmp_l.o
 libc += locale/strtod_l.o
diff --git a/libc/locale/strfmon.c b/libc/locale/strfmon.c
deleted file mode 100644
index 14623fa7..00000000
--- a/libc/locale/strfmon.c
+++ /dev/null
@@ -1,91 +0,0 @@
-#include <stdio.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include <monetary.h>
-#include <errno.h>
-#include <stdarg.h>
-
-static ssize_t vstrfmon_l(char *s, size_t n, locale_t loc, const char *fmt, 
va_list ap)
-{
-       size_t l;
-       double x;
-       int left;
-       int lp, rp, w, fw;
-       char *s0=s;
-       for (; n && *fmt; ) {
-               if (*fmt != '%') {
-               literal:
-                       *s++ = *fmt++;
-                       n--;
-                       continue;
-               }
-               fmt++;
-               if (*fmt == '%') goto literal;
-
-               left = 0;
-               for (; ; fmt++) {
-                       switch (*fmt) {
-                       case '=':
-                               continue;
-                       case '^':
-                               continue;
-                       case '(':
-                       case '+':
-                               continue;
-                       case '!':
-                               continue;
-                       case '-':
-                               left = 1;
-                               continue;
-                       }
-                       break;
-               }
-
-               for (fw=0; isdigit(*fmt); fmt++)
-                       fw = 10*fw + (*fmt-'0');
-               lp = 0;
-               rp = 2;
-               if (*fmt=='#') for (lp=0, fmt++; isdigit(*fmt); fmt++)
-                       lp = 10*lp + (*fmt-'0');
-               if (*fmt=='.') for (rp=0, fmt++; isdigit(*fmt); fmt++)
-                       rp = 10*rp + (*fmt-'0');
-
-               w = lp + 1 + rp;
-               if (!left && fw>w) w = fw;
-
-               x = va_arg(ap, double);
-               l = snprintf(s, n, "%*.*f", w, rp, x);
-               if (l >= n) {
-                       errno = E2BIG;
-                       return -1;
-               }
-               s += l;
-               n -= l;
-       }
-       return s-s0;
-}
-
-ssize_t strfmon_l(char *restrict s, size_t n, locale_t loc, const char 
*restrict fmt, ...)
-{
-       va_list ap;
-       ssize_t ret;
-
-       va_start(ap, fmt);
-       ret = vstrfmon_l(s, n, loc, fmt, ap);
-       va_end(ap);
-
-       return ret;
-}
-
-
-ssize_t strfmon(char *restrict s, size_t n, const char *restrict fmt, ...)
-{
-       va_list ap;
-       ssize_t ret;
-
-       va_start(ap, fmt);
-       ret = vstrfmon_l(s, n, 0, fmt, ap);
-       va_end(ap);
-
-       return ret;
-}
-- 
2.26.2

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to osv-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/osv-dev/20200815042719.51117-8-jwkozaczuk%40gmail.com.

Reply via email to