From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yin Kangkai Date: Mon, 02 Aug 2010 03:43:53 +0000 Subject: [PATCH 2/2] malloc -> calloc and fix some memory leaks. Message-Id: <20100802034353.GK29131@kai-debian> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: linux-hotplug@vger.kernel.org >From fd81bea16d3e1e93aebc8cb80ec16ae9c20c6e41 Mon Sep 17 00:00:00 2001 From: Yin Kangkai Date: Mon, 2 Aug 2010 11:22:49 +0800 Subject: [PATCH 2/2] malloc -> calloc and fix some memory leaks. calloc so that we do not need to memset each of them. Signed-off-by: Yin Kangkai --- udev/udev-rules.c | 24 ++++++++++++++++-------- udev/udevd.c | 6 ++++-- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/udev/udev-rules.c b/udev/udev-rules.c index 6d32e73..072b31b 100644 --- a/udev/udev-rules.c +++ b/udev/udev-rules.c @@ -1751,23 +1751,27 @@ struct udev_rules *udev_rules_new(struct udev *udev, int resolve_names) struct udev_list_entry *file_loop, *file_tmp; struct token end_token; - rules = malloc(sizeof(struct udev_rules)); + rules = calloc(1, sizeof(struct udev_rules)); if (rules = NULL) return NULL; - memset(rules, 0x00, sizeof(struct udev_rules)); rules->udev = udev; rules->resolve_names = resolve_names; udev_list_init(&file_list); /* init token array and string buffer */ - rules->tokens = malloc(PREALLOC_TOKEN * sizeof(struct token)); - if (rules->tokens = NULL) + rules->tokens = calloc(PREALLOC_TOKEN, sizeof(struct token)); + if (rules->tokens = NULL) { + free(rules); return NULL; + } rules->token_max = PREALLOC_TOKEN; - rules->buf = malloc(PREALLOC_STRBUF); - if (rules->buf = NULL) + rules->buf = calloc(1, PREALLOC_STRBUF); + if (rules->buf = NULL) { + free(rules->tokens); + free(rules); return NULL; + } rules->buf_max = PREALLOC_STRBUF; /* offset 0 is always '\0' */ rules->buf[0] = '\0'; @@ -1775,9 +1779,13 @@ struct udev_rules *udev_rules_new(struct udev *udev, int resolve_names) dbg(udev, "prealloc %zu bytes tokens (%u * %zu bytes), %zu bytes buffer\n", rules->token_max * sizeof(struct token), rules->token_max, sizeof(struct token), rules->buf_max); - rules->trie_nodes = malloc(PREALLOC_TRIE * sizeof(struct trie_node)); - if (rules->trie_nodes = NULL) + rules->trie_nodes = calloc(PREALLOC_TRIE, sizeof(struct trie_node)); + if (rules->trie_nodes = NULL) { + free(rules->buf); + free(rules->tokens); + free(rules); return NULL; + } rules->trie_nodes_max = PREALLOC_TRIE; /* offset 0 is the trie root, with an empty string */ memset(rules->trie_nodes, 0x00, sizeof(struct trie_node)); diff --git a/udev/udevd.c b/udev/udevd.c index 95d4ad8..b882479 100644 --- a/udev/udevd.c +++ b/udev/udevd.c @@ -227,8 +227,10 @@ static void worker_new(struct event *event) udev_monitor_enable_receiving(worker_monitor); worker = calloc(1, sizeof(struct worker)); - if (worker = NULL) + if (worker = NULL) { + udev_monitor_unref(worker_monitor); return; + } /* worker + event reference */ worker->refcount = 2; worker->udev = event->udev; @@ -655,7 +657,7 @@ static int handle_inotify(struct udev *udev) if ((ioctl(pfd[FD_INOTIFY].fd, FIONREAD, &nbytes) < 0) || (nbytes <= 0)) return 0; - buf = malloc(nbytes); + buf = calloc(1, nbytes); if (buf = NULL) { err(udev, "error getting buffer for inotify\n"); return -1; -- 1.6.5