3 * \file rpmdb/header_internal.c
8 #include <header_internal.h>
13 char ** headerGetLangs(Header h)
15 char **s, *e, **table;
18 if (!headerGetRawEntry(h, HEADER_I18NTABLE, &type, (const void **)&s, &count))
21 /* XXX xcalloc never returns NULL. */
22 if ((table = (char **)xcalloc((count+1), sizeof(char *))) == NULL)
25 for (i = 0, e = *s; i < count; i++, e += strlen(e)+1)
29 /*@-nullret@*/ return table; /*@=nullret@*/ /* LCL: double indirection? */
34 /*@-type@*/ /* FIX: shrug */
35 void headerDump(Header h, FILE *f, int flags,
36 const struct headerTagTableEntry_s * tags)
40 const struct headerTagTableEntry_s * tage;
44 /* First write out the length of the index (count of index entries) */
45 fprintf(f, "Entry count: %d\n", h->indexUsed);
47 /* Now write the index */
49 fprintf(f, "\n CT TAG TYPE "
51 for (i = 0; i < h->indexUsed; i++) {
52 switch (p->info.type) {
55 /*@switchbreak@*/ break;
58 /*@switchbreak@*/ break;
61 /*@switchbreak@*/ break;
64 /*@switchbreak@*/ break;
67 /*@switchbreak@*/ break;
70 /*@switchbreak@*/ break;
71 /*case RPM_INT64_TYPE: type = "INT64"; break;*/
74 /*@switchbreak@*/ break;
75 case RPM_STRING_ARRAY_TYPE:
76 type = "STRING_ARRAY";
77 /*@switchbreak@*/ break;
78 case RPM_I18NSTRING_TYPE:
80 /*@switchbreak@*/ break;
83 /*@switchbreak@*/ break;
87 while (tage->name && tage->val != p->info.tag) tage++;
94 fprintf(f, "Entry : %3.3d (%d)%-14s %-18s 0x%.8x %.8d\n", i,
95 p->info.tag, tag, type, (unsigned) p->info.offset,
98 if (flags & HEADER_DUMP_INLINE) {
100 int c = p->info.count;
103 /* Print the data inline */
104 switch (p->info.type) {
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);
112 /*@switchbreak@*/ break;
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);
121 /*@switchbreak@*/ break;
124 fprintf(f, " Data: %.3d 0x%02x (%d)\n", ct++,
125 (unsigned) (*((int_8 *) dp) & 0xff),
126 (int) *((int_8 *) dp));
129 /*@switchbreak@*/ break;
132 fprintf(f, " Data: %.3d ", ct);
134 fprintf(f, "%02x ", (unsigned) (*(int_8 *)dp & 0xff));
138 /*@loopbreak@*/ break;
143 /*@switchbreak@*/ break;
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));
153 /*@switchbreak@*/ break;
154 case RPM_STRING_TYPE:
155 case RPM_STRING_ARRAY_TYPE:
156 case RPM_I18NSTRING_TYPE:
158 fprintf(f, " Data: %.3d %s\n", ct++, (char *) dp);
162 /*@switchbreak@*/ break;
164 fprintf(stderr, _("Data type %d not supported\n"),
166 /*@switchbreak@*/ break;