Remove reimplimentation of two functions
authorRoland Schulz <roland@utk.edu>
Mon, 9 Dec 2013 20:46:03 +0000 (15:46 -0500)
committerGerrit Code Review <gerrit@gerrit.gromacs.org>
Thu, 9 Jan 2014 06:38:20 +0000 (07:38 +0100)
- parse_printf_args was identical to vsprintf (C89)
- str_to_int64_t was identical to strtoll (C99) and
  MSVC provides an replacement (_strtoi64)

Fixes #1163

Change-Id: I62fedc4193b408584d1c6978949202f11a9f81aa

src/gromacs/gmxlib/gmx_fatal.c
src/gromacs/gmxlib/string2.c
src/gromacs/legacyheaders/string2.h

index c7eed3af6793a9839333ea0ef46345a32e5aa69d..58e980b3270e1ffd8c80e5d8da2a29de9a37215b 100644 (file)
@@ -126,87 +126,6 @@ void _where(const char *file, int line)
     }
 }
 
-static void bputc(char *msg, int *len, char ch)
-{
-    msg[(*len)++] = ch;
-}
-
-static void bputs(char *msg, int *len, const char *s, int fld)
-{
-    for (fld -= (int)strlen(s); fld > 0; fld--)
-    {
-        bputc(msg, len, ' ');
-    }
-    while (*s)
-    {
-        bputc(msg, len, *(s++));
-    }
-}
-
-static void bputd(char *msg, int *len, int d)
-{
-    if (d < 10)
-    {
-        bputc(msg, len, d+'0');
-    }
-    else
-    {
-        bputc(msg, len, d-10+'a');
-    }
-}
-
-static void bputi(char *msg, int *len, int val, int radix, int fld, gmx_bool bNeg)
-{
-    int fmax = 0;
-
-    if (bNeg)
-    {
-        fmax = 1;
-    }
-
-    if (val < radix)
-    {
-        for (fld--; fld > fmax; fld--)
-        {
-            bputc(msg, len, ' ');
-        }
-        if (bNeg)
-        {
-            bputc(msg, len, '-');
-        }
-        bputd(msg, len, val);
-    }
-    else
-    {
-        if (bNeg)
-        {
-            bputc(msg, len, '-');
-        }
-        bputi(msg, len, val/radix, radix, fld-1, FALSE);
-        bputd(msg, len, val%radix);
-    }
-}
-
-static int getfld(const char **p)
-{
-    int fld;
-
-    fld = 0;
-    while (isdigit(**p))
-    {
-        fld = (fld*10)+((*((*p)++))-'0');
-    }
-    return fld;
-}
-
-/*static void _halt(char *file,int line,char *reason)
-   {
-   fprintf(stderr,"\nHALT in file %s line %d because:\n\t%s\n",
-      file,line,reason);
-   exit(1);
-   }
- */
-
 static int fatal_errno = 0;
 
 static void quit_gmx(const char *msg)
@@ -357,108 +276,15 @@ static void clean_fatal_tmp_file()
     tMPI_Thread_mutex_unlock(&fatal_tmp_mutex);
 }
 
-static void parse_printf_args(const char *fmt, va_list *ap, char *msg)
-{
-    int     len;
-    const char *p;
-    char    cval, *sval;
-    char    ibuf[64], ifmt[64];
-    int     index, ival, fld;
-    double  dval;
-
-    len = 0;
-    for (p = fmt; *p; p++)
-    {
-        if (*p != '%')
-        {
-            bputc(msg, &len, *p);
-        }
-        else
-        {
-            p++;
-            fld = getfld(&p);
-            switch (*p)
-            {
-                case 'x':
-                    ival = va_arg(*ap, int);
-                    sprintf(ifmt, "0x%%%dx", fld);
-                    sprintf(ibuf, ifmt, (unsigned int)ival);
-                    for (index = 0; (index < (int)strlen(ibuf)); index++)
-                    {
-                        bputc(msg, &len, ibuf[index]);
-                    }
-                    break;
-                case 'd':
-                    ival = va_arg(*ap, int);
-                    sprintf(ifmt, "%%%dd", fld);
-                    sprintf(ibuf, ifmt, ival);
-                    for (index = 0; (index < (int)strlen(ibuf)); index++)
-                    {
-                        bputc(msg, &len, ibuf[index]);
-                    }
-                    break;
-                case 'u':
-                    ival = va_arg(*ap, unsigned);
-                    sprintf(ifmt, "%%%du", fld);
-                    sprintf(ibuf, ifmt, ival);
-                    for (index = 0; (index < (int)strlen(ibuf)); index++)
-                    {
-                        bputc(msg, &len, ibuf[index]);
-                    }
-                    break;
-                case 'f':
-                    dval = va_arg(*ap, double);
-                    sprintf(ifmt, "%%%df", fld);
-                    sprintf(ibuf, ifmt, dval);
-                    for (index = 0; (index < (int)strlen(ibuf)); index++)
-                    {
-                        bputc(msg, &len, ibuf[index]);
-                    }
-                    break;
-                case 'g':
-                    dval = va_arg(*ap, double);
-                    sprintf(ifmt, "%%%dg", fld);
-                    sprintf(ibuf, ifmt, dval);
-                    for (index = 0; (index < (int)strlen(ibuf)); index++)
-                    {
-                        bputc(msg, &len, ibuf[index]);
-                    }
-                    break;
-                case 'c':
-                    cval = (char) va_arg(*ap, int); /* char is promoted to int */
-                    bputc(msg, &len, cval);
-                    break;
-                case 's':
-                    sval = va_arg(*ap, char *);
-                    if (sval == NULL)
-                    {
-                        sval = strdup("(null)");
-                    }
-                    bputs(msg, &len, sval, fld);
-                    break;
-                case '%':
-                    bputc(msg, &len, *p);
-                    break;
-                default:
-                    break;
-            }
-        }
-    }
-
-    bputc(msg, &len, '\0');
-}
-
 void gmx_fatal(int f_errno, const char *file, int line, const char *fmt, ...)
 {
     va_list ap;
     char    msg[STRLEN];
 
-    va_start(ap, fmt);
-
     clean_fatal_tmp_file();
 
-    parse_printf_args(fmt, &ap, msg);
-
+    va_start(ap, fmt);
+    vsprintf(msg, fmt, ap);
     va_end(ap);
 
     tMPI_Thread_mutex_lock(&debug_mutex);
@@ -498,12 +324,10 @@ void gmx_fatal_collective(int f_errno, const char *file, int line,
     if ((cr != NULL && MASTER(cr)  ) ||
         (dd != NULL && DDMASTER(dd)))
     {
-        va_start(ap, fmt);
-
         clean_fatal_tmp_file();
 
-        parse_printf_args(fmt, &ap, msg);
-
+        va_start(ap, fmt);
+        vsprintf(msg, fmt, ap);
         va_end(ap);
 
         tMPI_Thread_mutex_lock(&debug_mutex);
@@ -743,9 +567,7 @@ void gmx_warning(const char *fmt, ...)
     char msg[STRLEN];
 
     va_start(ap, fmt);
-
-    parse_printf_args(fmt, &ap, msg);
-
+    vsprintf(msg, fmt, ap);
     va_end(ap);
 
     fprintf(stderr, "\nWARNING: %s\n\n", msg);
index 95ef9d165ee838b9a55b4d3e352105976cc5d2c7..405111ee9df4eb2243d9e0cd64c7aa75959d0638 100644 (file)
@@ -622,57 +622,14 @@ char **split(char sep, const char *str)
     return ptr;
 }
 
-
 gmx_int64_t
 str_to_int64_t(const char *str, char **endptr)
 {
-    int              sign = 1;
-    gmx_int64_t      val  = 0;
-    char             ch;
-    const char      *p;
-
-    p = str;
-    if (p == NULL)
-    {
-        *endptr = NULL;
-        return 0;
-    }
-
-    /* Strip off initial white space */
-    while (isspace(*p))
-    {
-        p++;
-    }
-    /* Conform to ISO C99 - return original pointer if string does not contain a number */
-    if (*str == '\0')
-    {
-        *endptr = (char *)str;
-    }
-
-    if (*p == '-')
-    {
-        p++;
-        sign *= -1;
-    }
-
-    while ( ((ch = *p) != '\0') && isdigit(ch) )
-    {
-        /* Important to add sign here, so we dont overflow in final multiplication */
-        ch  = (ch-'0')*sign;
-        val = val*10 + ch;
-        if (ch != val%10)
-        {
-            /* Some sort of overflow has occured, set endptr to original string */
-            *endptr = (char *)str;
-            errno   = ERANGE;
-            return(0);
-        }
-        p++;
-    }
-
-    *endptr = (char *)p;
-
-    return val;
+#ifndef _MSC_VER
+    return strtoll(str, endptr, 10);
+#else
+    return _strtoi64(str, endptr, 10);
+#endif
 }
 
 char *gmx_strsep(char **stringp, const char *delim)
index 5df39f79558e205990508b71e683a70db0906eb7..53d26c6aa3e36f722e8d2eae1f997843ed116286 100644 (file)
@@ -212,12 +212,6 @@ char **split(char sep, const char *str);
  *
  * This method works as the standard library function strtol(), except that it
  * does not support different bases.
- *
- * \attention
- * The following differences are present from the standard behavior:
- *  - \p endptr cannot be NULL.
- *  - If an overflow occurs, returns zero and \p *endptr will equal \p str.
- *    errno is still set to ERANGE.
  */
 gmx_int64_t str_to_int64_t(const char *str, char **endptr);