s3-printing: rename queue->job sysjob
[ddiss/samba.git] / source3 / printing / lpq_parse.c
index afa3b4850a584e392f9560c34a80eb7ba4e223c2..2a14dfa2ec6d352ea96065c8cd83f1d18e6f3961 100644 (file)
@@ -18,6 +18,7 @@
 */
 
 #include "includes.h"
+#include "printing.h"
 
 static const char *Months[13] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
                              "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "Err"};
@@ -163,7 +164,7 @@ static bool parse_lpq_bsd(char *line,print_queue_struct *buf,bool first)
                return False;
        }
 
-       buf->job = atoi(tok[JOBTOK]);
+       buf->sysjob = atoi(tok[JOBTOK]);
        buf->size = atoi(tok[TOTALTOK]);
        buf->status = strequal(tok[RANKTOK],"active")?LPQ_PRINTING:LPQ_QUEUED;
        buf->time = time(NULL);
@@ -280,7 +281,7 @@ static bool parse_lpq_lprng(char *line,print_queue_struct *buf,bool first)
                return False;
        }
 
-       buf->job  = atoi(tokarr[LPRNG_JOBTOK]);
+       buf->sysjob = atoi(tokarr[LPRNG_JOBTOK]);
        buf->size = atoi(tokarr[LPRNG_TOTALTOK]);
 
        if (strequal(tokarr[LPRNG_RANKTOK],"active")) {
@@ -383,7 +384,7 @@ static bool parse_lpq_aix(char *line,print_queue_struct *buf,bool first)
                                }
                        }
 
-                       buf->job = atoi(tok[1]);
+                       buf->sysjob = atoi(tok[1]);
                        buf->status = strequal(tok[0],"HELD")?LPQ_PAUSED:LPQ_QUEUED;
                        buf->priority = 0;
                        buf->time = time(NULL);
@@ -419,7 +420,7 @@ static bool parse_lpq_aix(char *line,print_queue_struct *buf,bool first)
                        }
                }
 
-               buf->job = atoi(tok[3]);
+               buf->sysjob = atoi(tok[3]);
                buf->status = strequal(tok[2],"RUNNING")?LPQ_PRINTING:LPQ_QUEUED;
                buf->priority = 0;
                buf->time = time(NULL);
@@ -510,7 +511,7 @@ static bool parse_lpq_hpux(char *line, print_queue_struct *buf, bool first)
 
                /* fill things from header line */
                buf->time = jobtime;
-               buf->job = jobid;
+               buf->sysjob = jobid;
                buf->status = jobstat;
                buf->priority = jobprio;
                if (jobuser) {
@@ -650,7 +651,7 @@ static bool parse_lpq_sysv(char *line,print_queue_struct *buf,bool first)
                tok[2] = p+1;
        }
 
-       buf->job = atoi(tok[1]);
+       buf->sysjob = atoi(tok[1]);
        buf->size = atoi(tok[3]);
        if (count > 7 && strequal(tok[7],"on")) {
                buf->status = LPQ_PRINTING;
@@ -725,7 +726,7 @@ static bool parse_lpq_qnx(char *line,print_queue_struct *buf,bool first)
                }
        }
 
-       buf->job = atoi(tok[2]);
+       buf->sysjob = atoi(tok[2]);
        buf->size = atoi(tok[4]);
        buf->status = strequal(tok[3],"active")?LPQ_PRINTING:LPQ_QUEUED;
        buf->priority = 0;
@@ -805,7 +806,7 @@ static bool parse_lpq_plp(char *line,print_queue_struct *buf,bool first)
                }
        }
 
-       buf->job = atoi(tok[4]);
+       buf->sysjob = atoi(tok[4]);
 
        buf->size = atoi(tok[7]);
        if (strchr_m(tok[7],'K')) {
@@ -858,51 +859,52 @@ static bool parse_lpq_nt(char *line,print_queue_struct *buf,bool first)
                char terminator;
        } nt_lpq_line;
 
-       nt_lpq_line parse_line;
+       char parse_line_char[sizeof(nt_lpq_line)];
+       nt_lpq_line *parse_line = (nt_lpq_line *)parse_line_char;
 #define LPRNT_PRINTING "Printing"
 #define LPRNT_WAITING "Waiting"
 #define LPRNT_PAUSED "Paused"
 
-       memset(&parse_line, '\0', sizeof(parse_line));
-       strncpy((char *) &parse_line, line, sizeof(parse_line) -1);
+       memset(parse_line_char, '\0', sizeof(parse_line_char));
+       strncpy(parse_line_char, line, sizeof(parse_line_char) -1);
 
-       if (strlen((char *) &parse_line) != sizeof(parse_line) - 1) {
+       if (strlen(parse_line_char) != sizeof(parse_line_char) - 1) {
                return False;
        }
 
        /* Just want the first word in the owner field - the username */
-       if (strchr_m(parse_line.owner, ' ')) {
-               *(strchr_m(parse_line.owner, ' ')) = '\0';
+       if (strchr_m(parse_line->owner, ' ')) {
+               *(strchr_m(parse_line->owner, ' ')) = '\0';
        } else {
-               parse_line.space1 = '\0';
+               parse_line->space1 = '\0';
        }
 
        /* Make sure we have an owner */
-       if (!strlen(parse_line.owner)) {
+       if (!strlen(parse_line->owner)) {
                return False;
        }
 
        /* Make sure the status is valid */
-       parse_line.space2 = '\0';
-       trim_char(parse_line.status, '\0', ' ');
-       if (!strequal(parse_line.status, LPRNT_PRINTING) &&
-                       !strequal(parse_line.status, LPRNT_PAUSED) &&
-                       !strequal(parse_line.status, LPRNT_WAITING)) {
+       parse_line->space2 = '\0';
+       trim_char(parse_line->status, '\0', ' ');
+       if (!strequal(parse_line->status, LPRNT_PRINTING) &&
+                       !strequal(parse_line->status, LPRNT_PAUSED) &&
+                       !strequal(parse_line->status, LPRNT_WAITING)) {
                return False;
        }
   
-       parse_line.space3 = '\0';
-       trim_char(parse_line.jobname, '\0', ' ');
+       parse_line->space3 = '\0';
+       trim_char(parse_line->jobname, '\0', ' ');
 
-       buf->job = atoi(parse_line.jobid);
+       buf->sysjob = atoi(parse_line->jobid);
        buf->priority = 0;
-       buf->size = atoi(parse_line.size);
+       buf->size = atoi(parse_line->size);
        buf->time = time(NULL);
-       fstrcpy(buf->fs_user, parse_line.owner);
-       fstrcpy(buf->fs_file, parse_line.jobname);
-       if (strequal(parse_line.status, LPRNT_PRINTING)) {
+       fstrcpy(buf->fs_user, parse_line->owner);
+       fstrcpy(buf->fs_file, parse_line->jobname);
+       if (strequal(parse_line->status, LPRNT_PRINTING)) {
                buf->status = LPQ_PRINTING;
-       } else if (strequal(parse_line.status, LPRNT_PAUSED)) {
+       } else if (strequal(parse_line->status, LPRNT_PAUSED)) {
                buf->status = LPQ_PAUSED;
        } else {
                buf->status = LPQ_QUEUED;
@@ -941,48 +943,49 @@ static bool parse_lpq_os2(char *line,print_queue_struct *buf,bool first)
                char terminator;
        } os2_lpq_line;
 
-       os2_lpq_line parse_line;
+       char parse_line_char[sizeof(os2_lpq_line)];
+       os2_lpq_line *parse_line = (os2_lpq_line *)parse_line_char;
 #define LPROS2_PRINTING "Printing"
 #define LPROS2_WAITING "Queued"
 #define LPROS2_PAUSED "Paused"
 
-       memset(&parse_line, '\0', sizeof(parse_line));
-       strncpy((char *) &parse_line, line, sizeof(parse_line) -1);
+       memset(parse_line_char, '\0', sizeof(parse_line_char));
+       strncpy(parse_line_char, line, sizeof(parse_line_char) -1);
 
-       if (strlen((char *) &parse_line) != sizeof(parse_line) - 1) {
+       if (strlen(parse_line_char) != sizeof(parse_line_char) - 1) {
                return False;
        }
 
        /* Get the jobid */
-       buf->job = atoi(parse_line.jobid);
+       buf->sysjob = atoi(parse_line->jobid);
 
        /* Get the job name */
-       parse_line.space2[0] = '\0';
-       trim_char(parse_line.jobname, '\0', ' ');
-       fstrcpy(buf->fs_file, parse_line.jobname);
+       parse_line->space2[0] = '\0';
+       trim_char(parse_line->jobname, '\0', ' ');
+       fstrcpy(buf->fs_file, parse_line->jobname);
 
        buf->priority = 0;
-       buf->size = atoi(parse_line.size);
+       buf->size = atoi(parse_line->size);
        buf->time = time(NULL);
 
        /* Make sure we have an owner */
-       if (!strlen(parse_line.owner)) {
+       if (!strlen(parse_line->owner)) {
                return False;
        }
 
        /* Make sure we have a valid status */
-       parse_line.space4[0] = '\0';
-       trim_char(parse_line.status, '\0', ' ');
-       if (!strequal(parse_line.status, LPROS2_PRINTING) &&
-                       !strequal(parse_line.status, LPROS2_PAUSED) &&
-                       !strequal(parse_line.status, LPROS2_WAITING)) {
+       parse_line->space4[0] = '\0';
+       trim_char(parse_line->status, '\0', ' ');
+       if (!strequal(parse_line->status, LPROS2_PRINTING) &&
+                       !strequal(parse_line->status, LPROS2_PAUSED) &&
+                       !strequal(parse_line->status, LPROS2_WAITING)) {
                return False;
        }
 
-       fstrcpy(buf->fs_user, parse_line.owner);
-       if (strequal(parse_line.status, LPROS2_PRINTING)) {
+       fstrcpy(buf->fs_user, parse_line->owner);
+       if (strequal(parse_line->status, LPROS2_PRINTING)) {
                buf->status = LPQ_PRINTING;
-       } else if (strequal(parse_line.status, LPROS2_PAUSED)) {
+       } else if (strequal(parse_line->status, LPROS2_PAUSED)) {
                buf->status = LPQ_PAUSED;
        } else {
                buf->status = LPQ_QUEUED;
@@ -1020,7 +1023,7 @@ static bool parse_lpq_vlp(char *line,print_queue_struct *buf,bool first)
        while(next_token_talloc(frame, &cline, &tok, NULL)) {
                switch (toknum) {
                case 0:
-                       buf->job = atoi(tok);
+                       buf->sysjob = atoi(tok);
                        break;
                case 1:
                        buf->size = atoi(tok);
@@ -1148,3 +1151,23 @@ bool parse_lpq_entry(enum printing_types printing_type,char *line,
 
        return ret;
 }
+
+/****************************************************************************
+ Parse a file name from the system spooler to generate a jobid.
+****************************************************************************/
+
+uint32_t print_parse_jobid(const char *fname)
+{
+       int jobid;
+       const char *p = strstr_m(fname,PRINT_SPOOL_PREFIX);
+
+       if (!p) {
+               return (uint32_t)-1;
+       }
+       p += strlen(PRINT_SPOOL_PREFIX);
+       jobid = atoi(p);
+       if (jobid <= 0) {
+               return (uint32_t)-1;
+       }
+       return (uint32_t)jobid;
+}