diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2009-04-27 01:38:15 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2009-04-27 01:38:15 +0000 |
commit | 67c247686c92b23edded4024ec995bd0568ae443 (patch) | |
tree | 3150fb23657fd296cc426e22241c3baed06759c7 /package/unvram/src | |
parent | f77221b3ca8b6b17221d0b48a04a308afdaa23ed (diff) | |
download | upstream-67c247686c92b23edded4024ec995bd0568ae443.tar.gz upstream-67c247686c92b23edded4024ec995bd0568ae443.tar.bz2 upstream-67c247686c92b23edded4024ec995bd0568ae443.zip |
[package] unvram: get rid of some memory leaks
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@15430 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/unvram/src')
-rw-r--r-- | package/unvram/src/nvram.c | 37 | ||||
-rw-r--r-- | package/unvram/src/nvram.h | 4 |
2 files changed, 21 insertions, 20 deletions
diff --git a/package/unvram/src/nvram.c b/package/unvram/src/nvram.c index a5f1d43508..78baa9431d 100644 --- a/package/unvram/src/nvram.c +++ b/package/unvram/src/nvram.c @@ -338,6 +338,7 @@ int nvram_commit(nvram_handle_t *h) nvram_handle_t * nvram_open(const char *file, int rdonly) { int fd; + char *mtd = NULL; nvram_handle_t *h; nvram_header_t *header; @@ -345,16 +346,14 @@ nvram_handle_t * nvram_open(const char *file, int rdonly) if( (nvram_erase_size == 0) || (file == NULL) ) { /* Finding the mtd will set the appropriate erase size */ - if( file == NULL ) - file = nvram_find_mtd(); - else - (void) nvram_find_mtd(); - - if( nvram_erase_size == 0 ) + if( (mtd = nvram_find_mtd()) == NULL || nvram_erase_size == 0 ) + { + free(mtd); return NULL; + } } - if( (fd = open(file, O_RDWR)) > -1 ) + if( (fd = open(file ? file : mtd, O_RDWR)) > -1 ) { char *mmap_area = (char *) mmap( NULL, nvram_erase_size, PROT_READ | PROT_WRITE, @@ -377,6 +376,7 @@ nvram_handle_t * nvram_open(const char *file, int rdonly) if( header->magic == NVRAM_MAGIC ) { _nvram_rehash(h); + free(mtd); return h; } else @@ -388,6 +388,7 @@ nvram_handle_t * nvram_open(const char *file, int rdonly) } } + free(mtd); return NULL; } @@ -403,7 +404,7 @@ int nvram_close(nvram_handle_t *h) } /* Determine NVRAM device node. */ -const char * nvram_find_mtd(void) +char * nvram_find_mtd(void) { FILE *fp; int i, esz; @@ -411,13 +412,11 @@ const char * nvram_find_mtd(void) char *path = NULL; struct stat s; - // "/dev/mtdblock/" + ( 0 < x < 99 ) + \0 = 19 - if( (path = (char *) malloc(19)) == NULL ) - return NULL; - - if ((fp = fopen("/proc/mtd", "r"))) { - while (fgets(dev, sizeof(dev), fp)) { - if (strstr(dev, "nvram") && sscanf(dev, "mtd%d: %08x", &i, &esz)) + if( (fp = fopen("/proc/mtd", "r")) ) + { + while( fgets(dev, sizeof(dev), fp) ) + { + if( strstr(dev, "nvram") && sscanf(dev, "mtd%d: %08x", &i, &esz) ) { nvram_erase_size = esz; @@ -451,7 +450,7 @@ const char * nvram_find_mtd(void) } /* Check NVRAM staging file. */ -const char * nvram_find_staging(void) +char * nvram_find_staging(void) { struct stat s; @@ -467,7 +466,7 @@ const char * nvram_find_staging(void) int nvram_to_staging(void) { int fdmtd, fdstg, stat; - const char *mtd = nvram_find_mtd(); + char *mtd = nvram_find_mtd(); char buf[nvram_erase_size]; stat = -1; @@ -492,6 +491,7 @@ int nvram_to_staging(void) } } + free(mtd); return stat; } @@ -499,7 +499,7 @@ int nvram_to_staging(void) int staging_to_nvram(void) { int fdmtd, fdstg, stat; - const char *mtd = nvram_find_mtd(); + char *mtd = nvram_find_mtd(); char buf[nvram_erase_size]; stat = -1; @@ -526,5 +526,6 @@ int staging_to_nvram(void) } } + free(mtd); return stat; } diff --git a/package/unvram/src/nvram.h b/package/unvram/src/nvram.h index b718928c0e..e3d64613d4 100644 --- a/package/unvram/src/nvram.h +++ b/package/unvram/src/nvram.h @@ -90,7 +90,7 @@ uint8_t hndcrc8 (uint8_t * pdata, uint32_t nbytes, uint8_t crc); uint8_t nvram_calc_crc(nvram_header_t * nvh); /* Determine NVRAM device node. */ -const char * nvram_find_mtd(void); +char * nvram_find_mtd(void); /* Copy NVRAM contents to staging file. */ int nvram_to_staging(void); @@ -99,7 +99,7 @@ int nvram_to_staging(void); int staging_to_nvram(void); /* Check NVRAM staging file. */ -const char * nvram_find_staging(void); +char * nvram_find_staging(void); /* Staging file for NVRAM */ |