From: zwelch Date: Fri, 8 May 2009 05:30:37 +0000 (+0000) Subject: Fix loadFile to return file length once again. X-Git-Tag: v0.2.0~844 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=6d60d226874d2a8310550f41b3fef81139f582a1;p=openocd Fix loadFile to return file length once again. git-svn-id: svn://svn.berlios.de/openocd/trunk@1661 b42882b7-edfa-0310-969c-e2dbd0fdcd60 --- diff --git a/src/helper/ioutil.c b/src/helper/ioutil.c index 66908aff..51f58f0f 100644 --- a/src/helper/ioutil.c +++ b/src/helper/ioutil.c @@ -91,6 +91,9 @@ int handle_rm_command(struct command_context_s *cmd_ctx, char *cmd, * a 0 byte(sentinel) after len bytes - the length of the file. */ int loadFile(const char *fileName, void **data, size_t *len) { + // ensure returned length is always sane + *len = 0; + FILE * pFile; pFile = fopen(fileName,"rb"); if (pFile==NULL) @@ -111,6 +114,7 @@ int loadFile(const char *fileName, void **data, size_t *len) fclose(pFile); return ERROR_FAIL; } + *len = fsize; if (fseek(pFile, 0, SEEK_SET)!=0) { @@ -118,7 +122,7 @@ int loadFile(const char *fileName, void **data, size_t *len) fclose(pFile); return ERROR_FAIL; } - *data = malloc(fsize + 1); + *data = malloc(*len + 1); if (*data==NULL) { LOG_ERROR("Can't open %s\n", fileName); @@ -134,12 +138,12 @@ int loadFile(const char *fileName, void **data, size_t *len) return ERROR_FAIL; } fclose(pFile); - *(((char *)(*data))+*len)=0; /* sentinel */ - - return ERROR_OK; - + // 0-byte after buffer (not included in *len) serves as a sentinel + char *buf = (char *)*data; + buf[*len = 0; + return ERROR_OK; }