* ----------------------------------------------------------------------
*
* Copyright (c) 2000-2004, Index Data.
* ----------------------------------------------------------------------
*
* Copyright (c) 2000-2004, Index Data.
Z_Operand *o = s->u.simple;
Z_AttributesPlusTerm *at;
if (o->which == Z_Operand_resultSetId) {
Z_Operand *o = s->u.simple;
Z_AttributesPlusTerm *at;
if (o->which == Z_Operand_resultSetId) {
/* This code causes a SIGBUS on my machine, and I have no
idea why. It seems as clear as day to me */
char *rsid = (char*) o->u.resultSetId;
/* This code causes a SIGBUS on my machine, and I have no
idea why. It seems as clear as day to me */
char *rsid = (char*) o->u.resultSetId;
sv = newObject("Net::Z3950::RPN::RSID", (SV*) (hv = newHV()));
printf("Made sv=0x%lx, hv=0x%lx\n",
(unsigned long) sv ,(unsigned long) hv);
sv = newObject("Net::Z3950::RPN::RSID", (SV*) (hv = newHV()));
printf("Made sv=0x%lx, hv=0x%lx\n",
(unsigned long) sv ,(unsigned long) hv);
setMember(hv, "id", sv2);
printf("Set hv{id} to 0x%lx\n", (unsigned long) sv2);
return sv;
setMember(hv, "id", sv2);
printf("Set hv{id} to 0x%lx\n", (unsigned long) sv2);
return sv;
hv_store(href, "DATABASES", 9, newRV( (SV*) aref), 0);
hv_store(href, "HANDLE", 6, zhandle->handle, 0);
hv_store(href, "PID", 3, newSViv(getpid()), 0);
hv_store(href, "DATABASES", 9, newRV( (SV*) aref), 0);
hv_store(href, "HANDLE", 6, zhandle->handle, 0);
hv_store(href, "PID", 3, newSViv(getpid()), 0);
- hv_store(href, "RPN", 3, zquery2perl(rr->query), 0);
+ if ((rpnSV = zquery2perl(rr->query)) != 0) {
+ hv_store(href, "RPN", 3, rpnSV, 0);
+ }
query = zquery2pquery(rr->query);
if (query)
{
hv_store(href, "QUERY", 5, newSVpv((char *)query->buf, query->pos), 0);
}
query = zquery2pquery(rr->query);
if (query)
{
hv_store(href, "QUERY", 5, newSVpv((char *)query->buf, query->pos), 0);
}
+ else if (rr->query->which == Z_Query_type_104 &&
+ rr->query->u.type_104->which == Z_External_CQL) {
+ hv_store(href, "CQL", 3,
+ newSVpv(rr->query->u.type_104->u.cql, 0), 0);
+ }
href = newHV();
hv_store(href, "SETNAME", 7, newSVpv(rr->setname, 0), 0);
temp = hv_store(href, "OFFSET", 6, newSViv(rr->number), 0);
href = newHV();
hv_store(href, "SETNAME", 7, newSVpv(rr->setname, 0), 0);
temp = hv_store(href, "OFFSET", 6, newSViv(rr->number), 0);
- oid_dotted = oid2dotted(rr->request_format_raw);
+ if (rr->request_format_raw != 0) {
+ oid_dotted = oid2dotted(rr->request_format_raw);
+ } else {
+ /* Probably an SRU request: assume XML is required */
+ oid_dotted = wrbuf_alloc();
+ wrbuf_puts(oid_dotted, "1.2.840.10003.5.109.10");
+ }
hv_store(href, "REQ_FORM", 8, newSVpv((char *)oid_dotted->buf, oid_dotted->pos), 0);
hv_store(href, "REP_FORM", 8, newSVpv((char *)oid_dotted->buf, oid_dotted->pos), 0);
hv_store(href, "BASENAME", 8, newSVpv("", 0), 0);
hv_store(href, "REQ_FORM", 8, newSVpv((char *)oid_dotted->buf, oid_dotted->pos), 0);
hv_store(href, "REP_FORM", 8, newSVpv((char *)oid_dotted->buf, oid_dotted->pos), 0);
hv_store(href, "BASENAME", 8, newSVpv("", 0), 0);
bend_initresult *r = (bend_initresult *)
odr_malloc (q->stream, sizeof(*r));
char *ptr;
bend_initresult *r = (bend_initresult *)
odr_malloc (q->stream, sizeof(*r));
char *ptr;
hv_store(href, "HANDLE", 6, newSVsv(&sv_undef), 0);
hv_store(href, "PID", 3, newSViv(getpid()), 0);
if (q->auth) {
hv_store(href, "HANDLE", 6, newSVsv(&sv_undef), 0);
hv_store(href, "PID", 3, newSViv(getpid()), 0);
if (q->auth) {
- char *openpass = xstrdup (q->auth->u.open);
- char *cp = strchr (openpass, '/');
+ char *cp;
+ user = nmem_strdup (odr_getmem (q->stream), q->auth->u.open);
+ cp = strchr (user, '/');
} else if (q->auth->which == Z_IdAuthentication_idPass) {
user = q->auth->u.idPass->userId;
passwd = q->auth->u.idPass->password;
}
/* ### some code paths have user/password unassigned here */
} else if (q->auth->which == Z_IdAuthentication_idPass) {
user = q->auth->u.idPass->userId;
passwd = q->auth->u.idPass->password;
}
/* ### some code paths have user/password unassigned here */
- hv_store(href, "USER", 4, newSVpv(user, 0), 0);
- hv_store(href, "PASS", 4, newSVpv(passwd, 0), 0);
+ if (user)
+ hv_store(href, "USER", 4, newSVpv(user, 0), 0);
+ if (passwd)
+ hv_store(href, "PASS", 4, newSVpv(passwd, 0), 0);