Module Name: src Committed By: snj Date: Mon Oct 23 18:34:51 UTC 2017
Modified Files: src/usr.sbin/mtree [netbsd-7-0]: only.c Log Message: Pull up following revision(s) (requested by nakayama in ticket #1506): usr.sbin/mtree/only.c: revision 1.3 Don't modify strings stored in hash, otherwise filling up of directory hierarchy stops if the same hash value occurs in directory and leaf. Fix the issue that "./usr/share/locale/pl/LC_MESSAGES/gettext-tools.mo" isn't included in sets file in the case of MKUNPRIVED=no. To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.2.14.1 src/usr.sbin/mtree/only.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.sbin/mtree/only.c diff -u src/usr.sbin/mtree/only.c:1.2 src/usr.sbin/mtree/only.c:1.2.14.1 --- src/usr.sbin/mtree/only.c:1.2 Tue Feb 5 00:59:03 2013 +++ src/usr.sbin/mtree/only.c Mon Oct 23 18:34:50 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: only.c,v 1.2 2013/02/05 00:59:03 christos Exp $ */ +/* $NetBSD: only.c,v 1.2.14.1 2017/10/23 18:34:50 snj Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -38,7 +38,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) && !defined(lint) -__RCSID("$NetBSD: only.c,v 1.2 2013/02/05 00:59:03 christos Exp $"); +__RCSID("$NetBSD: only.c,v 1.2.14.1 2017/10/23 18:34:50 snj Exp $"); #endif #include <sys/param.h> @@ -89,11 +89,14 @@ static void hash_insert(char *str, uint32_t h) { struct hentry *e; + char *x; if ((e = malloc(sizeof(*e))) == NULL) mtree_err("memory allocation error"); + if ((x = strdup(str)) == NULL) + mtree_err("memory allocation error"); - e->str = str; + e->str = x; e->hash = h; e->next = table[h]; table[h] = e; @@ -110,10 +113,7 @@ fill(char *str) *ptr = '\0'; if (!hash_find(str, &h)) { - char *x = strdup(str); - if (x == NULL) - mtree_err("memory allocation error"); - hash_insert(x, h); + hash_insert(str, h); fill(str); } *ptr = '/'; @@ -135,6 +135,7 @@ load_only(const char *fname) err(1, "Duplicate entry %s", line); hash_insert(line, h); fill(line); + free(line); } fclose(fp);