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; }
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; }
/** * @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; }