/* This file is part of the Mac::NSGetExecutablePath Perl module. * See http://search.cpan.org/dist/Mac-NSGetExecutablePath/ */ #define PERL_NO_GET_CONTEXT #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include static const char nsgep_too_long[] = "NSGetExecutablePath() wants to return a path too large"; /* --- XS ------------------------------------------------------------------ */ MODULE = Mac::NSGetExecutablePath PACKAGE = Mac::NSGetExecutablePath PROTOTYPES: ENABLE void NSGetExecutablePath() PROTOTYPE: PREINIT: char buf[1]; uint32_t size = sizeof buf; SV *dst; char *buffer; PPCODE: _NSGetExecutablePath(buf, &size); if (size >= MAXPATHLEN * MAXPATHLEN) croak(nsgep_too_long); dst = sv_newmortal(); sv_upgrade(dst, SVt_PV); buffer = SvGROW(dst, size); if (_NSGetExecutablePath(buffer, &size)) croak(nsgep_too_long); if (size) SvCUR_set(dst, size - 1); SvPOK_on(dst); XPUSHs(dst); XSRETURN(1);