-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathinternals.c
73 lines (64 loc) · 1.87 KB
/
internals.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
XS(XS_Internals_PAR_BOOT) {
GV* tmpgv;
int i;
char *buf;
TAINT;
if (!(buf = par_getenv("PAR_INITIALIZED")) || buf[0] != '1' || buf[1] != '\0') {
par_init_env();
}
if ((tmpgv = gv_fetchpv("\030",TRUE, SVt_PV))) {/* $^X */
#ifdef WIN32
sv_setpv(GvSV(tmpgv),"perl.exe");
#else
sv_setpv(GvSV(tmpgv),"perl");
#endif
SvSETMAGIC(GvSV(tmpgv));
}
if ((tmpgv = gv_fetchpv("0", TRUE, SVt_PV))) {/* $0 */
char *prog = NULL;
if ( ( prog = par_getenv("PAR_PROGNAME") ) ) {
sv_setpv(GvSV(tmpgv), prog);
}
else {
#ifdef HAS_PROCSELFEXE
S_procself_val(aTHX_ GvSV(tmpgv), fakeargv[0]);
#else
#ifdef OS2
sv_setpv(GvSV(tmpgv), os2_execname(aTHX));
#else
prog = par_current_exec();
if( prog != NULL ) {
sv_setpv( GvSV(tmpgv), prog );
free( prog );
}
else {
sv_setpv(GvSV(tmpgv), fakeargv[0]);
}
#endif
#endif
}
}
/* PAR::Packer isn't included in a packed executable, but we provide
* this scalar so that a packed script may refer to the version
* of PAR::Packer it was built with.
*/
sv_setpv(get_sv("PAR::Packer::VERSION", GV_ADD), stringify(PAR_PACKER_VERSION));
TAINT_NOT;
/* create temporary PAR directory */
stmpdir = par_getenv("PAR_TEMP");
if ( !stmpdir ) {
stmpdir = par_mktmpdir( fakeargv );
if ( !stmpdir )
croak("Unable to create cache directory");
}
i = PerlDir_mkdir(stmpdir, 0700);
if ( (i != 0) && (i != EEXIST) && (i != -1) ) {
croak("%s: creation of private cache subdirectory %s failed (errno=%i)\n",
fakeargv[0], stmpdir, i);
}
}
static void par_xs_init(pTHX)
{
xs_init(aTHX);
newXSproto("Internals::PAR::BOOT", XS_Internals_PAR_BOOT, "", "");
}