int indexAlloced;
int sorted;
- int usageCount;
+ /*@refs@*/int usageCount;
};
struct entryInfo {
struct indexEntry {
struct entryInfo info;
- void * data;
+ /*@owned@*/ void * data;
int length; /* Computable, but why bother? */
};
} u;
};
-static void copyEntry(struct indexEntry * entry,
- int_32 *type, void **p, int_32 *c,
- int minimizeMemory)
+static void copyEntry(struct indexEntry * entry, /*@out@*/int_32 *type,
+ /*@out@*/void **p, /*@out@*/int_32 *c, int minimizeMemory)
{
int i, tableSize;
char ** ptrEntry;
*type = entry->info.type;
if (c)
*c = entry->info.count;
- if (!p)
+ if (p == NULL)
return;
/* Now look it up */
*p = entry->data;
break;
}
- /* fallthrough */
+ /*@fallthrough@*/
case RPM_STRING_ARRAY_TYPE:
case RPM_I18NSTRING_TYPE:
i = entry->info.count;
default:
*p = entry->data;
+ break;
}
}
-static int dataLength(int_32 type, void * p, int_32 count, int onDisk)
+static int dataLength(int_32 type, const void * p, int_32 count, int onDisk)
{
int thisLen, length, i;
char ** src, * chptr;
}
/* This should not be allowed */
fprintf(stderr, _("grabData() RPM_STRING_TYPE count must be 1.\n"));
- exit(1);
+ exit(EXIT_FAILURE);
+ /*@notreached@*/ break;
case RPM_STRING_ARRAY_TYPE:
case RPM_I18NSTRING_TYPE:
length = typeSizes[type] * count;
else {
fprintf(stderr, _("Data type %d not supported\n"), (int) type);
- exit(1);
+ exit(EXIT_FAILURE);
+ /*@notreached@*/
}
+ break;
}
return length;
headerSort(h);
- hi->h = h;
+ hi->h = headerLink(h);
hi->next_index = 0;
return hi;
}
void headerFreeIterator(HeaderIterator iter)
{
+ headerFree(iter->h);
free(iter);
}
{
int_32 il; /* index length, data length */
char *p = pv;
- char * dataStart;
+ const char * dataStart;
struct entryInfo * pe;
struct indexEntry * entry;
struct headerToken *h = malloc(sizeof(struct headerToken));
- char * src, * dst;
+ const char * src;
+ char * dst;
int i;
int count;
default:
memcpy(dst, src, entry->length);
+ break;
}
}
return h;
}
-static void *doHeaderUnload(Header h, int * lengthPtr)
+static void *doHeaderUnload(Header h, /*@out@*/int * lengthPtr)
{
int i;
int type, diff;
default:
memcpy(chptr, entry->data, entry->length);
chptr += entry->length;
+ break;
}
}
return h;
}
-void headerGzWrite(FD_t fd, Header h, int magicp)
+int headerGzWrite(FD_t fd, Header h, int magicp)
{
void * p;
int length;
int_32 l;
+ ssize_t nb;
p = doHeaderUnload(h, &length);
if (magicp) {
- gzdWrite(fd, header_magic, sizeof(header_magic));
+ nb = gzdWrite(fd, header_magic, sizeof(header_magic));
+ if (nb != sizeof(header_magic)) {
+ free(p);
+ return 1;
+ }
l = htonl(0);
- gzdWrite(fd, &l, sizeof(l));
+ nb = gzdWrite(fd, &l, sizeof(l));
+ if (nb != sizeof(l)) {
+ free(p);
+ return 1;
+ }
}
- gzdWrite(fd, p, length);
+ nb = gzdWrite(fd, p, length);
+ if (nb != length) {
+ free(p);
+ return 1;
+ }
free(p);
+ return 0;
}
Header headerGzRead(FD_t fd, int magicp)
int i;
struct indexEntry *p;
const struct headerTagTableEntry * tage;
- char *type, *tag;
+ const char *tag;
+ char *type;
/* First write out the length of the index (count of index entries) */
fprintf(f, "Entry count: %d\n", h->indexUsed);
}
break;
case RPM_BIN_TYPE:
- while (c > 0) {
- fprintf(f, " Data: %.3d ", ct);
- while (c--) {
- fprintf(f, "%02x ", (unsigned) (*(int_8 *)dp & 0xff));
- ct++;
- dp += sizeof(int_8);
- if (! (ct % 8)) {
- break;
- }
- }
- fprintf(f, "\n");
- }
+ while (c > 0) {
+ fprintf(f, " Data: %.3d ", ct);
+ while (c--) {
+ fprintf(f, "%02x ", (unsigned) (*(int_8 *)dp & 0xff));
+ ct++;
+ dp += sizeof(int_8);
+ if (! (ct % 8)) {
+ break;
+ }
+ }
+ fprintf(f, "\n");
+ }
break;
case RPM_CHAR_TYPE:
while (c--) {
fprintf(f, " Data: %.3d 0x%2x %c (%d)\n", ct++,
(unsigned)(ch & 0xff),
(isprint(ch) ? ch : ' '),
- (char) *((char *) dp));
+ (int) *((char *) dp));
dp += sizeof(char);
}
break;
default:
fprintf(stderr, _("Data type %d not supprted\n"),
(int) p->info.type);
- exit(1);
+ exit(EXIT_FAILURE);
+ /*@notreached@*/ break;
}
}
p++;
return entry->data;
}
-static int intGetEntry(Header h, int_32 tag, int_32 *type, void **p, int_32 *c,
+static int intGetEntry(Header h, int_32 tag, /*@out@*/int_32 *type, /*@out@*/void **p, /*@out@*/int_32 *c,
int minMem)
{
struct indexEntry * entry;
return size;
}
-static void copyData(int_32 type, void * dstPtr, void * srcPtr, int_32 c,
+static void copyData(int_32 type, /*@out@*/void * dstPtr, const void * srcPtr, int_32 c,
int dataLength)
{
- char ** src, * dst;
+ const char ** src;
+ char * dst;
int i, len;
switch (type) {
case RPM_I18NSTRING_TYPE:
/* Otherwise, p is char** */
i = c;
- src = (char **) srcPtr;
+ src = (const char **) srcPtr;
dst = dstPtr;
while (i--) {
len = *src ? strlen(*src) + 1 : 0;
default:
memcpy(dstPtr, srcPtr, dataLength);
+ break;
}
}
-static void * grabData(int_32 type, void * p, int_32 c, int * lengthPtr)
+static void * grabData(int_32 type, /*@out@*/const void * p, int_32 c, int * lengthPtr)
{
int length;
void * data;
/* */
/********************************************************************/
-int headerAddEntry(Header h, int_32 tag, int_32 type, void *p, int_32 c)
+int headerAddEntry(Header h, int_32 tag, int_32 type, const void *p, int_32 c)
{
struct indexEntry *entry;
if (c <= 0) {
fprintf(stderr, _("Bad count for headerAddEntry(): %d\n"), (int) c);
- exit(1);
+ exit(EXIT_FAILURE);
+ /*@notreached@*/
}
/* Allocate more index space if necessary */
}
}
-static void freeFormat(struct sprintfToken * format, int num)
+static void freeFormat(/*@only@*/struct sprintfToken * format, int num)
{
int i;
static void findTag(char * name, const struct headerTagTableEntry * tags,
const struct headerSprintfExtension * extensions,
- const struct headerTagTableEntry ** tagMatch,
- const struct headerSprintfExtension ** extMatch)
+ /*@out@*/const struct headerTagTableEntry ** tagMatch,
+ /*@out@*/const struct headerSprintfExtension ** extMatch)
{
const struct headerTagTableEntry * entry;
const struct headerSprintfExtension * ext;
/* forward ref */
static int parseExpression(struct sprintfToken * token, char * str,
- const struct headerTagTableEntry * tags,
- const struct headerSprintfExtension * extensions,
- char ** endPtr, char ** error);
+ const struct headerTagTableEntry * tags,
+ const struct headerSprintfExtension * extensions,
+ /*@out@*/char ** endPtr, /*@out@*/const char ** error);
static int parseFormat(char * str, const struct headerTagTableEntry * tags,
- const struct headerSprintfExtension * extensions,
- struct sprintfToken ** formatPtr, int * numTokensPtr,
- char ** endPtr, int state, char ** error)
+ const struct headerSprintfExtension * extensions,
+ /*@out@*/struct sprintfToken ** formatPtr, /*@out@*/int * numTokensPtr,
+ /*@out@*/char ** endPtr, int state, /*@out@*/const char ** error)
{
char * chptr, * start, * next, * dst;
struct sprintfToken * format;
} else {
*dst++ = *start++;
}
+ break;
}
}
}
static int parseExpression(struct sprintfToken * token, char * str,
- const struct headerTagTableEntry * tags,
- const struct headerSprintfExtension * extensions,
- char ** endPtr, char ** error)
+ const struct headerTagTableEntry * tags,
+ const struct headerSprintfExtension * extensions,
+ /*@out@*/char ** endPtr, /*@out@*/const char ** error)
{
char * chptr, * end;
const struct headerTagTableEntry * tag;
return 0;
}
-static int getExtension(Header h, headerTagTagFunction fn, int_32 * typeptr,
- void ** data, int_32 * countptr,
+static int getExtension(Header h, headerTagTagFunction fn, /*@out@*/int_32 * typeptr,
+ /*@out@*/void ** data, /*@out@*/int_32 * countptr,
struct extensionCache * ext)
{
if (!ext->avail) {
default:
val = malloc(20);
strcpy(val, _("(unknown type)"));
+ break;
}
return val;
}
static void freeExtensionCache(const struct headerSprintfExtension * extensions,
- struct extensionCache * cache)
+ /*@only@*/struct extensionCache * cache)
{
const struct headerSprintfExtension * ext = extensions;
int i = 0;
char * headerSprintf(Header h, const char * origFmt,
const struct headerTagTableEntry * tags,
const struct headerSprintfExtension * extensions,
- char ** error)
+ const char ** error)
{
char * fmtString;
struct sprintfToken * format;
}
static char * octalFormat(int_32 type, const void * data,
- char * formatPrefix, int padding, int element)
+ char * formatPrefix, int padding, /*@unused@*/int element)
{
char * val;
}
static char * hexFormat(int_32 type, const void * data,
- char * formatPrefix, int padding, int element)
+ char * formatPrefix, int padding, /*@unused@*/int element)
{
char * val;
}
static char * realDateFormat(int_32 type, const void * data,
- char * formatPrefix, int padding, int element,
- char * strftimeFormat)
+ char * formatPrefix, int padding, /*@unused@*/int element,
+ char * strftimeFormat)
{
char * val;
struct tm * tstruct;
}
static char * shescapeFormat(int_32 type, const void * data,
- char * formatPrefix, int padding, int element)
+ char * formatPrefix, int padding, /*@unused@*/int element)
{
char * result, * dst, * src, * buf;