rpm
4.5
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
rpmdb
header_internal.c
Go to the documentation of this file.
1
/*@-sizeoftype@*/
6
#include "
system.h
"
7
8
#include <
header_internal.h
>
9
10
#include "
debug.h
"
11
12
/*@-boundswrite@*/
13
char
**
headerGetLangs
(
Header
h)
14
{
15
char
**s, *e, **table;
16
int
i, type, count;
17
18
if
(!
headerGetRawEntry
(h,
HEADER_I18NTABLE
, &type, &s, &count))
19
return
NULL;
20
21
/* XXX xcalloc never returns NULL. */
22
if
((table = (
char
**)
xcalloc
((count+1),
sizeof
(
char
*))) == NULL)
23
return
NULL;
24
25
for
(i = 0, e = *s; i < count; i++, e += strlen(e)+1)
26
table[i] = e;
27
table[count] = NULL;
28
29
/*@-nullret@*/
return
table;
/*@=nullret@*/
/* LCL: double indirection? */
30
}
31
/*@=boundswrite@*/
32
33
/*@-boundsread@*/
34
/*@-type@*/
/* FIX: shrug */
35
void
headerDump
(
Header
h, FILE *f,
int
flags,
36
const
struct
headerTagTableEntry_s
* tags)
37
{
38
int
i;
39
indexEntry
p;
40
const
struct
headerTagTableEntry_s
* tage;
41
const
char
* tag;
42
char
*
type
;
43
44
/* First write out the length of the index (count of index entries) */
45
fprintf(f,
"Entry count: %d\n"
, h->
indexUsed
);
46
47
/* Now write the index */
48
p = h->
index
;
49
fprintf(f,
"\n CT TAG TYPE "
50
" OFSET COUNT\n"
);
51
for
(i = 0; i < h->
indexUsed
; i++) {
52
switch
(p->
info
.
type
) {
53
case
RPM_NULL_TYPE
:
54
type =
"NULL"
;
55
/*@switchbreak@*/
break
;
56
case
RPM_CHAR_TYPE
:
57
type =
"CHAR"
;
58
/*@switchbreak@*/
break
;
59
case
RPM_BIN_TYPE
:
60
type =
"BIN"
;
61
/*@switchbreak@*/
break
;
62
case
RPM_INT8_TYPE
:
63
type =
"INT8"
;
64
/*@switchbreak@*/
break
;
65
case
RPM_INT16_TYPE
:
66
type =
"INT16"
;
67
/*@switchbreak@*/
break
;
68
case
RPM_INT32_TYPE
:
69
type =
"INT32"
;
70
/*@switchbreak@*/
break
;
71
/*case RPM_INT64_TYPE: type = "INT64"; break;*/
72
case
RPM_STRING_TYPE
:
73
type =
"STRING"
;
74
/*@switchbreak@*/
break
;
75
case
RPM_STRING_ARRAY_TYPE
:
76
type =
"STRING_ARRAY"
;
77
/*@switchbreak@*/
break
;
78
case
RPM_I18NSTRING_TYPE
:
79
type =
"I18N_STRING"
;
80
/*@switchbreak@*/
break
;
81
default
:
82
type =
"(unknown)"
;
83
/*@switchbreak@*/
break
;
84
}
85
86
tage = tags;
87
while
(tage->
name
&& tage->
val
!= p->
info
.
tag
) tage++;
88
89
if
(!tage->
name
)
90
tag =
"(unknown)"
;
91
else
92
tag = tage->
name
;
93
94
fprintf(f,
"Entry : %3.3d (%d)%-14s %-18s 0x%.8x %.8d\n"
, i,
95
p->
info
.
tag
, tag, type, (
unsigned
) p->
info
.
offset
,
96
(
int
) p->
info
.
count
);
97
98
if
(flags &
HEADER_DUMP_INLINE
) {
99
char
*dp = p->
data
;
100
int
c = p->
info
.
count
;
101
int
ct = 0;
102
103
/* Print the data inline */
104
switch
(p->
info
.
type
) {
105
case
RPM_INT32_TYPE
:
106
while
(c--) {
107
fprintf(f,
" Data: %.3d 0x%08x (%d)\n"
, ct++,
108
(
unsigned
) *((
int_32
*) dp),
109
(
int
) *((
int_32
*) dp));
110
dp +=
sizeof
(
int_32
);
111
}
112
/*@switchbreak@*/
break
;
113
114
case
RPM_INT16_TYPE
:
115
while
(c--) {
116
fprintf(f,
" Data: %.3d 0x%04x (%d)\n"
, ct++,
117
(
unsigned
) (*((
int_16
*) dp) & 0xffff),
118
(
int
) *((
int_16
*) dp));
119
dp +=
sizeof
(
int_16
);
120
}
121
/*@switchbreak@*/
break
;
122
case
RPM_INT8_TYPE
:
123
while
(c--) {
124
fprintf(f,
" Data: %.3d 0x%02x (%d)\n"
, ct++,
125
(
unsigned
) (*((
int_8
*) dp) & 0xff),
126
(
int
) *((
int_8
*) dp));
127
dp +=
sizeof
(
int_8
);
128
}
129
/*@switchbreak@*/
break
;
130
case
RPM_BIN_TYPE
:
131
while
(c > 0) {
132
fprintf(f,
" Data: %.3d "
, ct);
133
while
(c--) {
134
fprintf(f,
"%02x "
, (
unsigned
) (*(
int_8
*)dp & 0xff));
135
ct++;
136
dp +=
sizeof
(
int_8
);
137
if
(! (ct % 8)) {
138
/*@loopbreak@*/
break
;
139
}
140
}
141
fprintf(f,
"\n"
);
142
}
143
/*@switchbreak@*/
break
;
144
case
RPM_CHAR_TYPE
:
145
while
(c--) {
146
char
ch = (char) *((
char
*) dp);
147
fprintf(f,
" Data: %.3d 0x%2x %c (%d)\n"
, ct++,
148
(
unsigned
)(ch & 0xff),
149
(isprint(ch) ? ch :
' '
),
150
(
int
) *((
char
*) dp));
151
dp +=
sizeof
(char);
152
}
153
/*@switchbreak@*/
break
;
154
case
RPM_STRING_TYPE
:
155
case
RPM_STRING_ARRAY_TYPE
:
156
case
RPM_I18NSTRING_TYPE
:
157
while
(c--) {
158
fprintf(f,
" Data: %.3d %s\n"
, ct++, (
char
*) dp);
159
dp = strchr(dp, 0);
160
dp++;
161
}
162
/*@switchbreak@*/
break
;
163
default
:
164
fprintf(stderr,
_
(
"Data type %d not supported\n"
),
165
(
int
) p->
info
.
type
);
166
/*@switchbreak@*/
break
;
167
}
168
}
169
p++;
170
}
171
}
172
/*@=type@*/
173
/*@=sizeoftype@*/
174
/*@=boundsread@*/
Generated on Mon Oct 27 2014 16:03:32 for rpm by
1.8.3.1