208 lines
5.6 KiB
C
208 lines
5.6 KiB
C
|
/****************************************************************
|
||
|
* *
|
||
|
* Copyright 2001, 2011 Fidelity Information Services, Inc *
|
||
|
* *
|
||
|
* This source code contains the intellectual property *
|
||
|
* of its copyright holder(s), and is made available *
|
||
|
* under a license. If you do not know the terms of *
|
||
|
* the license, please stop and do not read further. *
|
||
|
* *
|
||
|
****************************************************************/
|
||
|
|
||
|
/*
|
||
|
* ---------------------------------------------------------
|
||
|
* Parse job parameters
|
||
|
* ---------------------------------------------------------
|
||
|
*/
|
||
|
#include "mdef.h"
|
||
|
|
||
|
#include "gtm_string.h"
|
||
|
#include "gtm_stdlib.h"
|
||
|
#include "job.h"
|
||
|
#include "compiler.h"
|
||
|
#include "gcall.h"
|
||
|
#include "stringpool.h"
|
||
|
#include "op.h" /* for op_nullexp() */
|
||
|
|
||
|
GBLREF spdesc stringpool;
|
||
|
|
||
|
/*
|
||
|
* ------------------------------------------------
|
||
|
* Get parameters from environment variables into
|
||
|
* parameter structure
|
||
|
* ------------------------------------------------
|
||
|
*/
|
||
|
void ojchildparms(job_params_type *jparms, gcall_args *g_args, mval *arglst)
|
||
|
{
|
||
|
char *sp, *parmbuf;
|
||
|
char parm_string[8];
|
||
|
int4 argcnt, i;
|
||
|
|
||
|
error_def(ERR_STRINGOFLOW);
|
||
|
|
||
|
/* getenv() may use static buffer so for any parms we fetch a value for, rebuffer them so they
|
||
|
don't go away. We use malloc'd space because the stringpool garbage collector does not know
|
||
|
about these private (to this routine) structures and we can't use "temp stringpool space" as
|
||
|
is used in other modules since we will be putting the parms in the stringpool below. The
|
||
|
storage allocated here will be released in jobchild_init() when it is done with it.
|
||
|
*/
|
||
|
if (jparms->directory.addr = GETENV(CWD_ENV))
|
||
|
{
|
||
|
jparms->directory.len = STRLEN(jparms->directory.addr);
|
||
|
if (0 != jparms->directory.len)
|
||
|
{
|
||
|
parmbuf = malloc(jparms->directory.len+1);
|
||
|
memcpy(parmbuf, jparms->directory.addr, jparms->directory.len+1);
|
||
|
jparms->directory.addr = parmbuf;
|
||
|
}
|
||
|
} else
|
||
|
jparms->directory.len = 0;
|
||
|
|
||
|
if (jparms->gbldir.addr = GETENV(GBLDIR_ENV))
|
||
|
{
|
||
|
jparms->gbldir.len = STRLEN(jparms->gbldir.addr);
|
||
|
if (0 != jparms->gbldir.len)
|
||
|
{
|
||
|
parmbuf = malloc(jparms->gbldir.len+1);
|
||
|
memcpy(parmbuf, jparms->gbldir.addr, jparms->gbldir.len+1);
|
||
|
jparms->gbldir.addr = parmbuf;
|
||
|
}
|
||
|
} else
|
||
|
jparms->gbldir.len = 0;
|
||
|
|
||
|
if (jparms->startup.addr = GETENV(STARTUP_ENV))
|
||
|
{
|
||
|
jparms->startup.len = STRLEN(jparms->startup.addr);
|
||
|
if (0 != jparms->startup.len)
|
||
|
{
|
||
|
parmbuf = malloc(jparms->startup.len+1);
|
||
|
memcpy(parmbuf, jparms->startup.addr, jparms->startup.len+1);
|
||
|
jparms->startup.addr = parmbuf;
|
||
|
}
|
||
|
} else
|
||
|
jparms->startup.len = 0;
|
||
|
|
||
|
if (jparms->input.addr = GETENV(IN_FILE_ENV))
|
||
|
{
|
||
|
jparms->input.len = STRLEN(jparms->input.addr);
|
||
|
if (0 != jparms->input.len)
|
||
|
{
|
||
|
parmbuf = malloc(jparms->input.len+1);
|
||
|
memcpy(parmbuf, jparms->input.addr, jparms->input.len+1);
|
||
|
jparms->input.addr = parmbuf;
|
||
|
}
|
||
|
} else
|
||
|
jparms->input.len = 0;
|
||
|
|
||
|
if (jparms->output.addr = GETENV(OUT_FILE_ENV))
|
||
|
{
|
||
|
jparms->output.len = STRLEN(jparms->output.addr);
|
||
|
if (0 != jparms->output.len)
|
||
|
{
|
||
|
parmbuf = malloc(jparms->output.len+1);
|
||
|
memcpy(parmbuf, jparms->output.addr, jparms->output.len+1);
|
||
|
jparms->output.addr = parmbuf;
|
||
|
}
|
||
|
} else
|
||
|
jparms->output.len = 0;
|
||
|
|
||
|
if (jparms->error.addr = GETENV(ERR_FILE_ENV))
|
||
|
{
|
||
|
jparms->error.len = STRLEN(jparms->error.addr);
|
||
|
if (0 != jparms->error.len)
|
||
|
{
|
||
|
parmbuf = malloc(jparms->error.len+1);
|
||
|
memcpy(parmbuf, jparms->error.addr, jparms->error.len+1);
|
||
|
jparms->error.addr = parmbuf;
|
||
|
}
|
||
|
} else
|
||
|
jparms->error.len = 0;
|
||
|
|
||
|
if (jparms->routine.addr = GETENV(ROUTINE_ENV))
|
||
|
{
|
||
|
jparms->routine.len = STRLEN(jparms->routine.addr);
|
||
|
if (0 != jparms->routine.len)
|
||
|
{
|
||
|
parmbuf = malloc(jparms->routine.len+1);
|
||
|
memcpy(parmbuf, jparms->routine.addr, jparms->routine.len+1);
|
||
|
jparms->routine.addr = parmbuf;
|
||
|
}
|
||
|
} else
|
||
|
jparms->routine.len = 0;
|
||
|
|
||
|
if (jparms->label.addr = GETENV(LABEL_ENV))
|
||
|
{
|
||
|
jparms->label.len = STRLEN(jparms->label.addr);
|
||
|
if (0 != jparms->label.len)
|
||
|
{
|
||
|
parmbuf = malloc(jparms->label.len+1);
|
||
|
memcpy(parmbuf, jparms->label.addr, jparms->label.len+1);
|
||
|
jparms->label.addr = parmbuf;
|
||
|
}
|
||
|
} else
|
||
|
jparms->label.len = 0;
|
||
|
|
||
|
if (jparms->logfile.addr = GETENV(LOG_FILE_ENV))
|
||
|
{
|
||
|
jparms->logfile.len = STRLEN(jparms->logfile.addr);
|
||
|
if (0 != jparms->logfile.len)
|
||
|
{
|
||
|
parmbuf = malloc(jparms->logfile.len+1);
|
||
|
memcpy(parmbuf, jparms->logfile.addr, jparms->logfile.len+1);
|
||
|
jparms->logfile.addr = parmbuf;
|
||
|
}
|
||
|
} else
|
||
|
jparms->logfile.len = 0;
|
||
|
|
||
|
if (sp = GETENV(OFFSET_ENV))
|
||
|
jparms->offset = (int)(ATOL(sp));
|
||
|
else
|
||
|
jparms->offset = 0;
|
||
|
|
||
|
if (sp = GETENV(PRIORITY_ENV))
|
||
|
jparms->baspri = (int)(ATOL(sp));
|
||
|
else
|
||
|
jparms->baspri = 0;
|
||
|
|
||
|
if (!(sp = GETENV(GTMJCNT_ENV)))
|
||
|
GTMASSERT;
|
||
|
|
||
|
if (argcnt = (int)(ATOL(sp)))
|
||
|
{
|
||
|
ENSURE_STP_FREE_SPACE(argcnt * MAX_TRANS_NAME_LEN);
|
||
|
g_args->callargs = argcnt + 4;
|
||
|
g_args->truth = 1;
|
||
|
g_args->retval = 0;
|
||
|
g_args->mask = 0;
|
||
|
g_args->argcnt = argcnt;
|
||
|
memcpy(parm_string,"gtmj000",8);
|
||
|
for (i = 0; i < argcnt; i++)
|
||
|
{
|
||
|
if (sp = GETENV(parm_string))
|
||
|
{
|
||
|
if (!IS_STP_SPACE_AVAILABLE_PRO(STRLEN(sp)))
|
||
|
rts_error(VARLSTCNT(1) (ERR_STRINGOFLOW));
|
||
|
arglst[i].str.len = STRLEN(sp);
|
||
|
arglst[i].str.addr = (char *)stringpool.free;
|
||
|
memcpy(stringpool.free, sp, arglst[i].str.len);
|
||
|
stringpool.free += arglst[i].str.len;
|
||
|
arglst[i].mvtype = MV_STR;
|
||
|
} else
|
||
|
op_nullexp(&arglst[i]);
|
||
|
g_args->argval[i] = &arglst[i];
|
||
|
if (parm_string[6] == '9')
|
||
|
{
|
||
|
if (parm_string[5] == '9')
|
||
|
{
|
||
|
parm_string[4] = parm_string[4] + 1;
|
||
|
parm_string[5] = '0';
|
||
|
} else
|
||
|
parm_string[5] = parm_string[5] + 1;
|
||
|
parm_string[6] = '0';
|
||
|
} else
|
||
|
parm_string[6] = parm_string[6] + 1;
|
||
|
}
|
||
|
} else
|
||
|
g_args->callargs = 0;
|
||
|
}
|