aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2009-04-27 01:38:15 +0000
committerJo-Philipp Wich <jow@openwrt.org>2009-04-27 01:38:15 +0000
commit67c247686c92b23edded4024ec995bd0568ae443 (patch)
tree3150fb23657fd296cc426e22241c3baed06759c7
parentf77221b3ca8b6b17221d0b48a04a308afdaa23ed (diff)
downloadupstream-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
-rw-r--r--package/unvram/Makefile2
-rw-r--r--package/unvram/src/nvram.c37
-rw-r--r--package/unvram/src/nvram.h4
3 files changed, 22 insertions, 21 deletions
diff --git a/package/unvram/Makefile b/package/unvram/Makefile
index 2fab89a634..c62873e6fb 100644
--- a/package/unvram/Makefile
+++ b/package/unvram/Makefile
@@ -8,7 +8,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=unvram
-PKG_RELEASE:=2
+PKG_RELEASE:=3
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
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 */