Ignore:
Timestamp:
Sep 8, 2016, 3:27:56 PM (9 years ago)
Author:
bird
Message:

Included kDepObj in kWorker as a post execution option.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kWorker/kWorker.c

    r2892 r2894  
    5353#include "quote_argv.h"
    5454#include "md5.h"
     55
     56#include "../kmk/kmkbuiltin.h"
    5557
    5658
     
    68946896
    68956897/**
     6898 * Does the post command part of a job (optional).
     6899 *
     6900 * @returns The exit code of the job.
     6901 * @param   cPostCmdArgs        Number of post command arguments (includes cmd).
     6902 * @param   papszPostCmdArgs    The post command and its argument.
     6903 */
     6904static int kSubmitHandleJobPostCmd(KU32 cPostCmdArgs, const char **papszPostCmdArgs)
     6905{
     6906    const char *pszCmd = papszPostCmdArgs[0];
     6907
     6908    /* Allow the kmk builtin prefix. */
     6909    static const char s_szKmkBuiltinPrefix[] = "kmk_builtin_";
     6910    if (kHlpStrNComp(pszCmd, s_szKmkBuiltinPrefix, sizeof(s_szKmkBuiltinPrefix) - 1) == 0)
     6911        pszCmd += sizeof(s_szKmkBuiltinPrefix) - 1;
     6912
     6913    /* Command switch. */
     6914    if (kHlpStrComp(pszCmd, "kDepObj") == 0)
     6915        return kmk_builtin_kDepObj(cPostCmdArgs, (char **)papszPostCmdArgs, NULL);
     6916
     6917    return kwErrPrintfRc(42 + 5 , "Unknown post command: '%s'\n", pszCmd);
     6918}
     6919
     6920
     6921/**
    68966922 * Part 2 of the "JOB" command handler.
    68976923 *
    68986924 * @returns The exit code of the job.
    6899  * @param   pszExecutable   The executable to execute.
    6900  * @param   pszCwd          The current working directory of the job.
    6901  * @param   cArgs           The number of arguments.
    6902  * @param   papszArgs       The argument vector.
     6925 * @param   pszExecutable       The executable to execute.
     6926 * @param   pszCwd              The current working directory of the job.
     6927 * @param   cArgs               The number of arguments.
     6928 * @param   papszArgs           The argument vector.
    69036929 * @param   fWatcomBrainDamange Whether to apply watcom rules while quoting.
    6904  * @param   cEnvVars        The number of environment variables.
    6905  * @param   papszEnvVars    The enviornment vector.
     6930 * @param   cEnvVars            The number of environment variables.
     6931 * @param   papszEnvVars        The enviornment vector.
     6932 * @param   cPostCmdArgs        Number of post command arguments (includes cmd).
     6933 * @param   papszPostCmdArgs    The post command and its argument.
    69066934 */
    69076935static int kSubmitHandleJobUnpacked(const char *pszExecutable, const char *pszCwd,
    69086936                                    KU32 cArgs, const char **papszArgs, KBOOL fWatcomBrainDamange,
    6909                                     KU32 cEnvVars, const char **papszEnvVars)
     6937                                    KU32 cEnvVars, const char **papszEnvVars,
     6938                                    KU32 cPostCmdArgs, const char **papszPostCmdArgs)
    69106939{
    69116940    int rcExit;
     
    69727001                break;
    69737002        }
     7003
     7004        /*
     7005         * Do the post command, if present.
     7006         */
     7007        if (cPostCmdArgs && rcExit == 0)
     7008            rcExit = kSubmitHandleJobPostCmd(cPostCmdArgs, papszPostCmdArgs);
    69747009    }
    69757010    else
     
    70637098                            if (papszEnvVars)
    70647099                            {
    7065                                 KU32 i;
    70667100                                for (i = 0; i < cEnvVars; i++)
    70677101                                {
     
    70787112                                }
    70797113                                papszEnvVars[cEnvVars] = 0;
     7114
     7115                                /* Flags (currently just watcom argument brain damanage). */
    70807116                                if (cbMsg >= sizeof(KU8))
    70817117                                {
    70827118                                    KBOOL fWatcomBrainDamange = *pszMsg++;
    70837119                                    cbMsg--;
    7084                                     if (cbMsg == 0)
     7120
     7121                                    /* Post command argument count (can be zero). */
     7122                                    if (cbMsg >= sizeof(KU32))
    70857123                                    {
    7086                                         /*
    7087                                          * The next step.
    7088                                          */
    7089                                         rcExit = kSubmitHandleJobUnpacked(pszExecutable, pszCwd,
    7090                                                                           cArgs, papszArgs, fWatcomBrainDamange,
    7091                                                                           cEnvVars, papszEnvVars);
     7124                                        KU32 cPostCmdArgs;
     7125                                        kHlpMemCopy(&cPostCmdArgs, pszMsg, sizeof(cPostCmdArgs));
     7126                                        pszMsg += sizeof(cPostCmdArgs);
     7127                                        cbMsg  -= sizeof(cPostCmdArgs);
     7128
     7129                                        if (cPostCmdArgs >= 0 && cPostCmdArgs < 32)
     7130                                        {
     7131                                            char const *apszPostCmdArgs[32+1];
     7132                                            for (i = 0; i < cPostCmdArgs; i++)
     7133                                            {
     7134                                                apszPostCmdArgs[i] = pszMsg;
     7135                                                cbTmp = kHlpStrLen(pszMsg) + 1;
     7136                                                pszMsg += cbTmp;
     7137                                                if (   cbTmp < cbMsg
     7138                                                    || (cbTmp == cbMsg && i + 1 == cPostCmdArgs))
     7139                                                    cbMsg -= cbTmp;
     7140                                                else
     7141                                                {
     7142                                                    cbMsg = KSIZE_MAX;
     7143                                                    break;
     7144                                                }
     7145                                            }
     7146                                            if (cbMsg == 0)
     7147                                            {
     7148                                                apszPostCmdArgs[cPostCmdArgs] = NULL;
     7149
     7150                                                /*
     7151                                                 * The next step.
     7152                                                 */
     7153                                                rcExit = kSubmitHandleJobUnpacked(pszExecutable, pszCwd,
     7154                                                                                  cArgs, papszArgs, fWatcomBrainDamange,
     7155                                                                                  cEnvVars, papszEnvVars,
     7156                                                                                  cPostCmdArgs, apszPostCmdArgs);
     7157                                            }
     7158                                            else if (cbMsg == KSIZE_MAX)
     7159                                                kwErrPrintf("Detected bogus message unpacking post command and its arguments!\n");
     7160                                            else
     7161                                                kwErrPrintf("Message has %u bytes unknown trailing bytes\n", cbMsg);
     7162                                        }
     7163                                        else
     7164                                            kwErrPrintf("Bogus post command argument count: %u %#x\n", cPostCmdArgs, cPostCmdArgs);
    70927165                                    }
    70937166                                    else
    7094                                         kwErrPrintf("Message has %u bytes unknown trailing bytes\n", cbMsg);
     7167                                        kwErrPrintf("Detected bogus message looking for the post command argument count!\n");
    70957168                                }
    70967169                                else
     
    72817354        rcExit = kSubmitHandleJobUnpacked(argv[i], pszCwd,
    72827355                                          argc - i, &argv[i], fWatcomBrainDamange,
    7283                                           cEnvVars, environ);
     7356                                          cEnvVars, environ,
     7357                                          0, NULL);
    72847358        KW_LOG(("rcExit=%d\n", rcExit));
    72857359        kwSandboxCleanupLate(&g_Sandbox);
Note: See TracChangeset for help on using the changeset viewer.