Browse Source

tools: fix realloc bug.

Reallocing smaller can move the pointer; certainly valgrind detects
it.  Found while chasing intermittant errors on "make fastcheck".
Rusty Russell 14 years ago
parent
commit
73753f596f
1 changed files with 4 additions and 6 deletions
  1. 4 6
      tools/depends.c

+ 4 - 6
tools/depends.c

@@ -235,7 +235,7 @@ char **get_libs(const void *ctx, const char *dir,
 }
 }
 
 
 /* FIXME: This is O(n^2), which is dumb. */
 /* FIXME: This is O(n^2), which is dumb. */
-static void uniquify_deps(char **deps)
+static char **uniquify_deps(char **deps)
 {
 {
 	unsigned int i, j, num;
 	unsigned int i, j, num;
 
 
@@ -251,7 +251,7 @@ static void uniquify_deps(char **deps)
 	}
 	}
 	deps[num] = NULL;
 	deps[num] = NULL;
 	/* Make sure talloc_array_length() works */
 	/* Make sure talloc_array_length() works */
-	deps = talloc_realloc(NULL, deps, char *, num + 1);
+	return talloc_realloc(NULL, deps, char *, num + 1);
 }
 }
 
 
 char **get_deps(const void *ctx, const char *dir,
 char **get_deps(const void *ctx, const char *dir,
@@ -270,8 +270,7 @@ char **get_deps(const void *ctx, const char *dir,
 		unlink(temp);
 		unlink(temp);
 		talloc_free(temp);
 		talloc_free(temp);
 	}
 	}
-	uniquify_deps(ret);
-	return ret;
+	return uniquify_deps(ret);
 }
 }
 
 
 char **get_safe_ccan_deps(const void *ctx, const char *dir,
 char **get_safe_ccan_deps(const void *ctx, const char *dir,
@@ -283,6 +282,5 @@ char **get_safe_ccan_deps(const void *ctx, const char *dir,
 	} else {
 	} else {
 		ret = get_all_deps(ctx, dir, NULL, get_one_safe_deps);
 		ret = get_all_deps(ctx, dir, NULL, get_one_safe_deps);
 	}
 	}
-	uniquify_deps(ret);
-	return ret;
+	return uniquify_deps(ret);
 }
 }