Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP1:GA
at.5531
at-3.1.14-joblist.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File at-3.1.14-joblist.patch of Package at.5531
Index: at.c =================================================================== --- at.c.orig +++ at.c @@ -132,11 +132,13 @@ char atverify = 0; /* verify time inste static void sigc(int signo); static void alarmc(int signo); static char *cwdname(void); static void writefile(time_t runtimer, char queue); -static void list_jobs(void); +static void list_jobs(long *, int); +static int in_job_list(long, long *, int); +static long *get_job_list(int, char *[], int *); /* Signal catching functions */ static RETSIGTYPE sigc(int signo) @@ -545,12 +547,24 @@ writefile(time_t runtimer, char queue) break; } return; } +static int +in_job_list(long job, long *joblist, int len) +{ + int i; + + for (i = 0; i < len; i++) + if (job == joblist[i]) + return 1; + + return 0; +} + static void -list_jobs(void) +list_jobs(long *joblist, int len) { /* List all a user's jobs in the queue, by looping through ATJOB_DIR, * or everybody's if we are root */ DIR *spool; @@ -585,10 +599,14 @@ list_jobs(void) continue; if (sscanf(dirent->d_name, "%c%5lx%8lx", &queue, &jobno, &ctm) != 3) continue; + /* If jobs are given, only list those jobs */ + if (joblist && !in_job_list(jobno, joblist, len)) + continue; + if (atqueue && (queue != atqueue)) continue; runtimer = 60 * (time_t) ctm; runtime = localtime(&runtimer); @@ -706,10 +724,33 @@ process_jobs(int argc, char **argv, int } } return rc; } /* delete_jobs */ +static long * +get_job_list(int argc, char *argv[], int *joblen) +{ + int i, len; + long *joblist; + char *ep; + + joblist = NULL; + len = argc; + if (len > 0) { + joblist = (long *) mymalloc(len * sizeof(*joblist)); + for (i = 0; i < argc; i++) { + errno = 0; + if ((joblist[i] = strtol(argv[i], &ep, 10)) < 0 || + ep == argv[i] || *ep != '\0' || errno) + panic("invalid job number"); + } + } + + *joblen = len; + return joblist; +} + /* Global functions */ void * mymalloc(size_t n) { @@ -731,10 +772,12 @@ main(int argc, char **argv) int program = AT; /* our default program */ char *options = "q:f:MmvlrdhVct:"; /* default options for at */ int disp_version = 0; time_t timer = 0; + long *joblist = NULL; + int joblen = 0; struct passwd *pwe; struct group *ge; RELINQUISH_PRIVS @@ -868,12 +911,13 @@ main(int argc, char **argv) switch (program) { int i; case ATQ: REDUCE_PRIV(daemon_uid, daemon_gid) - - list_jobs(); + if (queue_set == 0) + joblist = get_job_list(argc - optind, argv + optind, &joblen); + list_jobs(joblist, joblen); break; case ATRM: REDUCE_PRIV(daemon_uid, daemon_gid) Index: panic.c =================================================================== --- panic.c.orig +++ panic.c @@ -93,10 +93,11 @@ usage(void) /* Print usage and exit. */ fprintf(stderr, "Usage: at [-V] [-q x] [-f file] [-mMlbv] timespec ...\n" " at [-V] [-q x] [-f file] [-mMlbv] -t time\n" " at -c job ...\n" + " at [-V] -l [job ...]\n" " atq [-V] [-q x]\n" " at [ -rd ] job ...\n" " atrm [-V] job ...\n" " batch\n"); exit(EXIT_FAILURE);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor