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/cmp.c

    r3092 r3192  
    6464
    6565
    66 static int usage(FILE *);
     66static int usage(PKMKBUILTINCTX pCtx, int is_err);
    6767
    6868int
    69 kmk_builtin_cmp(int argc, char *argv[], char **envp)
     69kmk_builtin_cmp(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx)
    7070{
    7171    off_t skip1 = 0, skip2 = 0;
     
    7474    char *file1, *file2;
    7575
    76 #ifdef kmk_builtin_cmp
     76#ifdef KMK_BUILTIN_STANDALONE
    7777    setlocale(LC_ALL, "");
    7878#endif
    7979
    8080    /* reset getopt and set progname. */
    81     g_progname = argv[0];
    8281    opterr = 1;
    8382    optarg = NULL;
     
    9695                break;
    9796            case 261:
    98                 usage(stdout);
     97                usage(pCtx, 0);
    9998                return 0;
    10099            case 262:
     
    102101            case '?':
    103102            default:
    104                 return usage(stderr);
     103                return usage(pCtx, 1);
    105104        }
    106105    }
     
    109108
    110109    if (argc < 2 || argc > 4)
    111         return usage(stderr);
     110        return usage(pCtx, 1);
    112111
    113112    file1 = argv[0];
     
    121120        skip1 = strtoll(argv[2], &ep, 0);
    122121        if (errno || ep == argv[2])
    123             return errx(ERR_EXIT, "strtoll(%s,,) failed", argv[2]);
     122            return errx(pCtx, ERR_EXIT, "strtoll(%s,,) failed", argv[2]);
    124123
    125124        if (argc == 4)
     
    127126            skip2 = strtoll(argv[3], &ep, 0);
    128127            if (errno || ep == argv[3])
    129                 return errx(ERR_EXIT, "strtoll(%s,,) failed", argv[3]);
     128                return errx(pCtx, ERR_EXIT, "strtoll(%s,,) failed", argv[3]);
    130129        }
    131130    }
    132131
    133     return cmp_file_and_file_ex(file1, skip1, file2, skip2, sflag, lflag, 0);
     132    return cmp_file_and_file_ex(pCtx, file1, skip1, file2, skip2, sflag, lflag, 0);
    134133}
    135134
    136135static int
    137 usage(FILE *fp)
     136usage(PKMKBUILTINCTX pCtx, int is_err)
    138137{
    139     fprintf(fp, "usage: %s [-l | -s] file1 file2 [skip1 [skip2]]\n"
    140                 "   or: %s --help\n"
    141                 "   or: %s --version\n",
    142             g_progname, g_progname, g_progname);
     138    kmk_builtin_ctx_printf(pCtx, is_err,
     139                           "usage: %s [-l | -s] file1 file2 [skip1 [skip2]]\n"
     140                           "   or: %s --help\n"
     141                           "   or: %s --version\n",
     142                           pCtx->pszProgName, pCtx->pszProgName, pCtx->pszProgName);
    143143    return ERR_EXIT;
    144144}
     145
     146#ifdef KMK_BUILTIN_STANDALONE
     147int main(int argc, char **argv, char **envp)
     148{
     149    KMKBUILTINCTX Ctx = { "kmk_cmp", NULL };
     150    return kmk_builtin_cmp(argc, argv, envp, &Ctx);
     151}
     152#endif
     153
Note: See TracChangeset for help on using the changeset viewer.