Devel-Mallinfo
view release on metacpan or search on metacpan
Mallinfo.xs view on Meta::CPAN
{
char buf[256];
int got;
sv_setpvn (sv, "", 0);
for (;;) {
got = fread (buf, 1, sizeof(buf), fp);
if (got == 0)
return;
sv_catpvn (sv, buf, got);
}
}
#endif
MODULE = Devel::Mallinfo PACKAGE = Devel::Mallinfo
HV *
mallinfo ()
CODE:
{
#if HAVE_MALLINFO
struct mallinfo m;
/* grab the info before building the hash return, so as not to include
that in "current" usage */
m = mallinfo();
#endif
RETVAL = newHV();
sv_2mortal((SV*)RETVAL);
/**/
#if HAVE_MALLINFO
#define FIELD(field) \
do { \
SV *val = newSViv (m.field); \
if (! hv_stores (RETVAL, #field, val)) \
goto store_error; \
} while (0)
STRUCT_MALLINFO_FIELDS;
goto done;
store_error:
croak ("cannot store to hash");
done:
;
#endif
}
OUTPUT:
RETVAL
#if HAVE_MALLOC_INFO
int
malloc_info (options, fp)
int options
FILE *fp
void
malloc_info_string (options)
int options
PPCODE:
{
FILE *fp;
SV *ret = &PL_sv_undef;
int err;
fp = tmpfile();
if (fp != NULL) {
err = malloc_info (options, fp);
if (err != 0) {
errno = err;
} else if (ferror (fp)) {
/* write error to fp */
} else {
SV *sv;
rewind (fp);
sv = sv_newmortal();
slurp_fp_to_sv (fp, sv);
if (! ferror (fp))
ret = sv;
}
if (fclose (fp) != 0) {
ret = &PL_sv_undef;
}
}
PUSHs(ret);
}
#endif
#if HAVE_MALLOC_STATS
void
malloc_stats ()
#endif
#if HAVE_MALLOC_TRIM
int
malloc_trim (leave)
size_t leave
#endif
( run in 0.329 second using v1.01-cache-2.11-cpan-5511b514fd6 )