/* * _parse_state - convert job state name string to numeric value * IN str - state name * OUT states - enum job_states value corresponding to str * RET 0 or error code */ static int _parse_state( char* str, uint16_t* states ) { int i; char *state_names; if ((i = job_state_num(str)) >= 0) { *states = (uint16_t) i; return SLURM_SUCCESS; } error ("Invalid job state specified: %s", str); state_names = xstrdup(job_state_string(0)); for (i=1; i<JOB_END; i++) { xstrcat(state_names, ","); xstrcat(state_names, job_state_string(i)); } xstrcat(state_names, ","); xstrcat(state_names, job_state_string(JOB_COMPLETING)); xstrcat(state_names, ","); xstrcat(state_names, job_state_string(JOB_CONFIGURING)); error ("Valid job states include: %s\n", state_names); xfree (state_names); return SLURM_ERROR; }
static uint32_t _xlate_state_name(const char *state_name, bool env_var) { uint32_t i = job_state_num(state_name); if (i >= 0) return i; if (env_var) { fprintf(stderr, "Unrecognized SCANCEL_STATE value: %s\n", state_name); } else { fprintf(stderr, "Invalid job state specified: %s\n", state_name); } fprintf(stderr, "Valid job states are PENDING, RUNNING, and SUSPENDED\n"); exit (1); }
/* returns number of objects added to list */ static int _addto_state_char_list(List char_list, char *names) { int i=0, start=0, c; char *name = NULL, *tmp_char = NULL; ListIterator itr = NULL; char quote_c = '\0'; int quote = 0; int count = 0; if(!char_list) { error("No list was given to fill in"); return 0; } itr = list_iterator_create(char_list); if(names) { if (names[i] == '\"' || names[i] == '\'') { quote_c = names[i]; quote = 1; i++; } start = i; while(names[i]) { //info("got %d - %d = %d", i, start, i-start); if(quote && names[i] == quote_c) break; else if (names[i] == '\"' || names[i] == '\'') names[i] = '`'; else if(names[i] == ',') { if((i-start) > 0) { name = xmalloc((i-start+1)); memcpy(name, names+start, (i-start)); c = job_state_num(name); if (c == -1) fatal("unrecognized job " "state value"); xfree(name); name = xstrdup_printf("%d", c); while((tmp_char = list_next(itr))) { if(!strcasecmp(tmp_char, name)) break; } if(!tmp_char) { list_append(char_list, name); count++; } else xfree(name); list_iterator_reset(itr); } i++; start = i; if(!names[i]) { info("There is a problem with " "your request. It appears you " "have spaces inside your list."); break; } } i++; } if((i-start) > 0) { name = xmalloc((i-start)+1); memcpy(name, names+start, (i-start)); c = job_state_num(name); if (c == -1) fatal("unrecognized job state value"); xfree(name); name = xstrdup_printf("%d", c); while((tmp_char = list_next(itr))) { if(!strcasecmp(tmp_char, name)) break; } if(!tmp_char) { list_append(char_list, name); count++; } else xfree(name); } } list_iterator_destroy(itr); return count; }