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/common-env-and-cwd-opt.c

    r3177 r3192  
    5050 *
    5151 * @returns The duplicate enviornment.
     52 * @param   pCtx                The built-in command context.
    5253 * @param   papszEnv            The read-only vector.
    5354 * @param   cEnvVars            The number of variables.
     
    5657 * @param   cVerbosity          The verbosity level.
    5758 */
    58 static char **kBuiltinOptEnvDuplicate(char **papszEnv, unsigned cEnvVars, unsigned *pcAllocatedEnvVars, int cVerbosity)
     59static char **kBuiltinOptEnvDuplicate(PKMKBUILTINCTX pCtx, char **papszEnv, unsigned cEnvVars, unsigned *pcAllocatedEnvVars,
     60                                      int cVerbosity)
    5961{
    6062    unsigned cAllocatedEnvVars = (cEnvVars + 2 + 0xf) & ~(unsigned)0xf;
     
    7274                    free(papszEnvNew[i]);
    7375                free(papszEnvNew);
    74                 errx(1, "out of memory for duplicating environment variables!", i);
     76                errx(pCtx, 1, "out of memory for duplicating environment variables!", i);
    7577                return NULL;
    7678            }
     
    8082    }
    8183    else
    82         errx(1, "out of memory for duplicating environment vector!");
     84        errx(pCtx, 1, "out of memory for duplicating environment vector!");
    8385    return papszEnvNew;
    8486}
     
    9092 *
    9193 * @returns 0 on success, non-zero exit code on error.
     94 * @param   pCtx                The built-in command context.
    9295 * @param   papszEnv            The environment vector.
    9396 * @param   pcEnvVars           Pointer to the variable holding the number of
     
    98101 * @param   pszValue            The var=value string to apply.
    99102 */
    100 static int kBuiltinOptEnvAddVar(char ***ppapszEnv, unsigned *pcEnvVars, unsigned *pcAllocatedEnvVars,
     103static int kBuiltinOptEnvAddVar(PKMKBUILTINCTX pCtx, char ***ppapszEnv, unsigned *pcEnvVars, unsigned *pcAllocatedEnvVars,
    101104                                int cVerbosity, const char *pszValue)
    102105{
     
    109112        papszEnv = (char **)realloc(papszEnv, *pcAllocatedEnvVars * sizeof(papszEnv[0]));
    110113        if (!papszEnv)
    111             return errx(1, "out of memory growing environment vector!");
     114            return errx(pCtx, 1, "out of memory growing environment vector!");
    112115        *ppapszEnv = papszEnv;
    113116    }
    114117    papszEnv[cEnvVars] = strdup(pszValue);
    115118    if (!papszEnv[cEnvVars])
    116         return errx(1, "out of memory adding environment variable!");
     119        return errx(pCtx, 1, "out of memory adding environment variable!");
    117120    papszEnv[++cEnvVars]   = NULL;
    118121    *pcEnvVars = cEnvVars;
    119122    if (cVerbosity > 0)
    120         warnx("added '%s'", papszEnv[cEnvVars - 1]);
     123        warnx(pCtx, "added '%s'", papszEnv[cEnvVars - 1]);
    121124    return 0;
    122125}
     
    128131 *
    129132 * @returns 0 on success, non-zero exit code on error.
     133 * @param   pCtx                The built-in command context.
    130134 * @param   papszEnv            The environment vector.
    131135 * @param   cEnvVars            Number of environment variables.
     
    135139 * @param   iEnvVar             Where to start searching after.
    136140 */
    137 static int kBuiltinOptEnvRemoveDuplicates(char **papszEnv, unsigned cEnvVars, int cVerbosity,
     141static int kBuiltinOptEnvRemoveDuplicates(PKMKBUILTINCTX pCtx, char **papszEnv, unsigned cEnvVars, int cVerbosity,
    138142                                          const char *pszValue, size_t cchVar, unsigned iEnvVar)
    139143{
     
    143147        {
    144148            if (cVerbosity > 0)
    145                 warnx("removing duplicate '%s'", papszEnv[iEnvVar]);
     149                warnx(pCtx, "removing duplicate '%s'", papszEnv[iEnvVar]);
    146150            free(papszEnv[iEnvVar]);
    147151            cEnvVars--;
     
    159163 *
    160164 * @returns 0 on success, non-zero exit code on error.
     165 * @param   pCtx                The built-in command context.
    161166 * @param   ppapszEnv           The environment vector pointer.
    162167 * @param   pcEnvVars           Pointer to the variable holding the number of
     
    167172 * @param   pszValue            The var=value string to apply.
    168173 */
    169 int kBuiltinOptEnvSet(char ***ppapszEnv, unsigned *pcEnvVars, unsigned *pcAllocatedEnvVars, int cVerbosity, const char *pszValue)
     174int kBuiltinOptEnvSet(PKMKBUILTINCTX pCtx, char ***ppapszEnv, unsigned *pcEnvVars, unsigned *pcAllocatedEnvVars,
     175                      int cVerbosity, const char *pszValue)
    170176{
    171177    const char *pszEqual = strchr(pszValue, '=');
     
    179185        if (!*pcAllocatedEnvVars)
    180186        {
    181             papszEnv = kBuiltinOptEnvDuplicate(papszEnv, cEnvVars, pcAllocatedEnvVars, cVerbosity);
     187            papszEnv = kBuiltinOptEnvDuplicate(pCtx, papszEnv, cEnvVars, pcAllocatedEnvVars, cVerbosity);
    182188            if (!papszEnv)
    183                 return errx(1, "out of memory duplicating enviornment (setenv)!");
     189                return errx(pCtx, 1, "out of memory duplicating enviornment (setenv)!");
    184190            *ppapszEnv = papszEnv;
    185191        }
     
    192198            {
    193199                if (cVerbosity > 0)
    194                     warnx("replacing '%s' with '%s'", papszEnv[iEnvVar], pszValue);
     200                    warnx(pCtx, "replacing '%s' with '%s'", papszEnv[iEnvVar], pszValue);
    195201                free(papszEnv[iEnvVar]);
    196202                papszEnv[iEnvVar] = strdup(pszValue);
    197203                if (!papszEnv[iEnvVar])
    198                     return errx(1, "out of memory for modified environment variable!");
    199 
    200                 return kBuiltinOptEnvRemoveDuplicates(papszEnv, cEnvVars, cVerbosity, pszValue, cchVar, iEnvVar);
     204                    return errx(pCtx, 1, "out of memory for modified environment variable!");
     205
     206                return kBuiltinOptEnvRemoveDuplicates(pCtx, papszEnv, cEnvVars, cVerbosity, pszValue, cchVar, iEnvVar);
    201207            }
    202208        }
    203         return kBuiltinOptEnvAddVar(ppapszEnv, pcEnvVars, pcAllocatedEnvVars, cVerbosity, pszValue);
    204     }
    205     return errx(1, "Missing '=': -E %s", pszValue);
     209        return kBuiltinOptEnvAddVar(pCtx, ppapszEnv, pcEnvVars, pcAllocatedEnvVars, cVerbosity, pszValue);
     210    }
     211    return errx(pCtx, 1, "Missing '=': -E %s", pszValue);
    206212}
    207213
     
    211217 *
    212218 * @returns 0 on success, non-zero exit code on error.
     219 * @param   pCtx                The built-in command context.
    213220 * @param   ppapszEnv           The environment vector pointer.
    214221 * @param   pcEnvVars           Pointer to the variable holding the number of
     
    219226 * @param   pszValue            The var=value string to apply.
    220227 */
    221 static int kBuiltinOptEnvAppendPrepend(char ***ppapszEnv, unsigned *pcEnvVars, unsigned *pcAllocatedEnvVars,
     228static int kBuiltinOptEnvAppendPrepend(PKMKBUILTINCTX pCtx, char ***ppapszEnv, unsigned *pcEnvVars, unsigned *pcAllocatedEnvVars,
    222229                                       int cVerbosity, const char *pszValue, int fAppend)
    223230{
     
    232239        if (!*pcAllocatedEnvVars)
    233240        {
    234             papszEnv = kBuiltinOptEnvDuplicate(papszEnv, cEnvVars, pcAllocatedEnvVars, cVerbosity);
     241            papszEnv = kBuiltinOptEnvDuplicate(pCtx, papszEnv, cEnvVars, pcAllocatedEnvVars, cVerbosity);
    235242            if (!papszEnv)
    236                 return errx(1, "out of memory duplicating environment (append)!");
     243                return errx(pCtx, 1, "out of memory duplicating environment (append)!");
    237244            *ppapszEnv = papszEnv;
    238245        }
     
    248255                char  *pszNew      = malloc(cchVar + 1 + cchOldValue + cchNewValue + 1);
    249256                if (!pszNew)
    250                     return errx(1, "out of memory appending to environment variable!");
     257                    return errx(pCtx, 1, "out of memory appending to environment variable!");
    251258                if (fAppend)
    252259                {
     
    262269
    263270                if (cVerbosity > 0)
    264                     warnx("replacing '%s' with '%s'", pszCur, pszNew);
     271                    warnx(pCtx, "replacing '%s' with '%s'", pszCur, pszNew);
    265272                free(pszCur);
    266273                papszEnv[iEnvVar] = pszNew;
    267274
    268                 return kBuiltinOptEnvRemoveDuplicates(papszEnv, cEnvVars, cVerbosity, pszValue, cchVar, iEnvVar);
     275                return kBuiltinOptEnvRemoveDuplicates(pCtx, papszEnv, cEnvVars, cVerbosity, pszValue, cchVar, iEnvVar);
    269276            }
    270277        }
    271         return kBuiltinOptEnvAddVar(ppapszEnv, pcEnvVars, pcAllocatedEnvVars, cVerbosity, pszValue);
    272     }
    273     return errx(1, "Missing '=': -E %s", pszValue);
     278        return kBuiltinOptEnvAddVar(pCtx, ppapszEnv, pcEnvVars, pcAllocatedEnvVars, cVerbosity, pszValue);
     279    }
     280    return errx(pCtx, 1, "Missing '=': -E %s", pszValue);
    274281}
    275282
     
    279286 *
    280287 * @returns 0 on success, non-zero exit code on error.
     288 * @param   pCtx                The built-in command context.
    281289 * @param   ppapszEnv           The environment vector pointer.
    282290 * @param   pcEnvVars           Pointer to the variable holding the number of
     
    287295 * @param   pszValue            The var=value string to apply.
    288296 */
    289 int kBuiltinOptEnvAppend(char ***ppapszEnv, unsigned *pcEnvVars, unsigned *pcAllocatedEnvVars, int cVerbosity, const char *pszValue)
    290 {
    291     return kBuiltinOptEnvAppendPrepend(ppapszEnv, pcEnvVars, pcAllocatedEnvVars, cVerbosity, pszValue, 1 /*fAppend*/);
     297int kBuiltinOptEnvAppend(PKMKBUILTINCTX pCtx, char ***ppapszEnv, unsigned *pcEnvVars, unsigned *pcAllocatedEnvVars,
     298                         int cVerbosity, const char *pszValue)
     299{
     300    return kBuiltinOptEnvAppendPrepend(pCtx, ppapszEnv, pcEnvVars, pcAllocatedEnvVars, cVerbosity, pszValue, 1 /*fAppend*/);
    292301}
    293302
     
    297306 *
    298307 * @returns 0 on success, non-zero exit code on error.
     308 * @param   pCtx                The built-in command context.
    299309 * @param   ppapszEnv           The environment vector pointer.
    300310 * @param   pcEnvVars           Pointer to the variable holding the number of
     
    305315 * @param   pszValue            The var=value string to apply.
    306316 */
    307 int kBuiltinOptEnvPrepend(char ***ppapszEnv, unsigned *pcEnvVars, unsigned *pcAllocatedEnvVars, int cVerbosity, const char *pszValue)
    308 {
    309     return kBuiltinOptEnvAppendPrepend(ppapszEnv, pcEnvVars, pcAllocatedEnvVars, cVerbosity, pszValue, 0 /*fAppend*/);
     317int kBuiltinOptEnvPrepend(PKMKBUILTINCTX pCtx, char ***ppapszEnv, unsigned *pcEnvVars, unsigned *pcAllocatedEnvVars,
     318                          int cVerbosity, const char *pszValue)
     319{
     320    return kBuiltinOptEnvAppendPrepend(pCtx, ppapszEnv, pcEnvVars, pcAllocatedEnvVars, cVerbosity, pszValue, 0 /*fAppend*/);
    310321}
    311322
     
    315326 *
    316327 * @returns 0 on success, non-zero exit code on error.
     328 * @param   pCtx                The built-in command context.
    317329 * @param   ppapszEnv           The environment vector pointer.
    318330 * @param   pcEnvVars           Pointer to the variable holding the number of
     
    324336 * @param   pszVarToRemove      The name of the variable to remove.
    325337 */
    326 int kBuiltinOptEnvUnset(char ***ppapszEnv, unsigned *pcEnvVars, unsigned *pcAllocatedEnvVars, int cVerbosity, const char *pszVarToRemove)
     338int kBuiltinOptEnvUnset(PKMKBUILTINCTX pCtx, char ***ppapszEnv, unsigned *pcEnvVars, unsigned *pcAllocatedEnvVars,
     339                        int cVerbosity, const char *pszVarToRemove)
    327340{
    328341    if (strchr(pszVarToRemove, '=') == NULL)
     
    339352            {
    340353                if (cVerbosity > 0)
    341                     warnx(!cRemoved ? "removing '%s'" : "removing duplicate '%s'", papszEnv[iEnvVar]);
     354                    warnx(pCtx, !cRemoved ? "removing '%s'" : "removing duplicate '%s'", papszEnv[iEnvVar]);
    342355
    343356                if (!*pcAllocatedEnvVars)
    344357                {
    345                     papszEnv = kBuiltinOptEnvDuplicate(papszEnv, cEnvVars, pcAllocatedEnvVars, cVerbosity);
     358                    papszEnv = kBuiltinOptEnvDuplicate(pCtx, papszEnv, cEnvVars, pcAllocatedEnvVars, cVerbosity);
    346359                    if (!papszEnv)
    347                         return errx(1, "out of memory duplicating environment (unset)!");
     360                        return errx(pCtx, 1, "out of memory duplicating environment (unset)!");
    348361                    *ppapszEnv = papszEnv;
    349362                }
     
    360373
    361374        if (cVerbosity > 0 && !cRemoved)
    362             warnx("not found '%s'", pszVarToRemove);
     375            warnx(pCtx, "not found '%s'", pszVarToRemove);
    363376    }
    364377    else
    365         return errx(1, "Found invalid variable name character '=' in: -U %s", pszVarToRemove);
     378        return errx(pCtx, 1, "Found invalid variable name character '=' in: -U %s", pszVarToRemove);
    366379    return 0;
    367380}
     
    372385 *
    373386 * @returns 0 on success, non-zero exit code on error.
     387 * @param   pCtx                The built-in command context.
    374388 * @param   ppapszEnv           The environment vector pointer.
    375389 * @param   pcEnvVars           Pointer to the variable holding the number of
     
    380394 * @param   cVerbosity          The verbosity level.
    381395 */
    382 int kBuiltinOptEnvZap(char ***ppapszEnv, unsigned *pcEnvVars, unsigned *pcAllocatedEnvVars, int cVerbosity)
     396int kBuiltinOptEnvZap(PKMKBUILTINCTX pCtx, char ***ppapszEnv, unsigned *pcEnvVars, unsigned *pcAllocatedEnvVars, int cVerbosity)
    383397{
    384398    if (*pcAllocatedEnvVars > 0)
     
    396410        char **papszEnv = calloc(4, sizeof(char *));
    397411        if (!papszEnv)
    398             return err(1, "out of memory!");
     412            return err(pCtx, 1, "out of memory!");
    399413        *ppapszEnv = papszEnv;
    400414        *pcAllocatedEnvVars = 4;
     
    435449 *
    436450 * @returns 0 on success, non-zero exit code on error.
     451 * @param   pCtx                The built-in command context.
    437452 * @param   pszCwd              The CWD buffer.  Contains current CWD on input,
    438453 *                              modified by @a pszValue on output.
     
    440455 * @param   pszValue            The --chdir value to apply.
    441456 */
    442 int kBuiltinOptChDir(char *pszCwd, size_t cbCwdBuf, const char *pszValue)
     457int kBuiltinOptChDir(PKMKBUILTINCTX pCtx, char *pszCwd, size_t cbCwdBuf, const char *pszValue)
    443458{
    444459    size_t cchNewCwd = strlen(pszValue);
     
    454469                offDst = 2; /* Take drive letter from CWD. */
    455470            else
    456                 return errx(1, "UNC relative CWD not implemented: cur='%s' new='%s'", pszCwd, pszValue);
     471                return errx(pCtx, 1, "UNC relative CWD not implemented: cur='%s' new='%s'", pszCwd, pszValue);
    457472        }
    458473        else if (   pszValue[1] == ':'
     
    473488                int iDrive = tolower(pszValue[0]) - 'a' + 1;
    474489                if (!_getdcwd(iDrive, pszCwd, cbCwdBuf))
    475                     return err(1, "_getdcwd(%d,,) failed", iDrive);
     490                    return err(pCtx, 1, "_getdcwd(%d,,) failed", iDrive);
    476491                pszValue += 2;
    477492                cchNewCwd -= 2;
     
    493508             pszCwd[offDst++] = '/';
    494509        if (offDst + cchNewCwd >= cbCwdBuf)
    495             return errx(1, "Too long CWD: %*.*s%s", offDst, offDst, pszCwd, pszValue);
     510            return errx(pCtx, 1, "Too long CWD: %*.*s%s", offDst, offDst, pszCwd, pszValue);
    496511        memcpy(&pszCwd[offDst], pszValue, cchNewCwd + 1);
    497512    }
Note: See TracChangeset for help on using the changeset viewer.