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.h

    r3173 r3192  
    3434# include <sys/types.h>
    3535#endif
     36#include <fcntl.h>
    3637
    3738/* For the GNU/hurd weirdo. */
     
    5758#endif
    5859
     60/** This is for telling open() to open to return a close-on-exec descriptor. */
     61#ifdef _O_NOINHERIT
     62# define KMK_OPEN_NO_INHERIT        _O_NOINHERIT
     63#elif defined(O_NOINHERIT)
     64# define KMK_OPEN_NO_INHERIT        O_NOINHERIT
     65#elif defined(O_CLOEXEC)
     66# define KMK_OPEN_NO_INHERIT        O_CLOEXEC
     67#else
     68# define KMK_OPEN_NO_INHERIT        0
     69#endif
     70
     71
    5972#include "kbuild_version.h"
     73#ifndef KMK_BUILTIN_STANDALONE
     74# include "../output.h"
     75#endif
    6076
    6177struct child;
    6278int kmk_builtin_command(const char *pszCmd, struct child *pChild, char ***ppapszArgvToSpawn, pid_t *pPidSpawned);
    6379int kmk_builtin_command_parsed(int argc, char **argv, struct child *pChild, char ***ppapszArgvToSpawn, pid_t *pPidSpawned);
     80
     81
     82/**
     83 * KMK built-in command execution context.
     84 */
     85typedef struct KMKBUILTINCTX
     86{
     87    /** The program name to use in error messages. */
     88    const char *pszProgName;
     89    /** The KMK output synchronizer.   */
     90    struct output *pOut;
     91} KMKBUILTINCTX;
     92/** Pointer to kmk built-in command execution context. */
     93typedef KMKBUILTINCTX *PKMKBUILTINCTX;
    6494
    6595/**
     
    81111        uintptr_t uPfn;
    82112#define FN_SIG_MAIN             0
    83         int (* pfnMain)(int argc, char **argv, char **envp);
     113        int (* pfnMain)(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx);
    84114#define FN_SIG_MAIN_SPAWNS      1
    85         int (* pfnMainSpawns)(int argc, char **argv, char **envp, struct child *pChild, pid_t *pPid);
     115        int (* pfnMainSpawns)(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx, struct child *pChild, pid_t *pPid);
    86116#define FN_SIG_MAIN_TO_SPAWN    2
    87         int (* pfnMainToSpawn)(int argc, char **argv, char **envp, char ***ppapszArgvToSpawn);
     117        int (* pfnMainToSpawn)(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx, char ***ppapszArgvToSpawn);
    88118    } u;
    89119    size_t      uFnSignature : 8;
     
    94124typedef KMKBUILTINENTRY const *PCKMKBUILTINENTRY;
    95125
    96 #ifndef kmk_builtin_append
    97 extern int kmk_builtin_append(int argc, char **argv, char **envp, struct child *pChild, pid_t *pPidSpawned);
    98 #endif
    99 extern int kmk_builtin_cp(int argc, char **argv, char **envp);
    100 extern int kmk_builtin_cat(int argc, char **argv, char **envp);
    101 extern int kmk_builtin_chmod(int argc, char **argv, char **envp);
    102 extern int kmk_builtin_cmp(int argc, char **argv, char **envp);
    103 extern int kmk_builtin_dircache(int argc, char **argv, char **envp);
    104 extern int kmk_builtin_echo(int argc, char **argv, char **envp);
    105 extern int kmk_builtin_expr(int argc, char **argv, char **envp);
    106 extern int kmk_builtin_install(int argc, char **argv, char **envp);
    107 extern int kmk_builtin_ln(int argc, char **argv, char **envp);
    108 extern int kmk_builtin_md5sum(int argc, char **argv, char **envp);
    109 extern int kmk_builtin_mkdir(int argc, char **argv, char **envp);
    110 extern int kmk_builtin_mv(int argc, char **argv, char **envp);
    111 extern int kmk_builtin_printf(int argc, char **argv, char **envp);
    112 extern int kmk_builtin_redirect(int argc, char **argv, char **envp, struct child *pChild, pid_t *pPidSpawned);
    113 extern int kmk_builtin_rm(int argc, char **argv, char **envp);
    114 extern int kmk_builtin_rmdir(int argc, char **argv, char **envp);
    115 extern int kmk_builtin_sleep(int argc, char **argv, char **envp);
    116 extern int kmk_builtin_test(int argc, char **argv, char **envp
    117 #ifndef kmk_builtin_test
    118                             , char ***ppapszArgvSpawn
    119 #endif
    120                             );
    121 extern int kmk_builtin_touch(int argc, char **argv, char **envp);
     126extern int kmk_builtin_append(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx, struct child *pChild, pid_t *pPidSpawned);
     127extern int kmk_builtin_cp(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx);
     128extern int kmk_builtin_cat(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx);
     129extern int kmk_builtin_chmod(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx);
     130extern int kmk_builtin_cmp(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx);
     131extern int kmk_builtin_dircache(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx);
     132extern int kmk_builtin_echo(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx);
     133extern int kmk_builtin_expr(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx);
     134extern int kmk_builtin_install(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx);
     135extern int kmk_builtin_ln(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx);
     136extern int kmk_builtin_md5sum(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx);
     137extern int kmk_builtin_mkdir(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx);
     138extern int kmk_builtin_mv(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx);
     139extern int kmk_builtin_printf(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx);
     140extern int kmk_builtin_redirect(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx, struct child *pChild, pid_t *pPidSpawned);
     141extern int kmk_builtin_rm(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx);
     142extern int kmk_builtin_rmdir(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx);
     143extern int kmk_builtin_sleep(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx);
     144extern int kmk_builtin_test(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx, char ***ppapszArgvSpawn);
     145extern int kmk_builtin_touch(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx);
    122146#ifdef KBUILD_OS_WINDOWS
    123 extern int kmk_builtin_kSubmit(int argc, char **argv, char **envp, struct child *pChild, pid_t *pPidSpawned);
     147extern int kmk_builtin_kSubmit(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx, struct child *pChild, pid_t *pPidSpawned);
    124148extern int kSubmitSubProcGetResult(intptr_t pvUser, int *prcExit, int *piSigNo);
    125149extern int kSubmitSubProcKill(intptr_t pvUser, int iSignal);
    126150extern void kSubmitSubProcCleanup(intptr_t pvUser);
    127151#endif
    128 extern int kmk_builtin_kDepIDB(int argc, char **argv, char **envp);
    129 extern int kmk_builtin_kDepObj(int argc, char **argv, char **envp);
     152extern int kmk_builtin_kDepIDB(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx);
     153extern int kmk_builtin_kDepObj(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx);
    130154
    131155extern char *kmk_builtin_func_printf(char *o, char **argv, const char *funcname);
    132156
    133157/* common-env-and-cwd-opt.c: */
    134 extern int kBuiltinOptEnvSet(char ***ppapszEnv, unsigned *pcEnvVars, unsigned *pcAllocatedEnvVars,
     158extern int kBuiltinOptEnvSet(PKMKBUILTINCTX pCtx, char ***ppapszEnv, unsigned *pcEnvVars, unsigned *pcAllocatedEnvVars,
    135159                             int cVerbosity, const char *pszValue);
    136 extern int kBuiltinOptEnvAppend(char ***ppapszEnv, unsigned *pcEnvVars, unsigned *pcAllocatedEnvVars,
     160extern int kBuiltinOptEnvAppend(PKMKBUILTINCTX pCtx, char ***ppapszEnv, unsigned *pcEnvVars, unsigned *pcAllocatedEnvVars,
    137161                                int cVerbosity, const char *pszValue);
    138 extern int kBuiltinOptEnvPrepend(char ***ppapszEnv, unsigned *pcEnvVars, unsigned *pcAllocatedEnvVars,
     162extern int kBuiltinOptEnvPrepend(PKMKBUILTINCTX pCtx, char ***ppapszEnv, unsigned *pcEnvVars, unsigned *pcAllocatedEnvVars,
    139163                                 int cVerbosity, const char *pszValue);
    140 extern int kBuiltinOptEnvUnset(char ***ppapszEnv, unsigned *pcEnvVars, unsigned *pcAllocatedEnvVars, int cVerbosity, const char *pszVarToRemove);
    141 extern int kBuiltinOptEnvZap(char ***ppapszEnv, unsigned *pcEnvVars, unsigned *pcAllocatedEnvVars, int cVerbosity);
     164extern int kBuiltinOptEnvUnset(PKMKBUILTINCTX pCtx, char ***ppapszEnv, unsigned *pcEnvVars, unsigned *pcAllocatedEnvVars,
     165                               int cVerbosity, const char *pszVarToRemove);
     166extern int kBuiltinOptEnvZap(PKMKBUILTINCTX pCtx, char ***ppapszEnv, unsigned *pcEnvVars, unsigned *pcAllocatedEnvVars,
     167                             int cVerbosity);
    142168extern void kBuiltinOptEnvCleanup(char ***ppapszEnv, unsigned cEnvVars, unsigned *pcAllocatedEnvVars);
    143 extern int kBuiltinOptChDir(char *pszCwd, size_t cbCwdBuf, const char *pszValue);
     169extern int kBuiltinOptChDir(PKMKBUILTINCTX pCtx, char *pszCwd, size_t cbCwdBuf, const char *pszValue);
    144170
    145171#ifdef CONFIG_WITH_KMK_BUILTIN_STATS
Note: See TracChangeset for help on using the changeset viewer.