void do_REPEAT(u32_t *orig, u32_t *dest) { COMPILE(&BRANCH); COMPILE((char *)dest - (char *)var_DP); *orig = (u32_t)((char *)var_DP - (char *)orig); }
void do_TWOVARIABLE() { counted_string_t *name = __read_word(' '); do_HEADER_COMMA(name); COMPILE(&DODOES); COMPILE(0); var_DP += 2; }
u32_t *do_WHILE() { u32_t *ref; COMPILE(&ZBRANCH); ref = var_DP; COMPILE(0); return ref; }
u32_t *do_ELSE(u32_t *ref1) { u32_t *ref2; COMPILE(&BRANCH); ref2 = var_DP; COMPILE(0); *ref1 = (u32_t)((char *)var_DP - (char *)ref1); return ref2; }
static void compile_regexps (void) { const char *err; int offset; int p; /* These regexps are always used for partial matching. In pcre < 8 * there were limitations on the regexps possible for partial * matching, so fail if that is true here. In pcre >= 8, all * regexps can be used in a partial match. */ #define CHECK_PARTIAL_OK(pattern, re) \ do { \ pcre_fullinfo ((re), NULL, PCRE_INFO_OKPARTIAL, &p); \ if (p != 1) { \ fprintf (stderr, "%s: %s:%d: internal error: pattern '%s' cannot be used for partial matching\n", \ getprogname (), \ __FILE__, __LINE__, (pattern)); \ abort (); \ } \ } while (0) #define COMPILE(re,pattern,options) \ do { \ re = pcre_compile ((pattern), (options), &err, &offset, NULL); \ if (re == NULL) { \ ignore_value (write (2, err, strlen (err))); \ abort (); \ } \ CHECK_PARTIAL_OK ((pattern), re); \ } while (0) COMPILE (password_re, "password:"******"(ssh: .*)", 0); COMPILE (sudo_password_re, "sudo: a password is required", 0); /* The magic synchronization strings all match this expression. See * start_ssh function below. */ COMPILE (prompt_re, "###((?:[0123456789abcdefghijklmnopqrstuvwxyz]){8})### ", 0); COMPILE (version_re, "virt-v2v ([1-9].*)", 0); COMPILE (feature_libguestfs_rewrite_re, "libguestfs-rewrite", 0); COMPILE (feature_colours_option_re, "colours-option", 0); COMPILE (feature_input_re, "input:((?:\\w)*)", 0); COMPILE (feature_output_re, "output:((?:\\w)*)", 0); COMPILE (portfwd_re, "Allocated port ((?:\\d)+) for remote forward", 0); }
static void compile_regexps (void) { const char *err; int offset; #define COMPILE(re,pattern,options) \ do { \ re = pcre_compile ((pattern), (options), &err, &offset, NULL); \ if (re == NULL) { \ ignore_value (write (2, err, strlen (err))); \ abort (); \ } \ } while (0) COMPILE (password_re, "assword", 0); /* The magic synchronization strings all match this expression. See * start_ssh function below. */ COMPILE (prompt_re, "###([0123456789abcdefghijklmnopqrstuvwxyz]{8})### ", 0); COMPILE (version_re, "virt-v2v ([1-9]\\d*)\\.([1-9]\\d*)\\.(0|[1-9]\\d*)", 0); COMPILE (feature_libguestfs_rewrite_re, "libguestfs-rewrite", 0); COMPILE (feature_input_re, "input:(\\w*)", 0); COMPILE (feature_output_re, "output:(\\w*)", 0); COMPILE (portfwd_re, "Allocated port (\\d+) for remote forward", 0); }
static void compile_regexps (void) { const char *err; int offset; #define COMPILE(re,pattern,options) \ do { \ re = pcre_compile ((pattern), (options), &err, &offset, NULL); \ if (re == NULL) { \ ignore_value (write (2, err, strlen (err))); \ abort (); \ } \ } while (0) COMPILE (re_first_partition, "^/dev/(?:h|s|v)d.1$", 0); COMPILE (re_major_minor, "(\\d+)\\.(\\d+)", 0); }
static void compile_regexps (void) { const char *err; int offset; #define COMPILE(re,pattern,options) \ do { \ re = pcre_compile ((pattern), (options), &err, &offset, NULL); \ if (re == NULL) { \ ignore_value (write (2, err, strlen (err))); \ abort (); \ } \ } while (0) COMPILE (re_windows_version, "^(\\d+)\\.(\\d+)", 0); COMPILE (re_boot_ini_os_header, "^\\[operating systems\\]\\s*$", 0); COMPILE (re_boot_ini_os, "^(multi|scsi)\\((\\d+)\\)disk\\((\\d+)\\)rdisk\\((\\d+)\\)partition\\((\\d+)\\)([^=]+)=", 0); }
static void compile_regexps (void) { const char *err; int offset; #define COMPILE(re,pattern,options) \ do { \ re = pcre_compile ((pattern), (options), &err, &offset, NULL); \ if (re == NULL) { \ ignore_value (write (2, err, strlen (err))); \ abort (); \ } \ } while (0) COMPILE (re_file_elf, "ELF.*(?:executable|shared object|relocatable), (.+?),", 0); COMPILE (re_elf_ppc64, "64.*PowerPC", 0); }
static void compile_regexps (void) { const char *err; int offset; #define COMPILE(re,pattern,options) \ do { \ re = pcre_compile ((pattern), (options), &err, &offset, NULL); \ if (re == NULL) { \ ignore_value (write (2, err, strlen (err))); \ abort (); \ } \ } while (0) COMPILE (re_fedora, "Fedora release (\\d+)", 0); COMPILE (re_rhel_old, "Red Hat.*release (\\d+).*Update (\\d+)", 0); COMPILE (re_rhel, "Red Hat.*release (\\d+)\\.(\\d+)", 0); COMPILE (re_rhel_no_minor, "Red Hat.*release (\\d+)", 0); COMPILE (re_centos_old, "CentOS.*release (\\d+).*Update (\\d+)", 0); COMPILE (re_centos, "CentOS.*release (\\d+)\\.(\\d+)", 0); COMPILE (re_centos_no_minor, "CentOS.*release (\\d+)", 0); COMPILE (re_scientific_linux_old, "Scientific Linux.*release (\\d+).*Update (\\d+)", 0); COMPILE (re_scientific_linux, "Scientific Linux.*release (\\d+)\\.(\\d+)", 0); COMPILE (re_scientific_linux_no_minor, "Scientific Linux.*release (\\d+)", 0); COMPILE (re_major_minor, "(\\d+)\\.(\\d+)", 0); COMPILE (re_xdev, "^/dev/(h|s|v|xv)d([a-z]+)(\\d*)$", 0); COMPILE (re_cciss, "^/dev/(cciss/c\\d+d\\d+)(?:p(\\d+))?$", 0); COMPILE (re_mdN, "^(/dev/md\\d+)$", 0); COMPILE (re_freebsd_mbr, "^/dev/(ada{0,1}|vtbd)(\\d+)s(\\d+)([a-z])$", 0); COMPILE (re_freebsd_gpt, "^/dev/(ada{0,1}|vtbd)(\\d+)p(\\d+)$", 0); COMPILE (re_diskbyid, "^/dev/disk/by-id/.*-part(\\d+)$", 0); COMPILE (re_netbsd, "^NetBSD (\\d+)\\.(\\d+)", 0); COMPILE (re_opensuse, "^(openSUSE|SuSE Linux|SUSE LINUX) ", 0); COMPILE (re_sles, "^SUSE (Linux|LINUX) Enterprise ", 0); COMPILE (re_nld, "^Novell Linux Desktop ", 0); COMPILE (re_opensuse_version, "^VERSION = (\\d+)\\.(\\d+)", 0); COMPILE (re_sles_version, "^VERSION = (\\d+)", 0); COMPILE (re_sles_patchlevel, "^PATCHLEVEL = (\\d+)", 0); }
void do_INTERPRET(interpret_decision_t *decision) { #define SIGNAL_NOP() do { decision->id_status = INTERPRET_NOP; return; } while(0) #define SIGNAL_EMPTY() do { decision->id_status = INTERPRET_EMPTY; return; } while(0) #define SIGNAL_EXEC_WORD() do { decision->id_status = INTERPRET_EXECUTE_WORD; return; } while(0) #define SIGNAL_EXEC_LIT() do { decision->id_status = INTERPRET_EXECUTE_LIT; return; } while(0) #define SIGNAL_EXEC_2LIT() do { decision->id_status = INTERPRET_EXECUTE_2LIT; return; } while(0) counted_string_t *wb = __read_word(' '); if (!wb->cs_len) { print_prompt(var_SHOW_PROMPT); __refill_input_buffer(); SIGNAL_EMPTY(); } word_header_t *word; int found = fw_search(wb, &word); if (found) { cf_t *cfa = fw_code_field(word); if (IS_INTERPRET() || word->wh_flags & F_IMMED) { decision->u.id_cfa = cfa; SIGNAL_EXEC_WORD(); } COMPILE(cfa); SIGNAL_NOP(); } parse_number_result_t pnr; int ret = parse_number(wb, &pnr); if (ret == -1 || pnr.nr_remaining != 0) { __ERR_undefined_word(); var_STATE = STATE_INTERPRET; __refill_input_buffer(); SIGNAL_NOP(); } if (ret == 0) { if (IS_INTERPRET()) { decision->u.id_number = pnr.nr_number_lo; SIGNAL_EXEC_LIT(); } #if (CONFIG_PEEPHOLE == 1) switch(pnr.nr_number_lo) { case 0: COMPILE(&SI_LIT_0); break; case 1: COMPILE(&SI_LIT_1); break; case 2: COMPILE(&SI_LIT_2); break; case 0xFFFFFFFF: COMPILE(&SI_LIT_FFFFFFFF); break; default: COMPILE(&LIT); COMPILE(pnr.nr_number_lo); break; } #else COMPILE(&LIT); COMPILE(pnr.nr_number_lo); #endif } else { if (IS_INTERPRET()) { decision->u.id_double_number[0] = pnr.nr_number_lo; decision->u.id_double_number[1] = pnr.nr_number_hi; SIGNAL_EXEC_2LIT(); } COMPILE((u32_t)&TWOLIT); COMPILE(pnr.nr_number_lo); COMPILE(pnr.nr_number_hi); } SIGNAL_NOP(); }
static void create(varargs int clone) { TestRunner runner; COMPILE(HTTP_LOGD); /* Log daemon */ COMPILE(DAV_HOME + "initd"); /* Initialize DAV objects */ COMPILE(HTTP_AUTHENTICATE); /* Authentication daemon */ COMPILE(HTTP_AUTHORIZE); /* Authorization daemon */ #if 0 COMPILE(HTTP_STATUSD_400_500); /* Error-page handler */ #endif COMPILE(HTTP_SERVER); /* The web-server */ COMPILE(HTTP_APP); /* Web-application container */ COMPILE(HTTP_MIME); /* Mime container */ COMPILE(HTTP_COOKIE); /* Cookie container */ COMPILE(HTTP_SESSION); /* Session container */ COMPILE(HTTP_USER); /* http user object */ COMPILE(HTTP_CONTENT); /* Content container */ COMPILE(HTTP_REQUEST); /* Request object */ COMPILE(HTTP_RESPONSE); /* Response object */ COMPILE(HTTP_URI); /* URI object */ /* Run the TestAll test-suite */ runner = new_object(JORINDE_LUNIT + "data/runner"); runner->initialize( HTTP_HOME + "tests/TestAll" ); runner->silent_on_success(TRUE); runner->error_on_failure(TRUE); runner->run(); /* Done initializing */ server = find_object(HTTP_SERVER); /* ... keep reference to this */ if(server->is_started()) { DGDSYSLOG(server->get_server_string() + " started.\n"); DGDSYSLOG("Log: " + (SERVER_LOG)[1..] + "\n"); } else {
void do_AGAIN(u32_t *dest) { COMPILE(&BRANCH); COMPILE((char *)dest - (char *)var_DP); }
void do_UNTIL(u32_t *dest) { COMPILE(&ZBRANCH); COMPILE((char *)dest - (char *)var_DP); }