rpm 5.2.1
|
00001 /*@-sizeoftype@*/ 00006 #include "system.h" 00007 00008 #define _RPMTAG_INTERNAL 00009 #include <header_internal.h> 00010 00011 #include "debug.h" 00012 00016 /*@observer@*/ /*@unchecked@*/ 00017 int rpm_typeAlign[16] = { 00018 1, 00019 1, 00020 1, 00021 2, 00022 4, 00023 8, 00024 1, 00025 1, 00026 1, 00027 1, 00028 0, 00029 0, 00030 0, 00031 0, 00032 0, 00033 0 00034 }; 00035 00036 int headerVerifyInfo(rpmuint32_t il, rpmuint32_t dl, const void * pev, void * iv, int negate) 00037 { 00038 /*@-castexpose@*/ 00039 entryInfo pe = (entryInfo) pev; 00040 /*@=castexpose@*/ 00041 entryInfo info = iv; 00042 rpmuint32_t i; 00043 00044 for (i = 0; i < il; i++) { 00045 info->tag = (rpmuint32_t) ntohl(pe[i].tag); 00046 info->type = (rpmuint32_t) ntohl(pe[i].type); 00047 /* XXX Convert RPMTAG_FILESTATE to RPM_UINT8_TYPE. */ 00048 if (info->tag == 1029 && info->type == 1) { 00049 info->type = RPM_UINT8_TYPE; 00050 pe[i].type = (rpmuint32_t) htonl(info->type); 00051 } 00052 info->offset = (rpmint32_t) ntohl(pe[i].offset); 00053 assert(negate || info->offset >= 0); /* XXX insurance */ 00054 if (negate) 00055 info->offset = -info->offset; 00056 info->count = (rpmuint32_t) ntohl(pe[i].count); 00057 00058 if (hdrchkType(info->type)) 00059 return (int)i; 00060 if (hdrchkAlign(info->type, info->offset)) 00061 return (int)i; 00062 if (!negate && hdrchkRange((rpmint32_t)dl, info->offset)) 00063 return (int)i; 00064 if (hdrchkData(info->count)) 00065 return (int)i; 00066 00067 } 00068 return -1; 00069 } 00070 /*@=sizeoftype@*/