static int _set_rec(int *start, int argc, char **argv, List name_list, slurmdb_assoc_rec_t *assoc, slurmdb_cluster_rec_t *cluster) { int i; int rec_set = 0; int assoc_set = 0; int end = 0; int command_len = 0; int option = 0; for (i=(*start); i<argc; i++) { end = parse_option_end(argv[i]); if (!end) command_len=strlen(argv[i]); else { command_len=end-1; if (argv[i][end] == '=') { option = (int)argv[i][end-1]; end++; } } if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))) { i--; break; } else if (!end && !strncasecmp(argv[i], "set", MAX(command_len, 3))) { continue; } else if (!end || !strncasecmp(argv[i], "Names", MAX(command_len, 1)) || !strncasecmp(argv[i], "Clusters", MAX(command_len, 3))) { if (name_list) slurm_addto_char_list(name_list, argv[i]+end); } else if (!strncasecmp(argv[i], "Classification", MAX(command_len, 3))) { if (cluster) { cluster->classification = str_2_classification(argv[i]+end); if (cluster->classification) rec_set = 1; } } else if (!strncasecmp(argv[i], "Federation", MAX(command_len, 3))) { if (cluster) { cluster->fed.name = xstrdup(argv[i]+end); rec_set = 1; } } else if (!strncasecmp(argv[i], "FedState", MAX(command_len, 2))) { if (cluster) { cluster->fed.state = str_2_cluster_fed_states(argv[i]+end); if (!cluster->fed.state) { exit_code=1; fprintf(stderr, "Invalid FedState " "%s.\n", argv[i]+end); break; } rec_set = 1; } } else if (!strncasecmp(argv[i], "Weight", MAX(command_len, 2))) { if (cluster) { cluster->fed.weight = slurm_atoul(argv[i]+end); rec_set = 1; } } else if (!strncasecmp(argv[i], "GrpCPURunMins", MAX(command_len, 7)) || !strncasecmp(argv[i], "GrpTRESRunMins", MAX(command_len, 8))) { exit_code=1; fprintf(stderr, "GrpTRESRunMins is not a valid option " "for the root association of a cluster.\n"); break; } else if (!strncasecmp(argv[i], "GrpCPUMins", MAX(command_len, 7)) || !strncasecmp(argv[i], "GrpTRESMins", MAX(command_len, 8))) { exit_code=1; fprintf(stderr, "GrpTRESMins is not a valid option " "for the root association of a cluster.\n"); break; } else if (!strncasecmp(argv[i], "GrpWall", MAX(command_len, 4))) { exit_code=1; fprintf(stderr, "GrpWall is not a valid option " "for the root association of a cluster.\n"); } else if (!assoc || (assoc && !(assoc_set = sacctmgr_set_assoc_rec( assoc, argv[i], argv[i]+end, command_len, option)))) { exit_code=1; fprintf(stderr, " Unknown option: %s\n" " Use keyword 'where' to modify condition\n", argv[i]); } } (*start) = i; if (rec_set && assoc_set) return CLUS_REC_SET | CLUS_ASSOC_SET; else if (rec_set) return CLUS_REC_SET; else if (assoc_set) return CLUS_ASSOC_SET; return 0; }
static int _set_rec(int *start, int argc, char **argv, List acct_list, List cluster_list, slurmdb_account_rec_t *acct, slurmdb_assoc_rec_t *assoc) { int i; int u_set = 0; int a_set = 0; int end = 0; int command_len = 0; int option = 0; for (i=(*start); i<argc; i++) { end = parse_option_end(argv[i]); if (!end) command_len=strlen(argv[i]); else { command_len=end-1; if (argv[i][end] == '=') { option = (int)argv[i][end-1]; end++; } } if (!xstrncasecmp(argv[i], "Where", MAX(command_len, 5))) { i--; break; } else if (!end && !xstrncasecmp(argv[i], "set", MAX(command_len, 3))) { continue; } else if (!end || !xstrncasecmp(argv[i], "Accounts", MAX(command_len, 1)) || !xstrncasecmp(argv[i], "Names", MAX(command_len, 1)) || !xstrncasecmp(argv[i], "Acct", MAX(command_len, 4))) { if (acct_list) slurm_addto_char_list(acct_list, argv[i]+end); else { exit_code=1; fprintf(stderr, " Can't modify the name " "of an account\n"); } } else if (!xstrncasecmp(argv[i], "Clusters", MAX(command_len, 1))) { if (cluster_list) slurm_addto_char_list(cluster_list, argv[i]+end); else { exit_code=1; fprintf(stderr, " Can't modify the cluster " "of an account\n"); } } else if (!xstrncasecmp(argv[i], "Description", MAX(command_len, 1))) { acct->description = strip_quotes(argv[i]+end, NULL, 1); u_set = 1; } else if (!xstrncasecmp(argv[i], "Organization", MAX(command_len, 1))) { acct->organization = strip_quotes(argv[i]+end, NULL, 1); u_set = 1; } else if (!xstrncasecmp(argv[i], "RawUsage", MAX(command_len, 7))) { uint32_t usage; if (!assoc) continue; assoc->usage = xmalloc(sizeof(slurmdb_assoc_usage_t)); if (get_uint(argv[i]+end, &usage, "RawUsage") == SLURM_SUCCESS) { assoc->usage->usage_raw = usage; a_set = 1; } } else if (!assoc || (assoc && !(a_set = sacctmgr_set_assoc_rec( assoc, argv[i], argv[i]+end, command_len, option)))) { exit_code=1; fprintf(stderr, " Unknown option: %s\n" " Use keyword 'where' to modify condition\n", argv[i]); } } (*start) = i; if (u_set && a_set) return 3; else if (a_set) return 2; else if (u_set) return 1; return 0; }