#define NO_SYSLOG
#include "includes.h"
static const char *fix_char_ptr(unsigned int datap, unsigned int converter,
char *rdata, int rdrcnt)
{
if (datap == 0) {
return "";
} else {
unsigned int offset = datap - converter;
if (offset >= rdrcnt) {
DEBUG(1,("bad char ptr: datap=%u, converter=%u rdrcnt=%d>",
datap, converter, rdrcnt));
return "<ERROR>";
} else {
return &rdata[offset];
}
}
}
int cli_print_queue(struct cli_state *cli,
void (*fn)(struct print_job_info *))
{
char *rparam = NULL;
char *rdata = NULL;
char *p;
unsigned int rdrcnt, rprcnt;
pstring param;
int result_code=0;
int i = -1;
memset(param,'\0',sizeof(param));
p = param;
SSVAL(p,0,76);
p += 2;
pstrcpy_base(p,"zWrLeh", param);
p = skip_string(p,1);
pstrcpy_base(p,"WWzWWDDzz", param);
p = skip_string(p,1);
pstrcpy_base(p,cli->share, param);
p = skip_string(p,1);
SSVAL(p,0,2);
SSVAL(p,2,1000);
p += 4;
pstrcpy_base(p,"", param);
p = skip_string(p,1);
DEBUG(4,("doing cli_print_queue for %s\n", cli->share));
if (cli_api(cli,
param, PTR_DIFF(p,param), 1024,
NULL, 0, CLI_BUFFER_SIZE,
&rparam, &rprcnt,
&rdata, &rdrcnt)) {
int converter;
result_code = SVAL(rparam,0);
converter = SVAL(rparam,2);
if (result_code == 0) {
struct print_job_info job;
p = rdata;
for (i = 0; i < SVAL(rparam,4); ++i) {
job.id = SVAL(p,0);
job.priority = SVAL(p,2);
fstrcpy(job.user,
fix_char_ptr(SVAL(p,4), converter,
rdata, rdrcnt));
job.t = make_unix_date3(p + 12);
job.size = IVAL(p,16);
fstrcpy(job.name,fix_char_ptr(SVAL(p,24),
converter,
rdata, rdrcnt));
fn(&job);
p += 28;
}
}
}
SAFE_FREE(rparam);
SAFE_FREE(rdata);
return i;
}
int cli_printjob_del(struct cli_state *cli, int job)
{
char *rparam = NULL;
char *rdata = NULL;
char *p;
unsigned int rdrcnt,rprcnt;
int ret = -1;
pstring param;
memset(param,'\0',sizeof(param));
p = param;
SSVAL(p,0,81);
p += 2;
pstrcpy_base(p,"W", param);
p = skip_string(p,1);
pstrcpy_base(p,"", param);
p = skip_string(p,1);
SSVAL(p,0,job);
p += 2;
if (cli_api(cli,
param, PTR_DIFF(p,param), 1024,
NULL, 0, CLI_BUFFER_SIZE,
&rparam, &rprcnt,
&rdata, &rdrcnt)) {
ret = SVAL(rparam,0);
}
SAFE_FREE(rparam);
SAFE_FREE(rdata);
return ret;
}