static int dynamicSeek (struct gdIOCtx *ctx, const int pos) { int bytesNeeded; dynamicPtr *dp; dpIOCtx *dctx; dctx = (dpIOCtx *) ctx; dp = dctx->dp; if (!dp->dataGood) { return FALSE; } bytesNeeded = pos; if (bytesNeeded > dp->realSize) { /* 2.0.21 */ if (!dp->freeOK) { return FALSE; } gdReallocDynamic (dp, dp->realSize * 2); } /* if we get here, we can be sure that we have enough bytes to copy safely */ /* Extend the logical size if we seek beyond EOF. */ if (pos > dp->logicalSize) { dp->logicalSize = pos; } dp->pos = pos; return TRUE; }
/* append bytes to the end of a dynamic pointer */ static int appendDynamic (dynamicPtr * dp, const void *src, int size) { int bytesNeeded; char *tmp; if (!dp->dataGood) { return FALSE; } /* bytesNeeded = dp->logicalSize + size; */ bytesNeeded = dp->pos + size; if (bytesNeeded > dp->realSize) { /* 2.0.21 */ if (!dp->freeOK) { return FALSE; } gdReallocDynamic(dp, bytesNeeded * 2); } /* if we get here, we can be sure that we have enough bytes to copy safely */ /*printf("Mem OK Size: %d, Pos: %d\n", dp->realSize, dp->pos); */ tmp = (char *) dp->data; memcpy((void *) (tmp + (dp->pos)), src, size); dp->pos += size; if (dp->pos > dp->logicalSize) { dp->logicalSize = dp->pos; } return TRUE; }
/* trim pointer so that its real and logical sizes match */ static int trimDynamic (dynamicPtr * dp) { /* 2.0.21: we don't reallocate memory we don't own */ if (!dp->freeOK) { return FALSE; } return gdReallocDynamic(dp, dp->logicalSize); }
/* trim pointer so that its real and logical sizes match */ static int trimDynamic (dynamicPtr * dp) { return gdReallocDynamic (dp, dp->logicalSize); }