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

    r2546 r3192  
    7272
    7373
    74 static int vflag;
    7574static struct option long_options[] =
    7675{
     
    8483extern mode_t bsd_getmode(const void *bbox, mode_t omode);
    8584
    86 static int      build(char *, mode_t);
    87 static int      usage(FILE *);
     85static int      build(PKMKBUILTINCTX pCtx, char *, mode_t, int);
     86static int      usage(PKMKBUILTINCTX pCtx, int fIsErr);
    8887
    8988
    9089int
    91 kmk_builtin_mkdir(int argc, char *argv[], char **envp)
    92 {
    93         int ch, exitval, success, pflag;
     90kmk_builtin_mkdir(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx)
     91{
     92        int ch, exitval, success, pflag, vflag;
    9493        mode_t omode, *set = (mode_t *)NULL;
    9594        char *mode;
    9695
    97         omode = pflag = 0;
     96        omode = pflag = vflag = 0;
    9897        mode = NULL;
    9998
    100         /* reinitialize globals */
    101         vflag = 0;
    102 
    10399        /* kmk: reset getopt and set progname */
    104         g_progname = argv[0];
    105100        opterr = 1;
    106101        optarg = NULL;
     
    119114                        break;
    120115                case 261:
    121                         usage(stdout);
     116                        usage(pCtx, 0);
    122117                        return 0;
    123118                case 262:
    124119                        return kbuild_version(argv[0]);
    125120                case '?':
    126                         default:
    127                         return usage(stderr);
     121                default:
     122                        return usage(pCtx, 1);
    128123                }
    129124
     
    131126        argv += optind;
    132127        if (argv[0] == NULL)
    133                 return usage(stderr);
     128                return usage(pCtx, 1);
    134129
    135130        if (mode == NULL) {
     
    137132        } else {
    138133                if ((set = bsd_setmode(mode)) == NULL)
    139                         return errx(1, "invalid file mode: %s", mode);
     134                        return errx(pCtx, 1, "invalid file mode: %s", mode);
    140135                omode = bsd_getmode(set, S_IRWXU | S_IRWXG | S_IRWXO);
    141136                free(set);
     
    145140                success = 1;
    146141                if (pflag) {
    147                         if (build(*argv, omode))
     142                        if (build(pCtx, *argv, omode, vflag))
    148143                                success = 0;
    149144                } else if (mkdir(*argv, omode) < 0) {
    150145                        if (errno == ENOTDIR || errno == ENOENT)
    151                                 warn("mkdir: %s", dirname(*argv));
     146                                warn(pCtx, "mkdir: %s", dirname(*argv));
    152147                        else
    153                                 warn("mkdir: %s", *argv);
     148                                warn(pCtx, "mkdir: %s", *argv);
    154149                        success = 0;
    155150                } else if (vflag)
    156                         (void)printf("%s\n", *argv);
     151                        kmk_builtin_ctx_printf(pCtx, 0, "%s\n", *argv);
    157152
    158153                if (!success)
     
    166161                 */
    167162                if (success && mode != NULL && chmod(*argv, omode) == -1) {
    168                         warn("chmod: %s", *argv);
     163                        warn(pCtx, "chmod: %s", *argv);
    169164                        exitval = 1;
    170165                }
     
    173168}
    174169
     170#ifdef KMK_BUILTIN_STANDALONE
     171int main(int argc, char **argv, char **envp)
     172{
     173    KMKBUILTINCTX Ctx = { "kmk_mkdir", NULL };
     174    return kmk_builtin_mkdir(argc, argv, envp, &Ctx);
     175}
     176#endif
     177
    175178static int
    176 build(char *path, mode_t omode)
     179build(PKMKBUILTINCTX pCtx, char *path, mode_t omode, int vflag)
    177180{
    178181        struct stat sb;
     
    251254                            || errno == EACCES /* (ditto) */) {
    252255                                if (stat(path, &sb) < 0) {
    253                                         warn("stat: %s", path);
     256                                        warn(pCtx, "stat: %s", path);
    254257                                        retval = 1;
    255258                                        break;
     
    259262                                        else
    260263                                                errno = ENOTDIR;
    261                                         warn("st_mode: %s", path);
     264                                        warn(pCtx, "st_mode: %s", path);
    262265                                        retval = 1;
    263266                                        break;
    264267                                }
    265268                        } else {
    266                                 warn("mkdir: %s", path);
     269                                warn(pCtx, "mkdir: %s", path);
    267270                                retval = 1;
    268271                                break;
    269272                        }
    270273                } else if (vflag)
    271                         printf("%s\n", path);
     274                        kmk_builtin_ctx_printf(pCtx, 0, "%s\n", path);
    272275                if (!last)
    273276                    *p = '/';
     
    279282
    280283static int
    281 usage(FILE *pf)
    282 {
    283         fprintf(pf, "usage: %s [-pv] [-m mode] directory ...\n"
    284                     "   or: %s --help\n"
    285                     "   or: %s --version\n",
    286                 g_progname, g_progname, g_progname);
     284usage(PKMKBUILTINCTX pCtx, int fIsErr)
     285{
     286        kmk_builtin_ctx_printf(pCtx, fIsErr,
     287                               "usage: %s [-pv] [-m mode] directory ...\n"
     288                               "   or: %s --help\n"
     289                               "   or: %s --version\n",
     290                               pCtx->pszProgName, pCtx->pszProgName, pCtx->pszProgName);
    287291        return EX_USAGE;
    288292}
     293
Note: See TracChangeset for help on using the changeset viewer.