예제 #1
0
int encode_data(char *data, int *bytes_left, instruction *instr) {
	int bytes_written = 0;
	argument *arg;

	for (
		arg = instr->args;
		(*bytes_left > 0) && (arg != NULL);
		arg = arg->next
	) {
		int count = encode_argument(data, bytes_left, arg);
		bytes_written += count;
		data += count;
	}

	return bytes_written;
}
예제 #2
0
int encode_instruction(char *data, int *bytes_left, instruction *instr) {
	int bytes_written = 0;
	argument *arg;

	if (Is_Meta) {
		return Meta->encode(data, bytes_left, instr);
	}

	if (*bytes_left > 0) {
		put_byte(Opcode);

		for (
			arg = instr->args;
			(*bytes_left > 0) && (arg != NULL);
			arg = arg->next
		) {
			int count = encode_argument(data, bytes_left, arg);
			bytes_written += count;
			data += count;
		}
	}

	return bytes_written;
}
예제 #3
0
/**
 * @brief
 *	encode_xml_arg_list takes current index, number of arguments
 *      passed to 'qsub' program and arguments as input and returns
 *      an encoded string(XML form) to 'qsub' program. It loops through each
 *      argument and converts that into an equivalent encoded string using
 *      ('encode_argument' function). For eg, if a1, a2 are the arguments,
 *      then it returns following encoded XML string to 'qsub' program.
 *      encoded string   --  <jsdl-hpcpa:Argument>a1</jsdl-hpcpa:Argument>
 *                           <jsdl-hpcpa:Argument>a2</jsdl-hpcpa:Argument>
 *
 * @param[in]   optind - current index
 * @param[in]   argc - number of arguments passed to 'qsub' program
 * @param[in]   argv - arguments as input
 *
 * @return char*
 * @retval An encoded string(XML form) to 'qsub' program in case of SUCCESS
 * @retval NULL in case of failure
 */
extern char* encode_xml_arg_list(int optind, int argc, char **argv)
{
	char	*xml_string = NULL;
	int	cur_len = 1;
	int	j;
	char	*arg = NULL;
	int	jsdl_tag_len;
	char	*temp;
	int	first = 1;
	char	*escape_chars[PBS_NUM_ESC_CHARS];
	long	arg_max = -1;


	jsdl_tag_len = sizeof(START_JSDL_ARG) + sizeof(END_JSDL_ARG) - 2;
	if (argc > 0 && argv == NULL)
		return NULL;
	/*
	 * Initialize escape chars array and max number of
	 * chars an argument can hold.
	 */

	init_escapechars_maxarg(escape_chars, &arg_max);

	/* Allocate memory to hold encoded argument */
	arg = malloc(arg_max * sizeof(char *));
	if (arg == NULL)
		return NULL;

	for (j = optind; j < argc; j++) {
		if (argv[j] == NULL) {
			if (xml_string)
				free(xml_string);
			break;
		}
		cur_len += strlen(argv[j]) + jsdl_tag_len;
		temp = realloc(xml_string, cur_len);
		if (temp == NULL) {
			if (xml_string)
				free(xml_string);
			free(arg);
			return NULL;
		} else
			xml_string = temp;
		if (first) {
			strcpy(xml_string, START_JSDL_ARG);
			first = 0;
		} else
			strcat(xml_string, START_JSDL_ARG);

		cur_len += encode_argument(argv[j], arg, escape_chars);
		temp = realloc(xml_string, cur_len);
		if (temp == NULL) {
			free(xml_string);
			free(arg);
			return NULL;
		} else
			xml_string = temp;

		strcat(xml_string, arg);
		strcat(xml_string, END_JSDL_ARG);
		arg[0] = '\0';
	}
	free(arg);
	return xml_string;
}