e576bb | 2002-10-11 | Martin Nilsson | | |
1ab4ac | 2008-01-26 | Martin Stjernholm | | || $Id: main.c,v 1.228 2008/01/26 22:34:21 mast Exp $
|
e576bb | 2002-10-11 | Martin Nilsson | | */
|
aedfb1 | 2002-10-09 | Martin Nilsson | |
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #include "global.h"
|
574088 | 1998-01-01 | Fredrik Hübinette (Hubbe) | | #include "fdlib.h"
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #include "backend.h"
#include "module.h"
#include "object.h"
#include "lex.h"
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | #include "pike_types.h"
#include "builtin_functions.h"
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #include "array.h"
#include "stralloc.h"
#include "interpret.h"
|
b2d3e4 | 2000-12-01 | Fredrik Hübinette (Hubbe) | | #include "pike_error.h"
|
bb55f8 | 1997-03-16 | Fredrik Hübinette (Hubbe) | | #include "pike_macros.h"
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #include "callback.h"
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | #include "signal_handler.h"
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | #include "threads.h"
|
9c6f7d | 1997-04-15 | Fredrik Hübinette (Hubbe) | | #include "dynamic_load.h"
#include "gc.h"
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | | #include "multiset.h"
|
9c6f7d | 1997-04-15 | Fredrik Hübinette (Hubbe) | | #include "mapping.h"
|
574088 | 1998-01-01 | Fredrik Hübinette (Hubbe) | | #include "cpp.h"
|
0808b2 | 1998-01-25 | Fredrik Hübinette (Hubbe) | | #include "main.h"
|
19aaeb | 1998-05-25 | Fredrik Hübinette (Hubbe) | | #include "operators.h"
|
ab5670 | 2001-04-30 | Martin Stjernholm | | #include "rbtree.h"
|
37775c | 2004-04-06 | Martin Nilsson | | #include "pike_security.h"
|
67f0b5 | 1999-09-26 | Henrik Grubbström (Grubba) | | #include "constants.h"
|
c37c7e | 1999-03-26 | Fredrik Hübinette (Hubbe) | | #include "version.h"
|
4b63c6 | 2001-12-14 | Martin Nilsson | | #include "program.h"
|
d5c61f | 2002-12-07 | Henrik Grubbström (Grubba) | | #include "pike_rusage.h"
|
d658ab | 2002-09-26 | Martin Stjernholm | | #include "module_support.h"
|
143d88 | 2003-11-14 | Martin Stjernholm | | #include "opcodes.h"
|
4b63c6 | 2001-12-14 | Martin Nilsson | |
#ifdef AUTO_BIGNUM
#include "bignum.h"
#endif
|
574088 | 1998-01-01 | Fredrik Hübinette (Hubbe) | |
|
ec337d | 2004-12-29 | Henrik Grubbström (Grubba) | | #include "pike_embed.h"
|
d1913b | 2000-10-01 | Fredrik Hübinette (Hubbe) | | #if defined(__linux__) && defined(HAVE_DLOPEN) && defined(HAVE_DLFCN_H)
|
07eda2 | 2000-07-05 | Fredrik Hübinette (Hubbe) | | #include <dlfcn.h>
#endif
|
cee581 | 1999-12-05 | Henrik Grubbström (Grubba) | | #include "las.h"
|
834e02 | 2003-11-28 | Henrik Grubbström (Grubba) | | #ifdef HAVE_UNISTD_H
|
fde6ed | 2003-11-27 | Martin Stjernholm | | #include <unistd.h>
|
834e02 | 2003-11-28 | Henrik Grubbström (Grubba) | | #endif
#ifdef HAVE_ERRNO_H
|
ac173e | 1997-11-02 | Henrik Grubbström (Grubba) | | #include <errno.h>
|
834e02 | 2003-11-28 | Henrik Grubbström (Grubba) | | #endif
|
ac173e | 1997-11-02 | Henrik Grubbström (Grubba) | |
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #ifdef HAVE_LOCALE_H
#include <locale.h>
#endif
|
693018 | 1996-02-25 | Fredrik Hübinette (Hubbe) | |
|
6e37dc | 1996-06-21 | Fredrik Hübinette (Hubbe) | | #include "time_stuff.h"
|
693018 | 1996-02-25 | Fredrik Hübinette (Hubbe) | |
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #ifdef HAVE_SYS_RESOURCE_H
#include <sys/resource.h>
#endif
|
ff34a5 | 2001-05-31 | Henrik Grubbström (Grubba) | |
|
b0f01d | 2007-05-18 | Henrik Grubbström (Grubba) | | #ifdef PIKE_EXTRA_DEBUG
#define TRACE_MAIN
#endif /* PIKE_EXTRA_DEBUG */
|
ff34a5 | 2001-05-31 | Henrik Grubbström (Grubba) | | #ifdef TRACE_MAIN
#define TRACE(X) fprintf X
#else /* !TRACE_MAIN */
#define TRACE(X)
#endif /* TRACE_MAIN */
|
f8e5fe | 1997-01-18 | Henrik Grubbström (Grubba) | |
|
df458c | 2004-12-30 | Henrik Grubbström (Grubba) | |
|
3f1eeb | 1998-04-05 | Fredrik Hübinette (Hubbe) | |
|
df458c | 2004-12-30 | Henrik Grubbström (Grubba) | | #define MASTER_COOKIE1 "(#*&)@(*&$"
#define MASTER_COOKIE2 "Master Cookie:"
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
df458c | 2004-12-30 | Henrik Grubbström (Grubba) | | #define MASTER_COOKIE MASTER_COOKIE1 MASTER_COOKIE2
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
df458c | 2004-12-30 | Henrik Grubbström (Grubba) | | #ifndef MAXPATHLEN
#define MAXPATHLEN 32768
#endif
static char master_location[MAXPATHLEN * 2] = MASTER_COOKIE;
static void set_master(const char *file)
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | {
|
df458c | 2004-12-30 | Henrik Grubbström (Grubba) | | if (strlen(file) >= MAXPATHLEN*2 - CONSTANT_STRLEN(MASTER_COOKIE)) {
|
4e5f74 | 2005-05-20 | Martin Stjernholm | | fprintf(stderr, "Too long path to master: \"%s\" (limit:%"PRINTPTRDIFFT"d)\n",
|
df458c | 2004-12-30 | Henrik Grubbström (Grubba) | | file, MAXPATHLEN*2 - CONSTANT_STRLEN(MASTER_COOKIE));
exit(1);
}
strcpy(master_location + CONSTANT_STRLEN(MASTER_COOKIE), file);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | }
|
a999e7 | 1998-07-27 | Fredrik Hübinette (Hubbe) | | #ifdef __NT__
|
1c32fd | 2000-08-19 | Henrik Grubbström (Grubba) | | static void get_master_key(HKEY cat)
|
a999e7 | 1998-07-27 | Fredrik Hübinette (Hubbe) | | {
HKEY k;
char buffer[4096];
DWORD len=sizeof(buffer)-1,type=REG_SZ;
|
a5cd6a | 2001-09-24 | Henrik Grubbström (Grubba) | |
|
a999e7 | 1998-07-27 | Fredrik Hübinette (Hubbe) | | if(RegOpenKeyEx(cat,
|
387b04 | 2003-01-02 | Martin Nilsson | | (LPCTSTR)("SOFTWARE\\Pike\\"
|
1f1f18 | 2001-03-10 | Henrik Grubbström (Grubba) | | DEFINETOSTR(PIKE_MAJOR_VERSION)
"."
|
50bf1e | 2004-09-16 | Martin Nilsson | | DEFINETOSTR(PIKE_MINOR_VERSION)
"."
DEFINETOSTR(PIKE_BUILD_VERSION)),
|
a999e7 | 1998-07-27 | Fredrik Hübinette (Hubbe) | | 0,KEY_READ,&k)==ERROR_SUCCESS)
{
if(RegQueryValueEx(k,
"PIKE_MASTER",
0,
&type,
buffer,
&len)==ERROR_SUCCESS)
{
|
df458c | 2004-12-30 | Henrik Grubbström (Grubba) | |
set_master(buffer);
|
a999e7 | 1998-07-27 | Fredrik Hübinette (Hubbe) | | }
RegCloseKey(k);
}
}
#endif /* __NT__ */
|
df458c | 2004-12-30 | Henrik Grubbström (Grubba) | | static void set_default_master(void)
{
#ifdef HAVE_GETENV
if(!master_location[CONSTANT_STRLEN(MASTER_COOKIE)] &&
getenv("PIKE_MASTER")) {
set_master(getenv("PIKE_MASTER"));
}
#endif
#ifdef __NT__
if(!master_location[CONSTANT_STRLEN(MASTER_COOKIE)])
get_master_key(HKEY_CURRENT_USER);
if(!master_location[CONSTANT_STRLEN(MASTER_COOKIE)])
get_master_key(HKEY_LOCAL_MACHINE);
#endif
if(!master_location[CONSTANT_STRLEN(MASTER_COOKIE)])
{
sprintf(master_location + CONSTANT_STRLEN(MASTER_COOKIE),
DEFAULT_MASTER,
PIKE_MAJOR_VERSION,
PIKE_MINOR_VERSION,
PIKE_BUILD_VERSION);
}
TRACE((stderr, "Default master at \"%s\"...\n",
master_location + CONSTANT_STRLEN(MASTER_COOKIE)));
}
#ifdef LIBPIKE
static char libpike_file[MAXPATHLEN * 2];
static void *libpike;
static void (*init_pike)(const char **argv, const char *file);
static void (*init_pike_runtime)(void (*exit_cb)(int));
#endif /* LIBPIKE */
static void find_lib_dir(int argc, char **argv)
{
int e;
TRACE((stderr, "find_lib_dir...\n"));
set_default_master();
for(e=1; e<argc; e++)
{
TRACE((stderr, "Parse argument %d:\"%s\"...\n", e, argv[e]));
if(argv[e][0] != '-') break;
switch(argv[e][1])
{
default:
break;
case 'm':
if(argv[e][2])
{
set_master(argv[e]+2);
}else{
e++;
if(e >= argc)
{
fprintf(stderr,"Missing argument to -m\n");
exit(1);
}
set_master(argv[e]);
}
break;
case 's':
if((!argv[e][2]) ||
((argv[e][2] == 's') && !argv[e][3])) {
e++;
}
break;
case 'q':
if(!argv[e][2]) e++;
break;
}
}
|
b0757b | 2006-07-05 | Martin Stjernholm | |
|
df458c | 2004-12-30 | Henrik Grubbström (Grubba) | | #ifdef LIBPIKE
|
b0757b | 2006-07-05 | Martin Stjernholm | | {
char *p;
char *dir;
memcpy(libpike_file, master_location + CONSTANT_STRLEN(MASTER_COOKIE),
sizeof(master_location) - CONSTANT_STRLEN(MASTER_COOKIE));
for (p = dir = libpike_file; *p; p++) {
if ((*p == '/')
|
df458c | 2004-12-30 | Henrik Grubbström (Grubba) | | #ifdef __NT__
|
b0757b | 2006-07-05 | Martin Stjernholm | | || (*p == '\\')
|
df458c | 2004-12-30 | Henrik Grubbström (Grubba) | | #endif /* __NT__ */
|
b0757b | 2006-07-05 | Martin Stjernholm | | )
dir = p+1;
}
if ((p + CONSTANT_STRLEN("pike.so")) >= libpike_file + 2*MAXPATHLEN) {
fprintf(stderr, "Too long path to pike.so.\n");
exit(1);
}
memcpy(p, "pike.so", CONSTANT_STRLEN("pike.so") + 1);
|
df458c | 2004-12-30 | Henrik Grubbström (Grubba) | | }
#endif /* LIBPIKE */
}
int main(int argc, char **argv)
|
ec337d | 2004-12-29 | Henrik Grubbström (Grubba) | | {
JMP_BUF back;
int e, num;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | char *p;
|
a02566 | 2007-05-17 | Henrik Grubbström (Grubba) | | #ifdef PIKE_EXTRA_DEBUG
#ifdef HAVE_SIGNAL
if (sizeof(void *) == 8) {
signal(SIGPIPE, abort);
}
#endif
#endif
|
df458c | 2004-12-30 | Henrik Grubbström (Grubba) | | TRACE((stderr, "Init master...\n"));
find_lib_dir(argc, argv);
|
cee581 | 1999-12-05 | Henrik Grubbström (Grubba) | |
|
df458c | 2004-12-30 | Henrik Grubbström (Grubba) | | #ifdef LIBPIKE
|
9bd21e | 2005-01-03 | Marcus Agehall | | #ifdef HAVE_DLINIT
|
df458c | 2004-12-30 | Henrik Grubbström (Grubba) | | if (!dlinit()) {
fprintf(stderr, "dlinit failed.\n");
exit(1);
}
|
9bd21e | 2005-01-03 | Marcus Agehall | | #endif /* HAVE_DLINIT */
|
bf47e1 | 2000-04-06 | Henrik Grubbström (Grubba) | |
|
df458c | 2004-12-30 | Henrik Grubbström (Grubba) | | if (!(libpike = dlopen(libpike_name, RTLD_NOW))) {
const char *err = dlerror();
if (!err) err = "Unknown reason.";
fprintf(stderr, "Failed to open %s: %s\n", libpike_name, err);
exit(1);
}
#define LOOKUP(symbol) do { \
if (!(symbol = CAST_TO_FUN(dlsym(libpike, TOSTR(symbol)))) && \
!(symbol = CAST_TO_FUN(dlsym(libpike, "_" TOSTR(symbol))))) { \
fprintf(stderr, "Missing symbol in %s: " TOSTR(symbol) "\n", \
libpike_name); \
dlclose(libpike); \
exit(1); \
} \
} while(0)
LOOKUP(init_pike);
LOOKUP(init_pike_runtime);
LOOKUP(add_predefine);
|
ff34a5 | 2001-05-31 | Henrik Grubbström (Grubba) | |
|
df458c | 2004-12-30 | Henrik Grubbström (Grubba) | | #endif /* LIBPIKE */
TRACE((stderr, "init_pike()\n"));
init_pike(argv, master_location + CONSTANT_STRLEN(MASTER_COOKIE));
|
895ced | 2003-10-25 | Martin Nilsson | |
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | for(e=1; e<argc; e++)
{
|
ff34a5 | 2001-05-31 | Henrik Grubbström (Grubba) | | TRACE((stderr, "Parse argument %d:\"%s\"...\n", e, argv[e]));
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | if(argv[e][0]=='-')
{
for(p=argv[e]+1; *p;)
{
switch(*p)
{
case 'D':
add_predefine(p+1);
p+=strlen(p);
break;
case 'm':
if(p[1])
{
p+=strlen(p);
}else{
e++;
if(e >= argc)
{
fprintf(stderr,"Missing argument to -m\n");
exit(1);
}
p+=strlen(p);
}
break;
|
9f243b | 1996-08-12 | Fredrik Hübinette (Hubbe) | | case 's':
if(!p[1])
{
e++;
if(e >= argc)
{
fprintf(stderr,"Missing argument to -s\n");
exit(1);
}
p=argv[e];
|
490887 | 1998-08-10 | Fredrik Hübinette (Hubbe) | | }else{
p++;
if(*p=='s')
{
if(!p[1])
{
e++;
if(e >= argc)
{
fprintf(stderr,"Missing argument to -ss\n");
exit(1);
}
p=argv[e];
}else{
p++;
}
#ifdef _REENTRANT
thread_stack_size=STRTOL(p,&p,0);
#endif
p+=strlen(p);
break;
}
|
9f243b | 1996-08-12 | Fredrik Hübinette (Hubbe) | | }
|
7965d7 | 2001-01-24 | Fredrik Hübinette (Hubbe) | | Pike_stack_size=STRTOL(p,&p,0);
|
9f243b | 1996-08-12 | Fredrik Hübinette (Hubbe) | | p+=strlen(p);
|
7965d7 | 2001-01-24 | Fredrik Hübinette (Hubbe) | | if(Pike_stack_size < 256)
|
9f243b | 1996-08-12 | Fredrik Hübinette (Hubbe) | | {
fprintf(stderr,"Stack size must at least be 256.\n");
exit(1);
}
break;
|
3f1eeb | 1998-04-05 | Fredrik Hübinette (Hubbe) | | case 'q':
if(!p[1])
{
e++;
if(e >= argc)
{
fprintf(stderr,"Missing argument to -q\n");
exit(1);
}
p=argv[e];
|
490887 | 1998-08-10 | Fredrik Hübinette (Hubbe) | | }else{
p++;
|
3f1eeb | 1998-04-05 | Fredrik Hübinette (Hubbe) | | }
|
dc3e78 | 2005-01-01 | Henrik Grubbström (Grubba) | | set_pike_evaluator_limit(STRTOL(p, &p, 0));
|
3f1eeb | 1998-04-05 | Fredrik Hübinette (Hubbe) | | p+=strlen(p);
break;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | case 'd':
|
cd8352 | 1998-02-02 | Fredrik Hübinette (Hubbe) | | more_d_flags:
switch(p[1])
{
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
d_flag+=STRTOL(p+1,&p,10);
break;
|
943f85 | 1998-04-13 | Henrik Grubbström (Grubba) | | case 'c':
p++;
|
ff34a5 | 2001-05-31 | Henrik Grubbström (Grubba) | | #if defined(YYDEBUG) || defined(PIKE_DEBUG)
|
943f85 | 1998-04-13 | Henrik Grubbström (Grubba) | | yydebug++;
|
ff34a5 | 2001-05-31 | Henrik Grubbström (Grubba) | | #endif /* YYDEBUG || PIKE_DEBUG */
|
943f85 | 1998-04-13 | Henrik Grubbström (Grubba) | | break;
|
cd8352 | 1998-02-02 | Fredrik Hübinette (Hubbe) | | case 's':
|
df458c | 2004-12-30 | Henrik Grubbström (Grubba) | | set_pike_debug_options(DEBUG_SIGNALS, DEBUG_SIGNALS);
|
cd8352 | 1998-02-02 | Fredrik Hübinette (Hubbe) | | p++;
|
9b08a2 | 1998-03-31 | Fredrik Hübinette (Hubbe) | | goto more_d_flags;
case 't':
|
df458c | 2004-12-30 | Henrik Grubbström (Grubba) | | set_pike_debug_options(NO_TAILRECURSION, NO_TAILRECURSION);
|
cd8352 | 1998-02-02 | Fredrik Hübinette (Hubbe) | | p++;
|
9b08a2 | 1998-03-31 | Fredrik Hübinette (Hubbe) | | goto more_d_flags;
|
cd8352 | 1998-02-02 | Fredrik Hübinette (Hubbe) | |
|
738697 | 2001-06-30 | Fredrik Hübinette (Hubbe) | | case 'g':
|
df458c | 2004-12-30 | Henrik Grubbström (Grubba) | | set_pike_debug_options(GC_RESET_DMALLOC, GC_RESET_DMALLOC);
|
738697 | 2001-06-30 | Fredrik Hübinette (Hubbe) | | p++;
goto more_d_flags;
case 'p':
|
df458c | 2004-12-30 | Henrik Grubbström (Grubba) | | set_pike_debug_options(NO_PEEP_OPTIMIZING, NO_PEEP_OPTIMIZING);
|
738697 | 2001-06-30 | Fredrik Hübinette (Hubbe) | | p++;
goto more_d_flags;
|
01185d | 2003-04-01 | Martin Stjernholm | | case 'T':
|
df458c | 2004-12-30 | Henrik Grubbström (Grubba) | | set_pike_debug_options(ERRORCHECK_MUTEXES, ERRORCHECK_MUTEXES);
|
01185d | 2003-04-01 | Martin Stjernholm | | p++;
goto more_d_flags;
|
7d955e | 1999-12-13 | Henrik Grubbström (Grubba) | | default:
d_flag += (p[0] == 'd');
|
cee581 | 1999-12-05 | Henrik Grubbström (Grubba) | | p++;
|
7d955e | 1999-12-13 | Henrik Grubbström (Grubba) | | }
break;
|
cee581 | 1999-12-05 | Henrik Grubbström (Grubba) | |
|
7d955e | 1999-12-13 | Henrik Grubbström (Grubba) | | case 'r':
|
17e177 | 1999-12-13 | Per Hedbor | | more_r_flags:
switch(p[1])
{
|
7d955e | 1999-12-13 | Henrik Grubbström (Grubba) | | case 't':
|
df458c | 2004-12-30 | Henrik Grubbström (Grubba) | | set_pike_runtime_options(RUNTIME_CHECK_TYPES, RUNTIME_CHECK_TYPES);
|
7d955e | 1999-12-13 | Henrik Grubbström (Grubba) | | p++;
|
17e177 | 1999-12-13 | Per Hedbor | | goto more_r_flags;
|
7d955e | 1999-12-13 | Henrik Grubbström (Grubba) | |
case 'T':
|
df458c | 2004-12-30 | Henrik Grubbström (Grubba) | | set_pike_runtime_options(RUNTIME_STRICT_TYPES,
RUNTIME_STRICT_TYPES);
|
7d955e | 1999-12-13 | Henrik Grubbström (Grubba) | | p++;
|
17e177 | 1999-12-13 | Per Hedbor | | goto more_r_flags;
|
7d955e | 1999-12-13 | Henrik Grubbström (Grubba) | |
|
17e177 | 1999-12-13 | Per Hedbor | | default:
p++;
|
7d955e | 1999-12-13 | Henrik Grubbström (Grubba) | | break;
|
cd8352 | 1998-02-02 | Fredrik Hübinette (Hubbe) | | }
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | break;
case 'a':
if(p[1]>='0' && p[1]<='9')
a_flag+=STRTOL(p+1,&p,10);
else
a_flag++,p++;
break;
case 't':
|
24d38f | 2004-03-17 | Martin Stjernholm | | more_t_flags:
switch (p[1]) {
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
Pike_interpreter.trace_level+=STRTOL(p+1,&p,10);
break;
case 'g':
gc_trace++;
p++;
goto more_t_flags;
default:
if (p[0] == 't')
Pike_interpreter.trace_level++;
p++;
}
|
97ebb3 | 2003-01-09 | Henrik Grubbström (Grubba) | | default_t_flag = Pike_interpreter.trace_level;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | break;
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | case 'p':
|
061244 | 2001-05-16 | Fredrik Hübinette (Hubbe) | | if(p[1]=='s')
{
|
ec337d | 2004-12-29 | Henrik Grubbström (Grubba) | | pike_enable_stack_profiling();
|
061244 | 2001-05-16 | Fredrik Hübinette (Hubbe) | | p+=strlen(p);
}else{
if(p[1]>='0' && p[1]<='9')
p_flag+=STRTOL(p+1,&p,10);
else
p_flag++,p++;
}
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | break;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | case 'l':
if(p[1]>='0' && p[1]<='9')
l_flag+=STRTOL(p+1,&p,10);
else
l_flag++,p++;
break;
default:
|
496707 | 1997-01-15 | Fredrik Hübinette (Hubbe) | | p+=strlen(p);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | }
}
}else{
break;
}
}
|
01185d | 2003-04-01 | Martin Stjernholm | | #ifndef PIKE_MUTEX_ERRORCHECK
|
d86706 | 2005-01-01 | Henrik Grubbström (Grubba) | | if (set_pike_debug_options(0,0) & ERRORCHECK_MUTEXES)
|
01185d | 2003-04-01 | Martin Stjernholm | | fputs ("Warning: -dT (error checking mutexes) not supported on this system.\n",
stderr);
#endif
|
d86706 | 2005-01-01 | Henrik Grubbström (Grubba) | | if (d_flag)
set_pike_debug_options(ERRORCHECK_MUTEXES, ERRORCHECK_MUTEXES);
|
01185d | 2003-04-01 | Martin Stjernholm | |
|
ec337d | 2004-12-29 | Henrik Grubbström (Grubba) | | init_pike_runtime(exit);
|
a9388a | 1998-09-02 | Henrik Grubbström (Grubba) | |
|
df458c | 2004-12-30 | Henrik Grubbström (Grubba) | |
add_pike_string_constant("__master_cookie",
master_location, CONSTANT_STRLEN(MASTER_COOKIE));
|
ec337d | 2004-12-29 | Henrik Grubbström (Grubba) | | if(SETJMP(back))
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | {
|
ec337d | 2004-12-29 | Henrik Grubbström (Grubba) | | if(throw_severity == THROW_EXIT)
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | | {
num=throw_value.u.integer;
}else{
|
667ec2 | 2003-07-22 | Martin Stjernholm | | if (throw_value.type == T_OBJECT &&
throw_value.u.object->prog == master_load_error_program &&
!get_master()) {
struct generic_error_struct *err;
|
e8cbe4 | 2004-07-04 | Martin Nilsson | |
dynamic_buffer buf;
dynbuf_string s;
struct svalue t;
|
1ab4ac | 2008-01-26 | Martin Stjernholm | | move_svalue (Pike_sp++, &throw_value);
mark_free_svalue (&throw_value);
|
667ec2 | 2003-07-22 | Martin Stjernholm | | err = (struct generic_error_struct *)
get_storage (Pike_sp[-1].u.object, generic_error_program);
|
e8cbe4 | 2004-07-04 | Martin Nilsson | |
t.type = PIKE_T_STRING;
t.u.string = err->error_message;
init_buf(&buf);
describe_svalue(&t,0,0);
s=complex_free_buf(&buf);
|
9f6bfe | 2004-07-04 | Stephen R. van den Berg | | fputs(s.str, stderr);
|
e8cbe4 | 2004-07-04 | Martin Nilsson | | free(s.str);
|
667ec2 | 2003-07-22 | Martin Stjernholm | | }
else
call_handle_error();
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | | num=10;
}
|
ec337d | 2004-12-29 | Henrik Grubbström (Grubba) | | }else{
|
dc3e78 | 2005-01-01 | Henrik Grubbström (Grubba) | | struct object *m;
|
ec337d | 2004-12-29 | Henrik Grubbström (Grubba) | |
|
dc3e78 | 2005-01-01 | Henrik Grubbström (Grubba) | | back.severity=THROW_EXIT;
|
09126b | 2001-12-19 | Martin Stjernholm | |
|
dc3e78 | 2005-01-01 | Henrik Grubbström (Grubba) | | if ((m = load_pike_master())) {
TRACE((stderr, "Call master->_main()...\n"));
|
09126b | 2001-12-19 | Martin Stjernholm | |
|
dc3e78 | 2005-01-01 | Henrik Grubbström (Grubba) | | pike_push_argv(argc, argv);
|
d86706 | 2005-01-01 | Henrik Grubbström (Grubba) | |
|
dc3e78 | 2005-01-01 | Henrik Grubbström (Grubba) | | pike_push_env();
|
fe5eb0 | 1998-01-31 | Fredrik Hübinette (Hubbe) | |
|
dc3e78 | 2005-01-01 | Henrik Grubbström (Grubba) | | apply(m, "_main", 2);
pop_stack();
num=0;
} else {
num = -1;
}
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | }
UNSETJMP(back);
|
cfd36c | 2003-11-14 | Martin Stjernholm | | TRACE((stderr, "Exit %d...\n", num));
|
ec337d | 2004-12-29 | Henrik Grubbström (Grubba) | |
|
eb2fd5 | 2000-11-06 | Henrik Grubbström (Grubba) | | pike_do_exit(num);
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | return num;
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | | }
|