Ignore:
Timestamp:
Mar 26, 2018, 10:25:56 PM (7 years ago)
Author:
bird
Message:

kmkbuiltin: funnel output thru output.c (usually via err.c).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kmk/kmkbuiltin/sleep.c

    r2413 r3192  
    4040#endif
    4141
     42#include "err.h"
    4243#include "../kmkbuiltin.h"
    4344
    4445
    45 static const char *name(const char *pszName)
     46static int kmk_builtin_sleep_usage(PKMKBUILTINCTX pCtx, int fIsErr)
    4647{
    47     const char *psz = strrchr(pszName, '/');
    48 #if defined(_MSC_VER) || defined(__OS2__)
    49     const char *psz2 = strrchr(pszName, '\\');
    50     if (!psz2)
    51         psz2 = strrchr(pszName, ':');
    52     if (psz2 && (!psz || psz2 > psz))
    53         psz = psz2;
    54 #endif
    55     return psz ? psz + 1 : pszName;
    56 }
    57 
    58 
    59 static int usage(FILE *pOut,  const char *argv0)
    60 {
    61     argv0 = name(argv0);
    62     fprintf(pOut,
    63             "usage: %s <seconds>[s]\n"
    64             "   or: %s <milliseconds>ms\n"
    65             "   or: %s <minutes>m\n"
    66             "   or: %s <hours>h\n"
    67             "   or: %s <days>d\n"
    68             "   or: %s --help\n"
    69             "   or: %s --version\n"
    70             "\n"
    71             "Only integer values are accepted.\n"
    72             ,
    73             argv0, argv0, argv0, argv0, argv0, argv0, argv0);
     48    kmk_builtin_ctx_printf(pCtx, fIsErr,
     49                           "usage: %s <seconds>[s]\n"
     50                           "   or: %s <milliseconds>ms\n"
     51                           "   or: %s <minutes>m\n"
     52                           "   or: %s <hours>h\n"
     53                           "   or: %s <days>d\n"
     54                           "   or: %s --help\n"
     55                           "   or: %s --version\n"
     56                           "\n"
     57                           "Only integer values are accepted.\n"
     58                           ,
     59                           pCtx->pszProgName, pCtx->pszProgName, pCtx->pszProgName, pCtx->pszProgName,
     60                           pCtx->pszProgName, pCtx->pszProgName, pCtx->pszProgName);
    7461    return 1;
    7562}
    7663
    7764
    78 int kmk_builtin_sleep(int argc, char **argv, char **envp)
     65int kmk_builtin_sleep(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx)
    7966{
    8067    long cMsToSleep;
     
    8875     */
    8976    if (argc != 2)
    90         return usage(stderr, argv[0]);
     77        return kmk_builtin_sleep_usage(pCtx, 1);
    9178
    9279    /* help request */
     
    9683        || !strcmp(argv[1], "--help"))
    9784    {
    98         usage(stdout, argv[0]);
     85        kmk_builtin_sleep_usage(pCtx, 0);
    9986        return 0;
    10087    }
     
    121108    cMsToSleep = strtol(pszInterval, &pszSuff, 0);
    122109    if (pszSuff == pszInterval)
    123     {
    124         fprintf(stderr, "%s: malformed interval '%s'!\n", name(argv[0]), pszInterval);
    125         return 1;
    126     }
     110        return errx(pCtx, 1, "malformed interval '%s'!\n", pszInterval);
    127111
    128112    while (isspace(*pszSuff))
     
    142126        {
    143127            if (!isspace(pszSuff[i]))
    144             {
    145                 fprintf(stderr, "%s: malformed interval '%s'!\n", name(argv[0]), pszInterval);
    146                 return 1;
    147             }
     128                return errx(pCtx, 1, "malformed interval '%s'!\n", pszInterval);
    148129            i++;
    149130        }
     
    160141            ulFactor = 24*60*60*1000;
    161142        else
    162         {
    163             fprintf(stderr, "%s: unknown suffix '%.*s'!\n", name(argv[0]), cchSuff, pszSuff);
    164             return 1;
    165         }
     143            return errx(pCtx, 1, "unknown suffix '%.*s'!\n", cchSuff, pszSuff);
    166144    }
    167145
     
    169147    cMsToSleep *= ulFactor;
    170148    if ((cMsToSleep / ulFactor) != (unsigned long)lTmp)
    171     {
    172         fprintf(stderr, "%s: time interval overflow!\n", name(argv[0]));
    173         return 1;
    174     }
     149        return errx(pCtx, 1, "time interval overflow!\n");
    175150
    176151    /*
     
    195170}
    196171
     172#ifdef KMK_BUILTIN_STANDALONE
     173int main(int argc, char **argv, char **envp)
     174{
     175    KMKBUILTINCTX Ctx = { "kmk_sleep", NULL };
     176    return kmk_builtin_sleep(argc, argv, envp, &Ctx);
     177}
     178#endif
     179
Note: See TracChangeset for help on using the changeset viewer.