File: jobsp.h

package info (click to toggle)
fis-gtm 7.1-006-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 32,908 kB
  • sloc: ansic: 344,906; asm: 5,184; csh: 4,859; sh: 2,000; awk: 294; makefile: 73; sed: 13
file content (165 lines) | stat: -rwxr-xr-x 5,042 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
/****************************************************************
 *								*
 * Copyright (c) 2001-2023 Fidelity National Information	*
 * Services, Inc. and/or its subsidiaries. All rights reserved.	*
 *								*
 *	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.	*
 *								*
 ****************************************************************/

#ifndef JOBSP_H_INCLUDED
#define JOBSP_H_INCLUDED

#include "gtm_stdio.h"

#define MAX_JOBPAR_LEN		255
#define MAX_FILSPC_LEN		255
#define MAX_PIDSTR_LEN		10
#define MAX_MBXNAM_LEN		16
#define MAX_PRCNAM_LEN		15
#define MAX_STDIOE_LEN		1024
#define MAX_JOBPARM_LEN		1024
#define MAX_JOB_LEN		8192	/* The length of the buffer used for storing each argument of the job command */

#define TIMEOUT_ERROR		(MAX_SYSERR + 1)	/* a special value to differentiate it from the rest of errno's */

#define CHILD_FLAG_ENV		"gtmj0"
#define CLEAR_CHILD_FLAG_ENV  	"gtmj0="""
#define GBLDIR_ENV		"gtmgbldir"

#define JOB_SOCKET_PREFIX		"SOCKET:"
#define IS_JOB_SOCKET(ADDR, LEN)	((LEN >= SIZEOF(JOB_SOCKET_PREFIX)) && (0 == STRNCMP_LIT(ADDR, JOB_SOCKET_PREFIX)))
#define JOB_SOCKET_HANDLE(ADDR)		(((char *)(ADDR)) + SIZEOF(JOB_SOCKET_PREFIX) - 1)
#define JOB_SOCKET_HANDLE_LEN(LEN)	(LEN - SIZEOF(JOB_SOCKET_PREFIX) + 1)

GBLREF int job_errno;

/********************************************************************************************************************
 * Following enum is used to identify the cause of error in the middle process (M) to the main thread (P)
 * during the startup of a Job. (passed to the parent (P) through the exit status).
 * The last two enums are special. They MUST be the last two for any new additions in the future.
 * The last one identifies the end of the enum list. Last but one (joberr_tryagain) is used to identify
 * the situations where trying again by the main thread might succeed (like errors due to insufficient
 * swap space etc..). When the middle process comes across an error that it thinks is worth trying again,
 * it adds joberr_tryagain to the main status (one of the status' upto joberr_tryagain) and exits with the new status.
 *
 * Additions to this enum must match the joberrs array in joberr.h.
 *********************************************************************************************************************/

typedef enum
{	joberr_ok,
	joberr_gen,
	joberr_io_stdin_open,
	joberr_io_stdin_dup,
	joberr_io_stdout_creat,
	joberr_io_stdout_open,
	joberr_io_stdout_dup,
	joberr_io_stderr_creat,
	joberr_io_stderr_open,
	joberr_io_stderr_dup,
	joberr_cd_toolong,
	joberr_cd,
	joberr_rtn,
	joberr_sid,
	joberr_sp,
	joberr_frk,
	joberr_stdout_rename,
	joberr_stderr_rename,
	joberr_pipe_mp,
	joberr_pipe_mgc,
	joberr_stdin_socket_lookup,
	joberr_stdout_socket_lookup,
	joberr_stderr_socket_lookup,
	joberr_io_stdin_socket_dup,
	joberr_io_stdout_socket_dup,
	joberr_io_stderr_socket_dup,
	joberr_io_setup_op_write,
	joberr_io_setup_write,
	joberr_sig,
	joberr_stp,			/* These two should stay at the end of the enum. */
	joberr_end
} joberr_t;

typedef struct job_parm_struct
{
	mval			*parm;
	struct job_parm_struct	*next;
} job_parm;

typedef struct job_param_str_struct
{
	size_t		len;
	char		buffer[MAX_JOBPARM_LEN];
} job_param_str;

struct job_params_struct
{
	job_param_str	directory;
	job_param_str	gbldir;
	job_param_str	startup;
	job_param_str	input;
	job_param_str	output;
	job_param_str	error;
	job_param_str	routine;
	job_param_str	label;
	int		offset;
	int		baspri;
};

typedef	struct
{
	struct job_params_struct	params;
	job_param_str			cmdline;
	job_parm			*parms;
	size_t				input_prebuffer_size;
	char				*input_prebuffer;
	boolean_t			xfercurlvn;
	char				*curlvn_buffer_ptr;
	size_t				curlvn_buffer_size;
} job_params_type;

typedef enum
{
	jpdt_nul,
	jpdt_num,
	jpdt_str
} jp_datatype;

#define JPDEF(a,b) a
typedef enum
{
#include "jobparams.h"
} jp_type;

typedef enum
{
	job_done,			/* last message */
	job_set_params,			/* followed by a job_params_msg message */
	job_set_parm_list,		/* followed by a job_arg_count_msg and "arg_count" job_arg_msg messages */
	job_set_input_buffer,		/* followed by a job_buffer_size_msg and a data message of "buffer_size" */
	job_set_locals,			/* followed by local_variable */
	local_trans_done		/* Indicates all of the locals have been sent to the grandchild */
} job_setup_op;

typedef struct job_params_struct	job_params_msg;
typedef size_t				job_arg_count_msg;

typedef struct
{
	ssize_t			len;				/* negative len indicates null arg */
	char			data[MAX_JOB_LEN];
} job_arg_msg;

typedef size_t job_buffer_size_msg;

int ojchildioset(job_params_type *jparms);
int ojstartchild(job_params_type *jparms, int argcnt, boolean_t *non_exit_return, int pipe_fds[]);
void ojparams(char *p, job_params_type *job_params);
void ojchildioclean(void);
void ojpassvar_hook(void);
void local_variable_marshalling(FILE *output);

#endif