summaryrefslogtreecommitdiff
path: root/examples/io.c
diff options
context:
space:
mode:
authorNiels Möller <nisse@lysator.liu.se>2002-10-01 17:31:54 +0200
committerNiels Möller <nisse@lysator.liu.se>2002-10-01 17:31:54 +0200
commitc15818546258359c64db2bfe7158fa26e95fcae4 (patch)
treef1da4a71be139fcddd4f3702cf70a0bafdeb3472 /examples/io.c
parent577e1b4fa7bc473a5caee7d9dddaa6b1f8b2a1ca (diff)
downloadnettle-c15818546258359c64db2bfe7158fa26e95fcae4.tar.gz
* examples/io.c (read_file): Bug fix, used to overwrite pointer.
Rev: src/nettle/examples/io.c:1.2
Diffstat (limited to 'examples/io.c')
-rw-r--r--examples/io.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/examples/io.c b/examples/io.c
index 8ce412c0..5584c110 100644
--- a/examples/io.c
+++ b/examples/io.c
@@ -52,17 +52,18 @@ werror(const char *format, ...)
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
unsigned
-read_file(const char *name, unsigned max_size, char **buffer)
+read_file(const char *name, unsigned max_size, char **contents)
{
unsigned size;
unsigned done;
+ char *buffer;
FILE *f;
f = fopen(name, "rb");
if (!f)
return 0;
- *buffer = NULL;
+ buffer = NULL;
if (max_size && max_size < 100)
size = max_size;
@@ -75,22 +76,22 @@ read_file(const char *name, unsigned max_size, char **buffer)
{
char *p;
- if (size > max_size)
+ if (max_size && size > max_size)
size = max_size;
/* Space for terminating NUL */
- p = realloc(*buffer, size + 1);
+ p = realloc(buffer, size + 1);
if (!p)
{
fail:
fclose(f);
- free(*buffer);
- *buffer = NULL;
+ free(buffer);
+ *contents = NULL;
return 0;
}
- *buffer = p;
+ buffer = p;
done += fread(buffer + done, 1, size - done, f);
if (ferror(f))
@@ -100,7 +101,9 @@ read_file(const char *name, unsigned max_size, char **buffer)
fclose(f);
/* NUL-terminate the data. */
- (*buffer)[done] = '\0';
+ buffer[done] = '\0';
+ *contents = buffer;
+
return done;
}