aboutsummaryrefslogtreecommitdiff
path: root/src/platform
diff options
context:
space:
mode:
Diffstat (limited to 'src/platform')
-rw-r--r--src/platform/posix/posix_alloc.c4
-rw-r--r--src/platform/posix/posix_file.c20
-rw-r--r--src/platform/windows/win_file.c21
-rw-r--r--src/platform/windows/win_thread.c4
4 files changed, 29 insertions, 20 deletions
diff --git a/src/platform/posix/posix_alloc.c b/src/platform/posix/posix_alloc.c
index f4b0245c..f0847408 100644
--- a/src/platform/posix/posix_alloc.c
+++ b/src/platform/posix/posix_alloc.c
@@ -17,13 +17,13 @@
void *
nni_alloc(size_t sz)
{
- return (malloc(sz));
+ return (sz > 0 ? malloc(sz) : NULL);
}
void *
nni_zalloc(size_t sz)
{
- return (calloc(1, sz));
+ return (sz > 0 ? calloc(1, sz) : NULL);
}
void
diff --git a/src/platform/posix/posix_file.c b/src/platform/posix/posix_file.c
index b21c0509..5d918d6b 100644
--- a/src/platform/posix/posix_file.c
+++ b/src/platform/posix/posix_file.c
@@ -115,14 +115,18 @@ nni_plat_file_get(const char *name, void **datap, size_t *lenp)
}
len = st.st_size;
- if ((data = nni_alloc(len)) == NULL) {
- rv = NNG_ENOMEM;
- goto done;
- }
- if (fread(data, 1, len, f) != len) {
- rv = nni_plat_errno(errno);
- nni_free(data, len);
- goto done;
+ if (len > 0) {
+ if ((data = nni_alloc(len)) == NULL) {
+ rv = NNG_ENOMEM;
+ goto done;
+ }
+ if (fread(data, 1, len, f) != len) {
+ rv = nni_plat_errno(errno);
+ nni_free(data, len);
+ goto done;
+ }
+ } else {
+ data = NULL;
}
*datap = data;
*lenp = len;
diff --git a/src/platform/windows/win_file.c b/src/platform/windows/win_file.c
index 3b6461a6..47bb87af 100644
--- a/src/platform/windows/win_file.c
+++ b/src/platform/windows/win_file.c
@@ -136,14 +136,19 @@ nni_plat_file_get(const char *name, void **datap, size_t *lenp)
rv = nni_win_error(GetLastError());
goto done;
}
- if ((data = nni_alloc((size_t) sz)) == NULL) {
- rv = NNG_ENOMEM;
- goto done;
- }
- if (!ReadFile(h, data, sz, &nread, NULL)) {
- rv = nni_win_error(GetLastError());
- nni_free(data, sz);
- goto done;
+ if (sz > 0) {
+ if ((data = nni_alloc((size_t) sz)) == NULL) {
+ rv = NNG_ENOMEM;
+ goto done;
+ }
+ if (!ReadFile(h, data, sz, &nread, NULL)) {
+ rv = nni_win_error(GetLastError());
+ nni_free(data, sz);
+ goto done;
+ }
+ } else {
+ data = NULL;
+ nread = 0;
}
// We can get a short read, indicating end of file. We return
diff --git a/src/platform/windows/win_thread.c b/src/platform/windows/win_thread.c
index d6363207..3b4e63bc 100644
--- a/src/platform/windows/win_thread.c
+++ b/src/platform/windows/win_thread.c
@@ -19,13 +19,13 @@
void *
nni_alloc(size_t sz)
{
- return (malloc(sz));
+ return (sz > 0 ? malloc(sz) : NULL);
}
void *
nni_zalloc(size_t sz)
{
- return (calloc(1, sz));
+ return (sz > 0 ? calloc(1, sz) : NULL);
}
void