int initrb_start(int argc, char **argv, initrb_boot_fn_t boot) { int ret = 0; { /* Initialize the stack */ RUBY_INIT_STACK; /* Initialize the interpreter */ ruby_init(); /* Initialize the loadpath */ ruby_init_loadpath(); /* We're initrb */ ruby_script("initrb"); /* Set the argv */ ruby_set_argv(argc, argv); /* Boot statics */ initrb_boot_statics(); /* Run */ ret = boot(argc, argv); /* Finalize the interpreter */ ruby_finalize(); } return ret; }
void fs_rb_init(int argc, char** argv){ ruby_sysinit(&argc, &argv); RUBY_INIT_STACK ruby_init(); ruby_init_loadpath(); ruby_set_argv(argc, argv); Init_fsnet(); }
void shoes_set_argv(int argc, char **argv) { ruby_set_argv(argc, argv); }
static void proc_args(int argc, char **argv) { int option_index; ruby_script(argv[0]); switch (eruby_parse_options(argc, argv, &option_index)) { case 1: eruby_exit(0); case 2: eruby_exit(2); } if (eruby_mode == MODE_UNKNOWN) eruby_mode = guess_mode(); if (eruby_mode == MODE_CGI || eruby_mode == MODE_NPHCGI) { char *path; char *tmp_qs; char *query_string; int qs_has_equal; char *path_translated; if ((path = getenv("PATH_INFO")) != NULL && strcmp(path, "/logo.png") == 0) { give_img_logo(eruby_mode); eruby_exit(0); } if ((tmp_qs = getenv("QUERY_STRING")) == NULL) { query_string = ""; } else { query_string = eruby_xmalloc(strlen(tmp_qs) + 1); strcpy(query_string, tmp_qs); } qs_has_equal = (strchr(query_string, '=') != NULL); if ((path_translated = getenv("PATH_TRANSLATED")) == NULL) path_translated = ""; if (path_translated[0] && ((option_index == argc && (!query_string[0] || qs_has_equal)) || (option_index == argc - 1 && !qs_has_equal && strcmp(argv[option_index], query_string) == 0))) { eruby_filename = path_translated; } else if ((option_index == argc - 1 && (!query_string[0] || qs_has_equal)) || (option_index == argc - 2 && !qs_has_equal && strcmp(argv[option_index + 1], query_string) == 0)) { eruby_filename = argv[option_index]; } else { fprintf(stderr, "%s: missing required file to process\n", argv[0]); eruby_exit(1); } if (tmp_qs) free(query_string); } else { if (option_index == argc) { eruby_filename = "-"; } else { eruby_filename = argv[option_index++]; ruby_set_argv(argc - option_index, argv + option_index); } } }
void lumi_set_argv(int argc, char **argv) { ruby_set_argv(argc, argv); }
static inline void init_ruby_interpreter(int argc, char **argv) { ruby_init(); ruby_init_loadpath(); ruby_set_argv(argc, argv); }
int main( int argc, char** argv ) { int state = 0; int rc = 0; int opt_mv = 0; crate_app ca; /** startup items from ruby's original main.c */ #ifdef _WIN32 NtInitialize(&argc, &argv); #endif #if defined(__MACOS__) && defined(__MWERKS__) argc = ccommand(&argv); #endif /* setup ruby */ ruby_init(); ruby_script( argv[0] ); ruby_init_loadpath(); /* strip out the crate specific arguments from argv using --crate- */ opt_mv = crate_init_from_options( &ca, argc, argv ); argc -= opt_mv; argv += opt_mv; /* printf("crate file : %s\n", ca.file_name); */ /* printf("crate class : %s\n", ca.class_name); */ /* printf("crate method: %s\n", ca.method_name); */ /* make ARGV available */ ruby_set_argv( argc, argv ); /* initialize all extensions */ Init_ext(); /* load up the amalgalite libs */ am_bootstrap_lift( cARB, Qnil ); /* remove the current LOAD_PATH */ rb_ary_clear( rb_gv_get( "$LOAD_PATH" ) ); /* invoke the class / method passing in ARGV and ENV */ rb_protect( crate_wrap_app, (VALUE)&ca, &state ); /* check the results */ if ( state ) { /* exception was raised, check the $! var */ VALUE lasterr = rb_gv_get("$!"); /* system exit was called so just propogate that up to our exit */ if ( rb_obj_is_instance_of( lasterr, rb_eSystemExit ) ) { rc = NUM2INT( rb_attr_get( lasterr, rb_intern("status") ) ); /*printf(" Caught SystemExit -> $? will be %d\n", rc ); */ } else { /* some other exception was raised so dump that out */ VALUE klass = rb_class_path( CLASS_OF( lasterr ) ); VALUE message = rb_obj_as_string( lasterr ); VALUE backtrace = rb_funcall( lasterr, rb_intern("backtrace"), 0 ); fprintf( stderr, "%s: %s\n", RSTRING( klass )->ptr, RSTRING( message )->ptr ); rb_iterate( rb_each, backtrace, dump_backtrace, Qnil ); rc = state; } } free( ca.file_name ); free( ca.class_name ); free( ca.method_name ); /* shut down ruby */ ruby_finalize(); /* exit the program */ exit( rc ); }
rpmruby rpmrubyNew(char ** av, uint32_t flags) { static char * _av[] = { "rpmruby", NULL }; rpmruby ruby = (flags & 0x80000000) ? rpmrubyI() : rpmrubyGetPool(_rpmrubyPool); int xx; RUBYDBG((stderr, "--> %s(%p,0x%x) ruby %p\n", __FUNCTION__, av, flags, ruby)); /* If failure, or retrieving already initialized _rpmrubyI, just exit. */ if (ruby == NULL || ruby == _rpmrubyI) goto exit; if (av == NULL) av = _av; ruby->flags = flags; xx = argvAppend(&ruby->av, (ARGV_t)av); ruby->ac = argvCount(ruby->av); /* XXX FIXME: 0x40000000 => xruby.c wrapper without interpreter. */ if (ruby->flags & 0x40000000) { static size_t _rpmrubyStackSize = 4 * 1024 * 1024; /* XXX save as global interpreter. */ _rpmrubyI = ruby; ruby->nstack = _rpmrubyStackSize; ruby->stack = malloc(ruby->nstack); assert(ruby->stack != NULL); gettimeofday(&ruby->start, NULL); /* starting time for log entries */ if (_rpmruby_debug) ruby->zlog = rpmzLogNew(&ruby->start); /* initialize logging */ /* initialize the relay mechanism */ ruby->ruby_coroutine_lock = yarnNewLock(0); ruby->main_coroutine_lock = yarnNewLock(0); } else { #if defined(WITH_RUBYEMBED) VALUE variable_in_this_stack_frame; /* RUBY_INIT_STSCK */ #if defined(HAVE_RUBY_DEFINES_H) /* XXX ruby-1.9.2 */ ruby_sysinit(&ruby->ac, (char ***) &ruby->av); /* XXX ruby-1.9.2p0 ruby_bind_stack() patch needed */ { uint8_t * b = ruby->stack; uint8_t * e = b + ruby->nstack; ruby_bind_stack((VALUE *)b, (VALUE *) e); } #endif /* NOTYET */ ruby_init_stack(&variable_in_this_stack_frame); /* RUBY_INIT_STACK */ ruby_init(); ruby_init_loadpath(); ruby_script((char *)av[0]); if (av[1]) ruby_set_argv(argvCount((ARGV_t)av)-1, av+1); rb_gv_set("$result", rb_str_new2("")); #if !defined(HAVE_RUBY_DEFINES_H) /* XXX ruby-1.8.6 */ (void) rpmrubyRun(ruby, rpmrubyInitStringIO, NULL); #endif #endif /* WITH_RUBYEMBED */ } exit: return rpmrubyLink(ruby); }