File-Map
view release on metacpan or search on metacpan
lib/File/Map.xs view on Meta::CPAN
void S_map_file(pTHX_ SV* var, SV* filename, SV* mode, Off_t offset, SV* length_sv) {
STRLEN mode_len;
const char* mode_raw = SvPV(mode, mode_len);
if (memchr(mode_raw, ':', mode_len) == NULL) {
SV* newmode = sv_2mortal(newSVsv(mode));
sv_catpvs(newmode, ":raw");
mode_raw = SvPV(newmode, mode_len);
}
GV* gv = MUTABLE_GV(sv_2mortal(newSV_type(SVt_NULL)));
gv_init_pvn(gv, CopSTASH(PL_curcop), "__ANONIO__", 10, GV_ADDMULTI);
if (!do_openn(gv, mode_raw, mode_len, 0, 0, 0, NULL, &filename, 1))
Perl_croak(aTHX_ "Couldn't open file %s: %s", SvPV_nolen(filename), strerror(errno));
map_handle(var, IoIFP(GvIO(gv)), mode, offset, length_sv);
}
#define map_file(var, filename, mode, offset, length) S_map_file(aTHX_ var, filename, mode, offset, length)
static const map flags = {
{ STR_WITH_LEN("shared") , MAP_SHARED },
{ STR_WITH_LEN("private"), MAP_PRIVATE },
};
( run in 0.823 second using v1.01-cache-2.11-cpan-96521ef73a4 )