int main( int argc, char **argv) /* qmsg */ { int c; int to_file; int errflg = 0; int any_failed = 0; char job_id[PBS_MAXCLTJOBID]; /* from the command line */ char job_id_out[PBS_MAXCLTJOBID]; char server_out[MAXSERVERNAME] = ""; char rmt_server[MAXSERVERNAME]; #define MAX_MSG_STRING_LEN 256 char msg_string[MAX_MSG_STRING_LEN+1]; #define GETOPT_ARGS "EO" msg_string[0] = '\0'; to_file = 0; while ((c = getopt(argc, argv, GETOPT_ARGS)) != EOF) switch (c) { case 'E': to_file |= MSG_ERR; break; case 'O': to_file |= MSG_OUT; break; default : errflg++; } if (to_file == 0) to_file = MSG_ERR; /* default */ if (errflg || ((optind + 1) >= argc)) { static char usage[] = "usage: qmsg [-O] [-E] msg_string job_identifier...\n"; fprintf(stderr,"%s", usage); exit(2); } snprintf(msg_string, sizeof(msg_string), "%s", argv[optind]); for (optind++; optind < argc; optind++) { int connect; int stat = 0; int located = FALSE; std::string server_name; std::vector<std::string> id_list; snprintf(job_id, sizeof(job_id), "%s", argv[optind]); if (get_server_and_job_ids(job_id, id_list, server_name)) { fprintf(stderr, "qmsg: illegally formed job identifier: %s\n", job_id); any_failed = 1; continue; } snprintf(server_out, sizeof(server_out), "%s", server_name.c_str()); cnt: connect = cnt2server(server_out, false); if (connect <= 0) { any_failed = -1 * connect; if (server_out[0] != 0) fprintf(stderr, "qmsg: cannot connect to server %s (errno=%d) %s\n", server_out, any_failed, pbs_strerror(any_failed)); else fprintf(stderr, "qmsg: cannot connect to server %s (errno=%d) %s\n", pbs_server, any_failed, pbs_strerror(any_failed)); continue; } for (size_t i = 0; i < id_list.size(); i++) { snprintf(job_id_out, sizeof(job_id_out), "%s", id_list[i].c_str()); stat = pbs_msgjob_err(connect, job_id_out, to_file, msg_string, NULL, &any_failed); if (any_failed != PBSE_UNKJOBID) break; } if (stat && (any_failed != PBSE_UNKJOBID)) { prt_job_err("qmsg", connect, job_id_out); } else if (stat && (any_failed == PBSE_UNKJOBID) && !located) { located = TRUE; if (locate_job(job_id_out, server_out, rmt_server)) { pbs_disconnect(connect); strcpy(server_out, rmt_server); goto cnt; } prt_job_err("qmsg", connect, job_id_out); } pbs_disconnect(connect); } exit(any_failed); }
int main( int argc, /* I */ char **argv) /* I */ { int c; int errflg = 0; int any_failed = 0; int u_cnt, o_cnt, s_cnt; char *pc; char job_id[PBS_MAXCLTJOBID]; /* from the command line */ char job_id_out[PBS_MAXCLTJOBID]; char server_out[MAXSERVERNAME] = ""; char rmt_server[MAXSERVERNAME]; char extend[MAXPATHLEN]; #define MAX_HOLD_TYPE_LEN 32 char hold_type[MAX_HOLD_TYPE_LEN+1]; #define GETOPT_ARGS "h:t:" hold_type[0] = '\0'; while ((c = getopt(argc, argv, GETOPT_ARGS)) != EOF) { switch (c) { case 'h': while (isspace((int)*optarg)) optarg++; if (strlen(optarg) == 0) { fprintf(stderr, "qrls: illegal -h value\n"); errflg++; break; } pc = optarg; u_cnt = o_cnt = s_cnt = 0; while (*pc) { if (*pc == 'u') u_cnt++; else if (*pc == 'o') o_cnt++; else if (*pc == 's') s_cnt++; else { fprintf(stderr, "qrls: illegal -h value\n"); errflg++; break; } pc++; } strcpy(hold_type, optarg); break; case 't': pc = optarg; if (strlen(pc) == 0) { fprintf(stderr, "qrls: illegal -t value (array range cannot be zero length)\n"); errflg++; break; } snprintf(extend,sizeof(extend),"%s%s", ARRAY_RANGE, pc); break; default: errflg++; break; } } if (errflg || optind >= argc) { static char usage[] = "usage: qrls [-h {uos}] [-t array_range] job_identifier...\n"; fprintf(stderr,"%s", usage); exit(2); } for (; optind < argc; optind++) { int connect; int stat = 0; int located = FALSE; std::string server_name; std::vector<std::string> id_list; snprintf(job_id, sizeof(job_id), "%s", argv[optind]); if (get_server_and_job_ids(job_id, id_list, server_name)) { fprintf(stderr, "qrls: illegally formed job identifier: %s\n", job_id); any_failed = 1; continue; } snprintf(server_out, sizeof(server_out), "%s", server_name.c_str()); cnt: connect = cnt2server(server_out); if (connect <= 0) { any_failed = -1 * connect; if (server_out[0] != 0) fprintf(stderr, "qrls: cannot connect to server %s (errno=%d) %s\n", server_out, any_failed, pbs_strerror(any_failed)); else fprintf(stderr, "qrls: cannot connect to server %s (errno=%d) %s\n", pbs_server, any_failed, pbs_strerror(any_failed)); continue; } for (size_t i = 0; i < id_list.size(); i++) { snprintf(job_id_out, sizeof(job_id_out), "%s", id_list[i].c_str()); stat = pbs_rlsjob_err(connect, job_id_out, hold_type, extend, &any_failed); if (any_failed != PBSE_UNKJOBID) break; } if (stat && (any_failed != PBSE_UNKJOBID)) { if (!located) { located = TRUE; if (locate_job(job_id_out, server_out, rmt_server)) { pbs_disconnect(connect); strcpy(server_out, rmt_server); goto cnt; } } prt_job_err("qrls", connect, job_id_out); } pbs_disconnect(connect); } /* END for () */ exit(any_failed); /*NOTREACHED*/ return(0); } /* END main() */