This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
fix a few places that said 'int', but meant 'STRLEN'
[perl5.git] / win32 / runperl.c
CommitLineData
76e3520e
GS
1#include "EXTERN.h"
2#include "perl.h"
3
80252599
GS
4#ifdef PERL_OBJECT
5
565764a8 6#define NO_XSLOCKS
76e3520e 7#include "XSUB.H"
0f4eea8f 8#include "win32iop.h"
c69f6586
GS
9
10#include <fcntl.h>
0f4eea8f 11#include "perlhost.h"
c69f6586 12
c69f6586 13
0f4eea8f
DL
14char *staticlinkmodules[] = {
15 "DynaLoader",
16 NULL,
c69f6586 17};
76e3520e 18
0f4eea8f 19EXTERN_C void boot_DynaLoader _((CV* cv _CPERLarg));
76e3520e 20
0f4eea8f
DL
21static void
22xs_init(CPERLarg)
76e3520e 23{
0f4eea8f
DL
24 char *file = __FILE__;
25 dXSUB_SYS;
26 newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);
27}
76e3520e 28
0f4eea8f 29CPerlObj *pPerl;
76e3520e
GS
30
31#undef PERL_SYS_INIT
32#define PERL_SYS_INIT(a, c)
33
34int
35main(int argc, char **argv, char **env)
36{
c69f6586
GS
37 CPerlHost host;
38 int exitstatus = 1;
80252599
GS
39#ifndef __BORLANDC__
40 /* XXX this _may_ be a problem on some compilers (e.g. Borland) that
41 * want to free() argv after main() returns. As luck would have it,
42 * Borland's CRT does the right thing to argv[0] already. */
43 char szModuleName[MAX_PATH];
44
45 GetModuleFileName(NULL, szModuleName, sizeof(szModuleName));
46 argv[0] = szModuleName;
47#endif
76e3520e 48
80252599 49 if (!host.PerlCreate())
c69f6586 50 exit(exitstatus);
76e3520e 51
0f4eea8f 52 exitstatus = host.PerlParse(xs_init, argc, argv, NULL);
76e3520e 53
c69f6586 54 if (!exitstatus)
c69f6586 55 exitstatus = host.PerlRun();
76e3520e 56
c69f6586 57 host.PerlDestroy();
76e3520e
GS
58
59 return exitstatus;
60}
61
76e3520e
GS
62#else /* PERL_OBJECT */
63
a835ef8a 64#ifdef __GNUC__
5b0d9cbe
NIS
65/*
66 * GNU C does not do __declspec()
67 */
a835ef8a 68#define __declspec(foo)
5b0d9cbe
NIS
69
70/* Mingw32 defaults to globing command line
71 * This is inconsistent with other Win32 ports and
72 * seems to cause trouble with passing -DXSVERSION=\"1.6\"
73 * So we turn it off like this:
74 */
75int _CRT_glob = 0;
76
a835ef8a 77#endif
0a753a76 78
5b0d9cbe 79
390b85e7 80__declspec(dllimport) int RunPerl(int argc, char **argv, char **env, void *ios);
0a753a76 81
137443ea 82int
0a753a76 83main(int argc, char **argv, char **env)
84{
80252599
GS
85#ifndef __BORLANDC__
86 /* XXX this _may_ be a problem on some compilers (e.g. Borland) that
87 * want to free() argv after main() returns. As luck would have it,
88 * Borland's CRT does the right thing to argv[0] already. */
89 char szModuleName[MAX_PATH];
90 GetModuleFileName(NULL, szModuleName, sizeof(szModuleName));
91 argv[0] = szModuleName;
92#endif
390b85e7 93 return RunPerl(argc, argv, env, (void*)0);
0a753a76 94}
76e3520e
GS
95
96#endif /* PERL_OBJECT */