00001
00002
00003
00004
00005
00006
00007
00008
00009 #include <stdio.h>
00010 #include <string.h>
00011 #include "antiword.h"
00012
00013 #if defined(DEBUG)
00014 #define ELEMENTS_TO_ADD 3
00015 #else
00016 #define ELEMENTS_TO_ADD 30
00017 #endif
00018
00019
00020 static UCHAR **ppAnchor = NULL;
00021 static size_t tNextFree = 0;
00022 static size_t tMaxElements = 0;
00023
00024
00025
00026
00027
00028 void
00029 vDestroyPropModList(void)
00030 {
00031 size_t tIndex;
00032
00033 DBG_MSG("vDestroyPropModList");
00034
00035
00036 for (tIndex = 0; tIndex < tNextFree; tIndex++) {
00037 ppAnchor[tIndex] = xfree(ppAnchor[tIndex]);
00038 }
00039
00040 ppAnchor = xfree(ppAnchor);
00041
00042 tNextFree = 0;
00043 tMaxElements = 0;
00044 }
00045
00046
00047
00048
00049 void
00050 vAdd2PropModList(const UCHAR *aucPropMod)
00051 {
00052 size_t tSize, tLen;
00053
00054 fail(aucPropMod == NULL);
00055
00056 NO_DBG_MSG("vAdd2PropModList");
00057
00058 if (tNextFree >= tMaxElements) {
00059 tMaxElements += ELEMENTS_TO_ADD;
00060 tSize = tMaxElements * sizeof(UCHAR **);
00061 ppAnchor = xrealloc(ppAnchor, tSize);
00062 }
00063 NO_DBG_DEC(tNextFree);
00064
00065 tLen = 2 + (size_t)usGetWord(0, aucPropMod);
00066 NO_DBG_HEX(tLen);
00067 NO_DBG_PRINT_BLOCK(pucPropMod, tLen);
00068 ppAnchor[tNextFree] = xmalloc(tLen);
00069 memcpy(ppAnchor[tNextFree], aucPropMod, tLen);
00070 tNextFree++;
00071 }
00072
00073
00074
00075
00076 const UCHAR *
00077 aucReadPropModListItem(USHORT usPropMod)
00078 {
00079 static UCHAR aucBuffer[4];
00080 size_t tIndex;
00081
00082 if (usPropMod == IGNORE_PROPMOD) {
00083
00084 return NULL;
00085 }
00086
00087 if (!odd(usPropMod)) {
00088
00089 aucBuffer[0] = 2;
00090 aucBuffer[1] = 0;
00091 aucBuffer[2] = (UCHAR)((usPropMod & 0x00fe) >> 1);
00092 aucBuffer[3] = (UCHAR)((usPropMod & 0xff00) >> 8);
00093 return aucBuffer;
00094 }
00095
00096 if (ppAnchor == NULL) {
00097
00098 return NULL;
00099 }
00100
00101
00102 tIndex = (size_t)(usPropMod >> 1);
00103 if (tIndex >= tNextFree) {
00104 DBG_HEX(usPropMod);
00105 DBG_DEC(tIndex);
00106 DBG_DEC(tNextFree);
00107 return NULL;
00108 }
00109 return ppAnchor[tIndex];
00110 }