YAZ
4.2.57
Main Page
Data Structures
Files
File List
Globals
src
odr_util.c
Go to the documentation of this file.
1
/* This file is part of the YAZ toolkit.
2
* Copyright (C) 1995-2013 Index Data
3
* See the file LICENSE for details.
4
*/
9
#if HAVE_CONFIG_H
10
#include <
config.h
>
11
#endif
12
13
#include <stdlib.h>
14
#include <string.h>
15
#include "
odr-priv.h
"
16
#include <
yaz/oid_util.h
>
17
18
void
odr_prname
(
ODR
o,
const
char
*
name
)
19
{
20
if
(o->
op
->
indent
< 16)
21
odr_printf
(o,
"%*s"
, o->
op
->
indent
* 2,
""
);
22
else
23
odr_printf
(o,
"level=%-7d%*s"
, o->
op
->
indent
,
24
2 * (o->
op
->
indent
% 8) ,
""
);
25
if
(name)
26
odr_printf
(o,
"%s "
, name);
27
}
28
29
int
odp_more_chunks
(
ODR
o,
const
unsigned
char
*
base
,
int
len
)
30
{
31
if
(!len)
32
return
0;
33
if
(len < 0)
/* indefinite length */
34
{
35
if
(*o->
bp
== 0 && *(o->
bp
+ 1) == 0)
36
{
37
o->
bp
+= 2;
38
return
0;
39
}
40
else
41
return
1;
42
}
43
else
44
return
o->
bp
- base <
len
;
45
}
46
47
Odr_oid
*
odr_oiddup_nmem
(
NMEM
nmem,
const
Odr_oid
*o)
48
{
49
Odr_oid
*r;
50
51
if
(!o)
52
return
0;
53
if
(!(r = (
Odr_oid
*)
54
nmem_malloc
(nmem, (
oid_oidlen
(o) + 1) *
sizeof
(
Odr_oid
))))
55
return
0;
56
oid_oidcpy
(r, o);
57
return
r;
58
}
59
60
Odr_oid
*
odr_oiddup
(
ODR
odr
,
const
Odr_oid
*o)
61
{
62
return
odr_oiddup_nmem
(
odr_getmem
(odr), o);
63
}
64
65
Odr_oid
*
odr_getoidbystr_nmem
(
NMEM
nmem,
const
char
*str)
66
{
67
Odr_oid
oid[
OID_SIZE
];
68
Odr_oid
*ret;
69
70
if
(
oid_dotstring_to_oid
(str, oid))
71
return
0;
72
ret = (
Odr_oid
*)
nmem_malloc
(nmem,
sizeof
(*ret)*(
oid_oidlen
(oid) + 1));
73
oid_oidcpy
(ret, oid);
74
return
ret;
75
}
76
77
Odr_oid
*
odr_getoidbystr
(
ODR
o,
const
char
*str)
78
{
79
return
odr_getoidbystr_nmem
(
odr_getmem
(o), str);
80
}
81
82
int
odr_missing
(
ODR
o,
int
opt
,
const
char
*
name
)
83
{
84
if
(o->
error
)
85
return
0;
86
if
(!opt)
87
{
88
odr_seterror
(o,
OREQUIRED
, 53);
89
odr_setelement
(o, name);
90
}
91
return
opt
;
92
}
93
94
/*
95
* Reallocate the buffer `old', using the ODR memory pool `o' to be
96
* big enough to hold its existing value (if any) plus `prefix' (if
97
* any) and a separator character. Copy `prefix', a forward slash and
98
* the old value into the new area and return its address. Can be
99
* used as follows:
100
* initRequest->implementationName = odr_prepend(o,
101
* initRequest->implementationName, "ZOOM-C");
102
*/
103
char
*
odr_prepend
(
ODR
o,
const
char
*prefix,
const
char
*old)
104
{
105
int
plen = (prefix == 0) ? 0 : strlen(prefix);
106
int
olen = (old == 0) ? 0 : strlen(old);
107
char
*res = (
char
*)
odr_malloc
(o, olen + plen + 2);
108
109
*res =
'\0'
;
110
if
(plen > 0)
111
strcpy(res, prefix);
112
if
(plen > 0 && old != 0)
113
strcat(res,
"/"
);
114
if
(old != 0)
115
strcat(res, old);
116
return
res;
117
}
118
/*
119
* Local variables:
120
* c-basic-offset: 4
121
* c-file-style: "Stroustrup"
122
* indent-tabs-mode: nil
123
* End:
124
* vim: shiftwidth=4 tabstop=8 expandtab
125
*/
126
Generated on Wed May 15 2013 14:55:31 for YAZ by
1.8.1.2