static int print_command(int argc, char **argv) { char *printer; fstring keystr; struct passwd *pw; TDB_DATA value, queue; struct vlp_job job; if (argc < 3) { printf("Usage: print <printername> <jobname>\n"); return 1; } printer = argv[1]; ZERO_STRUCT(job); /* Create a job record */ slprintf(job.jobname, sizeof(job.jobname) - 1, "%s", argv[2]); if (!(pw = getpwuid(getuid()))) { return 1; } slprintf(job.owner, sizeof(job.owner) - 1, "%s", pw->pw_name); job.jobid = next_jobnum(printer); job.size = 666; job.submit_time = time(NULL); /* Store job entry in queue */ slprintf(keystr, sizeof(keystr) - 1, "LPQ/%s", printer); value = tdb_fetch_bystring(tdb, keystr); if (value.dptr) { /* Add job to end of queue */ queue.dptr = (unsigned char *)malloc(value.dsize + sizeof(struct vlp_job)); if (!queue.dptr) return 1; memcpy(queue.dptr, value.dptr, value.dsize); memcpy(queue.dptr + value.dsize, &job, sizeof(struct vlp_job)); queue.dsize = value.dsize + sizeof(struct vlp_job); tdb_store_bystring(tdb, keystr, queue, TDB_REPLACE); free(queue.dptr); } else { /* Create new queue */ queue.dptr = (unsigned char *)&job; queue.dsize = sizeof(struct vlp_job); tdb_store_bystring(tdb, keystr, queue, TDB_REPLACE); } return 0; }
static int print_command(int argc, char **argv) { char *printer; fstring keystr; struct passwd *pw; TDB_DATA value; struct vlp_job job; int i; if (argc < 3) { printf("Usage: print <printername> <jobname>\n"); return 1; } printer = argv[1]; ZERO_STRUCT(job); /* Create a job record */ for (i = 2; i < argc; i++) { fstrcat(job.jobname, argv[i]); if (i < argc - 1) { fstrcat(job.jobname, " "); } } if (!(pw = sys_getpwuid(getuid()))) { return 1; } fstrcpy(job.owner, pw->pw_name); job.jobid = next_jobnum(printer); job.size = 666; job.submit_time = time(NULL); /* Store job entry in queue */ slprintf(keystr, sizeof(keystr) - 1, "LPQ/%s", printer); value = tdb_fetch_by_string(tdb, keystr); if (value.dptr) { /* Add job to end of queue */ value.dptr = realloc(value.dptr, value.dsize + sizeof(struct vlp_job)); if (!value.dptr) return 1; memcpy(value.dptr + value.dsize, &job, sizeof(struct vlp_job)); tdb_store_by_string(tdb, keystr, value.dptr, value.dsize + sizeof(struct vlp_job)); free(value.dptr); } else { /* Create new queue */ tdb_store_by_string(tdb, keystr, &job, sizeof(struct vlp_job)); } return 0; }