* Copyright (c) 1995-2003, Index Data
* See the file LICENSE for details.
*
- * $Id: odr.c,v 1.39 2003-01-06 08:20:27 adam Exp $
+ * $Id: odr.c,v 1.43 2003-05-20 19:55:29 adam Exp $
*
*/
#if HAVE_CONFIG_H
"Malformed data",
"Stack overflow",
"Length of constructed type different from sum of members",
- "Overflow writing definite length of constructed type"
+ "Overflow writing definite length of constructed type",
+ "Bad HTTP Request"
};
char *odr_errmsg(int n)
void odr_perror(ODR o, char *message)
{
- fprintf(stderr, "%s: %s\n", message, odr_errlist[o->error]);
+ fprintf(stderr, "%s: %s: %s\n", message, odr_errlist[o->error],
+ odr_getaddinfo(o));
}
int odr_geterror(ODR o)
return o->error;
}
+int odr_geterrorx(ODR o, int *x)
+{
+ if (x)
+ *x = o->op->error_id;
+ return o->error;
+}
+
+char *odr_getaddinfo(ODR o)
+{
+ return o->op->addinfo;
+}
+
+void odr_seterror(ODR o, int error, int id)
+{
+ o->error = error;
+ o->op->error_id = id;
+ o->op->addinfo[0] = '\0';
+}
+
+void odr_setaddinfo(ODR o, const char *addinfo)
+{
+ if (addinfo)
+ {
+ strncpy(o->op->addinfo, addinfo, sizeof(o->op->addinfo)-1);
+ o->op->addinfo[sizeof(o->op->addinfo)-1] = '\0';
+ }
+}
+
void odr_setprint(ODR o, FILE *file)
{
o->print = file;
{
if (o->op->iconv_handle)
yaz_iconv_close (o->op->iconv_handle);
-
- o->op->iconv_handle = yaz_iconv_open (to, from);
- if (o->op->iconv_handle == 0)
- return -1;
+ o->op->iconv_handle = 0;
+ if (to && from)
+ {
+ o->op->iconv_handle = yaz_iconv_open (to, from);
+ if (o->op->iconv_handle == 0)
+ return -1;
+ }
return 0;
}
void odr_reset(ODR o)
{
- o->error = ONONE;
+ odr_seterror(o, ONONE, 0);
o->bp = o->buf;
odr_seek(o, ODR_S_SET, 0);
o->top = 0;
*size = o->size;
return (char*) o->buf;
}
+