00001
00002
00003
00004
00009 #if HAVE_CONFIG_H
00010 #include <config.h>
00011 #endif
00012
00013 #include <stdlib.h>
00014 #include <string.h>
00015 #include <ctype.h>
00016 #include "odr-priv.h"
00017 #include <yaz/oid_util.h>
00018
00019 void odr_prname(ODR o, const char *name)
00020 {
00021 if (name)
00022 odr_printf(o, "%*s%s ", o->op->indent*4, "", name);
00023 else
00024 odr_printf(o, "%*s", o->op->indent*4, "");
00025 }
00026
00027 int odp_more_chunks(ODR o, const unsigned char *base, int len)
00028 {
00029 if (!len)
00030 return 0;
00031 if (len < 0)
00032 {
00033 if (*o->bp == 0 && *(o->bp + 1) == 0)
00034 {
00035 o->bp += 2;
00036 return 0;
00037 }
00038 else
00039 return 1;
00040 }
00041 else
00042 return o->bp - base < len;
00043 }
00044
00045 Odr_oid *odr_oiddup_nmem(NMEM nmem, const Odr_oid *o)
00046 {
00047 Odr_oid *r;
00048
00049 if (!o)
00050 return 0;
00051 if (!(r = (Odr_oid *)
00052 nmem_malloc(nmem, (oid_oidlen(o) + 1) * sizeof(Odr_oid))))
00053 return 0;
00054 oid_oidcpy(r, o);
00055 return r;
00056 }
00057
00058 Odr_oid *odr_oiddup(ODR odr, const Odr_oid *o)
00059 {
00060 return odr_oiddup_nmem(odr_getmem(odr), o);
00061 }
00062
00063 Odr_oid *odr_getoidbystr_nmem(NMEM nmem, const char *str)
00064 {
00065 Odr_oid oid[OID_SIZE];
00066 Odr_oid *ret;
00067
00068 if (oid_dotstring_to_oid(str, oid))
00069 return 0;
00070 ret = (Odr_oid *)nmem_malloc(nmem, sizeof(*ret)*(oid_oidlen(oid) + 1));
00071 oid_oidcpy(ret, oid);
00072 return ret;
00073 }
00074
00075 Odr_oid *odr_getoidbystr(ODR o, const char *str)
00076 {
00077 return odr_getoidbystr_nmem(odr_getmem(o), str);
00078 }
00079
00080 int odr_missing(ODR o, int opt, const char *name)
00081 {
00082 if (o->error)
00083 return 0;
00084 if (!opt)
00085 {
00086 odr_seterror(o, OREQUIRED, 53);
00087 odr_setelement(o, name);
00088 }
00089 return opt;
00090 }
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101 char *odr_prepend(ODR o, const char *prefix, const char *old)
00102 {
00103 int plen = (prefix == 0) ? 0 : strlen(prefix);
00104 int olen = (old == 0) ? 0 : strlen(old);
00105 char *res = (char*) odr_malloc (o, olen + plen + 2);
00106
00107 *res = '\0';
00108 if (prefix != 0)
00109 strcpy (res, prefix);
00110 if (prefix != 0 && old != 0)
00111 strcat (res, "/");
00112 if (old !=0)
00113 strcat (res, old);
00114
00115 return res;
00116 }
00117
00118
00119
00120
00121
00122
00123
00124
00125