Commit 0c0129b6 authored by Erik de Castro Lopo's avatar Erik de Castro Lopo Committed by Ben Gamari

RtsUtils: Use `size_t` instead of `int` where appropriate

Functions like `stgMallocBytes` take a size parameter which was of type
`int`, but is commonly used as `stgMallocBytes (sizeof (...))`. This is
problematic because the `sizeof` operator returns `size_t` so that on 64
bit systems, in this common use case the `size_t` parameter would be
truncated to 32 bits when passed to `stgMallocBytes` where it was cast
back to `size_t`.

Test Plan: Validate on Linux, OS X and Windows

Reviewers: austin, hvr, bgamari, simonmar, hsyl20

Reviewed By: hvr, bgamari, simonmar, hsyl20

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D2201
parent 995cf0f3
......@@ -57,13 +57,11 @@ extern char *ctime_r(const time_t *, char *);
-------------------------------------------------------------------------- */
void *
stgMallocBytes (int n, char *msg)
stgMallocBytes (size_t n, char *msg)
{
char *space;
size_t n2;
void *space;
n2 = (size_t) n;
if ((space = (char *) malloc(n2)) == NULL) {
if ((space = malloc(n)) == NULL) {
/* Quoting POSIX.1-2008 (which says more or less the same as ISO C99):
*
* "Upon successful completion with size not equal to 0, malloc() shall
......@@ -85,13 +83,11 @@ stgMallocBytes (int n, char *msg)
}
void *
stgReallocBytes (void *p, int n, char *msg)
stgReallocBytes (void *p, size_t n, char *msg)
{
char *space;
size_t n2;
void *space;
n2 = (size_t) n;
if ((space = (char *) realloc(p, (size_t) n2)) == NULL) {
if ((space = realloc(p, n)) == NULL) {
/* don't fflush(stdout); WORKAROUND bug in Linux glibc */
rtsConfig.mallocFailHook((W_) n, msg); /*msg*/
stg_exit(EXIT_INTERNAL_ERROR);
......@@ -100,11 +96,11 @@ stgReallocBytes (void *p, int n, char *msg)
}
void *
stgCallocBytes (int n, int m, char *msg)
stgCallocBytes (size_t n, size_t m, char *msg)
{
char *space;
void *space;
if ((space = (char *) calloc((size_t) n, (size_t) m)) == NULL) {
if ((space = calloc(n, m)) == NULL) {
/* don't fflush(stdout); WORKAROUND bug in Linux glibc */
rtsConfig.mallocFailHook((W_) n*m, msg); /*msg*/
stg_exit(EXIT_INTERNAL_ERROR);
......
......@@ -18,12 +18,12 @@
void initAllocator(void);
void shutdownAllocator(void);
void *stgMallocBytes(int n, char *msg)
void *stgMallocBytes(size_t n, char *msg)
GNUC3_ATTRIBUTE(__malloc__);
void *stgReallocBytes(void *p, int n, char *msg);
void *stgReallocBytes(void *p, size_t n, char *msg);
void *stgCallocBytes(int n, int m, char *msg)
void *stgCallocBytes(size_t n, size_t m, char *msg)
GNUC3_ATTRIBUTE(__malloc__);
char *stgStrndup(const char *s, size_t n);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment