fis-gtm/sr_unix/getstorage.c

58 lines
1.6 KiB
C

/****************************************************************
* *
* Copyright 2001, 2010 Fidelity Information Services, Inc *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
* under a license. If you do not know the terms of *
* the license, please stop and do not read further. *
* *
****************************************************************/
#include "mdef.h"
#include <sys/resource.h>
#include <sys/time.h>
#include <errno.h>
#include "gtm_unistd.h"
#include "getstorage.h"
#define ERRSTR "getrlimit()"
error_def(ERR_SYSCALL);
int4 getstorage(void)
{
struct rlimit rl;
int save_errno;
UINTPTR_T cur_sbrk;
rlim_t size;
if (0 != getrlimit(RLIMIT_DATA,&rl))
{
save_errno = errno;
rts_error(VARLSTCNT(8) ERR_SYSCALL, 5, RTS_ERROR_LITERAL(ERRSTR),
CALLFROM,
save_errno);
}
#if !defined(__MVS__)
cur_sbrk = (UINTPTR_T)sbrk(0); /* Two step conversion to eliminate warnings */
#else
cur_sbrk = 0; /* smw until something better */
#endif
size = rl.rlim_cur - cur_sbrk;
/* #if !defined(GTM64) && defined(INT8_SUPPORTED) */
if (MAXPOSINT4 < size)
size = MAXPOSINT4;
/* Temporarily, all platform return a diminished potential storage value until stack alignment issues on x86_64
* are fixed allowing floats again or a better fix is made.
*
* #elif defined(GTM64)
* if (MAX_LONG_IN_DOUBLE < size)
* size = MAX_LONG_IN_DOUBLE;
* #endif
*/
return size;
}