summaryrefslogtreecommitdiff
path: root/rts/RtsUtils.c
diff options
context:
space:
mode:
authorErik de Castro Lopo <erikd@mega-nerd.com>2016-05-12 15:45:10 +0200
committerBen Gamari <ben@smart-cactus.org>2016-05-12 17:33:39 +0200
commit0c0129b6a82a87a9bba19f27a4b19fec9ccc5a8d (patch)
treec5bea455e1206e334f1f1046aadf13adf5464fbd /rts/RtsUtils.c
parent995cf0f356ef3a8b7a394de640a853fd6ca9c2b5 (diff)
downloadhaskell-0c0129b6a82a87a9bba19f27a4b19fec9ccc5a8d.tar.gz
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
Diffstat (limited to 'rts/RtsUtils.c')
-rw-r--r--rts/RtsUtils.c22
1 files changed, 9 insertions, 13 deletions
diff --git a/rts/RtsUtils.c b/rts/RtsUtils.c
index c83714337e..716d203462 100644
--- a/rts/RtsUtils.c
+++ b/rts/RtsUtils.c
@@ -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);