/* * is_llvm_bitcode_from_memory() is passed a pointer and size of a memory * buffer, a pointer to an arch_flag struct and an pointer to return the lto * module if not NULL. If it the memory is an llvm bit code it returns 1 and * sets the fields in the arch flag. If pmod is not NULL it stores the lto * module in their, if not it frees the lto module. If the memory buffer is * not an llvm bit code it returns 0. */ __private_extern__ int is_llvm_bitcode_from_memory( char *addr, uint32_t size, struct arch_flag *arch_flag, void **pmod) /* maybe NULL */ { uint32_t bufsize; char *p, *prefix, *lto_path, buf[MAXPATHLEN], resolved_name[PATH_MAX]; int i; void *mod; /* * The libLTO API's can't handle empty files. So return 0 to indicate * this is not a bitcode file if it has a zero size. */ if(size == 0) return(0); if(tried_to_load_lto == 0){ tried_to_load_lto = 1; /* * Construct the prefix to this executable assuming it is in a bin * directory relative to a lib directory of the matching lto library * and first try to load that. If not then fall back to trying * "/Applications/Xcode.app/Contents/Developer/Toolchains/ * XcodeDefault.xctoolchain/usr/lib/libLTO.dylib". */ bufsize = MAXPATHLEN; p = buf; i = _NSGetExecutablePath(p, &bufsize); if(i == -1){ p = allocate(bufsize); _NSGetExecutablePath(p, &bufsize); } prefix = realpath(p, resolved_name); p = rindex(prefix, '/'); if(p != NULL) p[1] = '\0'; lto_path = makestr(prefix, "../lib/libLTO.dylib", NULL); lto_handle = dlopen(lto_path, RTLD_NOW); if(lto_handle == NULL){ free(lto_path); lto_path = NULL; lto_handle = dlopen("/Applications/Xcode.app/Contents/" "Developer/Toolchains/XcodeDefault." "xctoolchain/usr/lib/libLTO.dylib", RTLD_NOW); } if(lto_handle == NULL) return(0); lto_is_object = dlsym(lto_handle, "lto_module_is_object_file_in_memory"); lto_create = dlsym(lto_handle, "lto_module_create_from_memory"); lto_dispose = dlsym(lto_handle, "lto_module_dispose"); lto_get_target = dlsym(lto_handle, "lto_module_get_target_triple"); lto_get_num_symbols = dlsym(lto_handle, "lto_module_get_num_symbols"); lto_get_sym_attr = dlsym(lto_handle, "lto_module_get_symbol_attribute"); lto_get_sym_name = dlsym(lto_handle, "lto_module_get_symbol_name"); if(lto_is_object == NULL || lto_create == NULL || lto_dispose == NULL || lto_get_target == NULL || lto_get_num_symbols == NULL || lto_get_sym_attr == NULL || lto_get_sym_name == NULL){ dlclose(lto_handle); if(lto_path != NULL) free(lto_path); return(0); } } if(lto_handle == NULL) return(0); if(!lto_is_object(addr, size)) return(0); mod = lto_create(addr, size); if(mod == NULL) return(0); /* * It is possible for new targets to be added to lto that are not yet * known to this code. So we will try to get lucky and let them pass * through with the cputype set to 0. This should work for things * like libtool(1) as long as we don't get two different unknown * targets. But we'll hope that just doesn't happen. */ arch_flag->cputype = 0; arch_flag->cpusubtype = 0; arch_flag->name = NULL; (void)get_lto_cputype(arch_flag, lto_get_target(mod)); if(pmod != NULL) *pmod = mod; else lto_free(mod); return(1); }
int main( int argc, char **argv, char **envp) { const char *LIB = "../libexec/as/"; const char *LOCALLIB = "../local/libexec/as/"; const char *AS = "/as"; const char *LLVM_MC = "llvm-mc"; int i, j; uint32_t count, verbose, run_llvm_mc; char *p, c, *arch_name, *as, *as_local; char **llvm_mc_argv; char *prefix, buf[MAXPATHLEN], resolved_name[PATH_MAX]; unsigned long bufsize; struct arch_flag arch_flag; const struct arch_flag *arch_flags, *family_arch_flag; enum bool oflag_specified; progname = argv[0]; arch_name = NULL; verbose = 0; run_llvm_mc = 0; oflag_specified = FALSE; /* * Construct the prefix to the assembler driver. */ bufsize = MAXPATHLEN; p = buf; i = _NSGetExecutablePath(p, &bufsize); if(i == -1){ p = allocate(bufsize); _NSGetExecutablePath(p, &bufsize); } prefix = realpath(p, resolved_name); if(realpath == NULL) system_fatal("realpath(3) for %s failed", p); p = rindex(prefix, '/'); if(p != NULL) p[1] = '\0'; /* * Process the assembler flags exactly like the assembler would (except * let the assembler complain about multiple flags, bad combinations of * flags, unknown single letter flags and the like). The main thing * here is to parse out the "-arch <arch_flag>" and to do so the * multiple argument and multiple character flags need to be known how * to be stepped over correctly. */ for(i = 1; i < argc; i++){ /* * The assembler flags start with '-' except that "--" is recognized * as assemble from stdin and that flag "--" is not allowed to be * grouped with other flags (so "-a-" is not the same as "-a --"). */ if(argv[i][0] == '-' && !(argv[i][1] == '-' && argv[i][2] == '0')){ /* * the assembler allows single letter flags to be grouped * together so "-abc" is the same as "-a -b -c". So that * logic must be followed here. */ for(p = &(argv[i][1]); (c = *p); p++){ /* * The assembler simply ignores the high bit of flag * characters and not treat them as different characters * as they are (but the argument following the flag * character is not treated this way). So it's done * here as well to match it. */ c &= 0x7F; switch(c){ /* * Flags that take a single argument. The argument is the * rest of the current argument if there is any or the it is * the next argument. Again errors like missing arguments * are not handled here but left to the assembler. */ case 'o': /* -o name */ oflag_specified = TRUE; case 'I': /* -I directory */ case 'm': /* -mc68000, -mc68010 and mc68020 */ case 'N': /* -NEXTSTEP-deployment-target */ if(p[1] == '\0') i++; break; case 'a': if(strcmp(p, "arch") == 0){ if(i + 1 >= argc) fatal("missing argument to %s option", argv[i]); if(arch_name != NULL) fatal("more than one %s option (not allowed, " "use cc(1) instead)", argv[i]); arch_name = argv[i+1]; break; } /* fall through for non "-arch" */ case 'f': case 'k': case 'g': case 'v': case 'W': case 'L': default: /* just recognize it, do nothing */ break; case 'l': if(strcmp(p, "llvm-mc") == 0) run_llvm_mc = i; /* also just recognize 'l' and do nothing */ break; case 'V': verbose = 1; break; } } } } /* * If the -llvm-mc flag was specified then run llvm-mc from the same * directory as the driver. */ if(run_llvm_mc != 0){ as = makestr(prefix, LLVM_MC, NULL); if(access(as, F_OK) != 0){ printf("%s: assembler (%s) not installed\n", progname, as); exit(1); } llvm_mc_argv = allocate(argc + 3); llvm_mc_argv[0] = as; j = 1; for(i = 1; i < argc; i++){ /* * Do not pass -llvm-mc */ if(i != run_llvm_mc){ /* * Do not pass command line argument that are Unknown to * to llvm-mc. */ if(strcmp(argv[i], "-v") != 0 && strcmp(argv[i], "-V") != 0 && strcmp(argv[i], "-force_cpusubtype_ALL") != 0){ llvm_mc_argv[j] = argv[i]; j++; } } } /* * Add -filetype=obj or llvm-mc will write to stdout. */ llvm_mc_argv[j] = "-filetype=obj"; j++; /* * llvm-mc requires a "-o a.out" if not -o is specified. */ if(oflag_specified == FALSE){ llvm_mc_argv[j] = "-o"; j++; llvm_mc_argv[j] = "a.out"; j++; } llvm_mc_argv[j] = NULL; if(execute(llvm_mc_argv, verbose)) exit(0); else exit(1); } /* * Construct the name of the assembler to run from the given -arch * <arch_flag> or if none then from the value returned from * get_arch_from_host(). */ if(arch_name == NULL){ if(get_arch_from_host(&arch_flag, NULL)){ #if __LP64__ /* * If runing as a 64-bit binary and on an Intel x86 host * default to the 64-bit assember. */ if(arch_flag.cputype == CPU_TYPE_I386) arch_flag = *get_arch_family_from_cputype(CPU_TYPE_X86_64); #endif /* __LP64__ */ arch_name = arch_flag.name; } else fatal("unknown host architecture (can't determine which " "assembler to run)"); } else{ /* * Convert a possible machine specific architecture name to a * family name to base the name of the assembler to run. */ if(get_arch_from_flag(arch_name, &arch_flag) != 0){ family_arch_flag = get_arch_family_from_cputype(arch_flag.cputype); if(family_arch_flag != NULL) arch_name = (char *)(family_arch_flag->name); } } /* * If this assembler exist try to run it else print an error message. */ as = makestr(prefix, LIB, arch_name, AS, NULL); if(access(as, F_OK) == 0){ argv[0] = as; if(execute(argv, verbose)) exit(0); else exit(1); } as_local = makestr(prefix, LOCALLIB, arch_name, AS, NULL); if(access(as_local, F_OK) == 0){ argv[0] = as_local; if(execute(argv, verbose)) exit(0); else exit(1); } printf("%s: assembler (%s or %s) for architecture %s not installed\n", progname, as, as_local, arch_name); arch_flags = get_arch_flags(); count = 0; for(i = 0; arch_flags[i].name != NULL; i++){ as = makestr(prefix, LIB, arch_flags[i].name, AS, NULL); if(access(as, F_OK) == 0){ if(count == 0) printf("Installed assemblers are:\n"); printf("%s for architecture %s\n", as, arch_flags[i].name); count++; } else{ as_local = makestr(prefix, LOCALLIB, arch_flags[i].name, AS, NULL); if(access(as_local, F_OK) == 0){ if(count == 0) printf("Installed assemblers are:\n"); printf("%s for architecture %s\n", as_local, arch_flags[i].name); count++; } } } if(count == 0) printf("%s: no assemblers installed\n", progname); exit(1); }
/*VARARGS1*/ int exec(int type, ...) { va_list args; int i; int procuid; int procgid; int ret; int fr_flg; char *cp; char *infile; char *outfile; char *errfile; char *sep; char **listp; char **file_list; char *printerName; char *printerNameToShow; static char nameBuf[100]; char *clean_title; PSTATUS *printer; RSTATUS *request; FSTATUS *form; EXEC *ep; PWSTATUS *pwheel; time_t now; struct passwd *pwp; #ifdef LP_USE_PAPI_ATTR struct stat tmpBuf; char tmpName[BUFSIZ]; char *path = NULL; #endif char *av[ARG_MAX]; char **envp = NULL; int ac = 0; char *mail_zonename = NULL; char *slabel = NULL; syslog(LOG_DEBUG, "exec(%s)", _exec_name(type)); memset(av, 0, sizeof (*av)); va_start (args, type); switch (type) { case EX_INTERF: printer = va_arg(args, PSTATUS *); request = printer->request; ep = printer->exec; break; case EX_FAULT_MESSAGE: printer = va_arg(args, PSTATUS *); request = va_arg(args, RSTATUS *); if (! ( printer->status & (PS_FORM_FAULT | PS_SHOW_FAULT))) { return(0); } ep = printer->fault_exec; printerName = (printer->printer && printer->printer->name ? printer->printer->name : "??"); snprintf(nameBuf, sizeof (nameBuf), "%s (on %s)\n", printerName, Local_System); printerNameToShow = nameBuf; (void) time(&now); (void) strftime(time_buf, sizeof (time_buf), NULL, localtime(&now)); break; case EX_SLOWF: request = va_arg(args, RSTATUS *); ep = request->exec; break; case EX_NOTIFY: request = va_arg(args, RSTATUS *); if (request->request->actions & ACT_NOTIFY) { errno = EINVAL; return (-1); } ep = request->exec; break; case EX_ALERT: printer = va_arg(args, PSTATUS *); if (!(printer->printer->fault_alert.shcmd)) { errno = EINVAL; return(-1); } ep = printer->alert->exec; break; case EX_PALERT: pwheel = va_arg(args, PWSTATUS *); ep = pwheel->alert->exec; break; case EX_FORM_MESSAGE: (void) time(&now); (void) strftime(time_buf, sizeof (time_buf), NULL, localtime(&now)); /*FALLTHRU*/ case EX_FALERT: form = va_arg(args, FSTATUS *); ep = form->alert->exec; break; default: errno = EINVAL; return(-1); } va_end (args); if (!ep || (ep->pid > 0)) { errno = EBUSY; return(-1); } ep->flags = 0; key = ep->key = getkey(); switch ((ep->pid = Fork1(ep))) { case -1: relock (); return(-1); case 0: /* * We want to be able to tell our parent how we died. */ lp_alloc_fail_handler = child_mallocfail; break; default: switch(type) { case EX_INTERF: request->request->outcome |= RS_PRINTING; break; case EX_NOTIFY: request->request->outcome |= RS_NOTIFYING; break; case EX_SLOWF: request->request->outcome |= RS_FILTERING; request->request->outcome &= ~RS_REFILTER; break; } return(0); } for (i = 0; i < NSIG; i++) (void)signal (i, SIG_DFL); (void)signal (SIGALRM, SIG_IGN); (void)signal (SIGTERM, sigtrap); closelog(); for (i = 0; i < OpenMax; i++) if (i != ChildMd->writefd) Close (i); openlog("lpsched", LOG_PID|LOG_NDELAY|LOG_NOWAIT, LOG_LPR); setpgrp(); /* Set a default path */ addenv (&envp, "PATH", "/usr/lib/lp/bin:/usr/bin:/bin:/usr/sbin:/sbin"); /* copy locale related variables */ addenv (&envp, "TZ", getenv("TZ")); addenv (&envp, "LANG", getenv("LANG")); addenv (&envp, "LC_ALL", getenv("LC_ALL")); addenv (&envp, "LC_COLLATE", getenv("LC_COLLATE")); addenv (&envp, "LC_CTYPE", getenv("LC_CTYPE")); addenv (&envp, "LC_MESSAGES", getenv("LC_MESSAGES")); addenv (&envp, "LC_MONETARY", getenv("LC_MONETARY")); addenv (&envp, "LC_NUMERIC", getenv("LC_NUMERIC")); addenv (&envp, "LC_TIME", getenv("LC_TIME")); sprintf ((cp = BIGGEST_NUMBER_S), "%ld", key); addenv (&envp, "SPOOLER_KEY", cp); #if defined(DEBUG) addenv (&envp, "LPDEBUG", (debug? "1" : "0")); #endif /* * Open the standard input, standard output, and standard error. */ switch (type) { case EX_SLOWF: case EX_INTERF: /* * stdin: /dev/null * stdout: /dev/null (EX_SLOWF), printer port (EX_INTERF) * stderr: req# */ infile = 0; outfile = 0; errfile = makereqerr(request); break; case EX_NOTIFY: /* * stdin: req# * stdout: /dev/null * stderr: /dev/null */ infile = makereqerr(request); outfile = 0; errfile = 0; break; case EX_ALERT: case EX_FALERT: case EX_PALERT: case EX_FAULT_MESSAGE: case EX_FORM_MESSAGE: /* * stdin: /dev/null * stdout: /dev/null * stderr: /dev/null */ infile = 0; outfile = 0; errfile = 0; break; } if (infile) { if (Open(infile, O_RDONLY) == -1) Done (EXEC_EXIT_NOPEN, errno); } else { if (Open("/dev/null", O_RDONLY) == -1) Done (EXEC_EXIT_NOPEN, errno); } if (outfile) { if (Open(outfile, O_CREAT|O_TRUNC|O_WRONLY, 0600) == -1) Done (EXEC_EXIT_NOPEN, errno); } else { /* * If EX_INTERF, this is still needed to cause the * standard error channel to be #2. */ if (Open("/dev/null", O_WRONLY) == -1) Done (EXEC_EXIT_NOPEN, errno); } if (errfile) { if (Open(errfile, O_CREAT|O_TRUNC|O_WRONLY, 0600) == -1) Done (EXEC_EXIT_NOPEN, errno); } else { if (Open("/dev/null", O_WRONLY) == -1) Done (EXEC_EXIT_NOPEN, errno); } switch (type) { case EX_INTERF: /* * Opening a ``port'' can be dangerous to our health: * * - Hangups can occur if the line is dropped. * - The printer may send an interrupt. * - A FIFO may be closed, generating SIGPIPE. * * We catch these so we can complain nicely. */ trap_fault_signals (); (void)Close (1); if (strchr (request->request->user, '@')) { procuid = Lp_Uid; procgid = Lp_Gid; } else { procuid = request->secure->uid; procgid = request->secure->gid; } if (printer->printer->dial_info) { ret = open_dialup(request->printer_type, printer->printer); if (ret == 0) do_undial = 1; } else { ret = open_direct(request->printer_type, printer->printer); do_undial = 0; /* this is a URI */ if (is_printer_uri(printer->printer->device) == 0) addenv(&envp, "DEVICE_URI", printer->printer->device); } addenv(&envp, "DEVICE_URI", printer->printer->device); if (ret != 0) Done (ret, errno); if (!(request->request->outcome & RS_FILTERED)) file_list = request->request->file_list; else { register int count = 0; register char * num = BIGGEST_REQID_S; register char * prefix; prefix = makestr( Lp_Temp, "/F", getreqno(request->secure->req_id), "-", (char *)0 ); file_list = (char **)Malloc( (lenlist(request->request->file_list) + 1) * sizeof(char *) ); for ( listp = request->request->file_list; *listp; listp++ ) { sprintf (num, "%d", count + 1); file_list[count] = makestr( prefix, num, (char *)0 ); count++; } file_list[count] = 0; } #ifdef LP_USE_PAPI_ATTR /* * Check if the PAPI job attribute file exists, if it does * pass the file's pathname to the printer interface script * in an environment variable. This file is created when * print jobs are submitted via the PAPI interface. */ snprintf(tmpName, sizeof (tmpName), "%s-%s", getreqno(request->secure->req_id), LP_PAPIATTRNAME); path = makepath(Lp_Temp, tmpName, (char *)0); if ((path != NULL) && (stat(path, &tmpBuf) == 0)) { /* * IPP job attribute file exists for this job so * set the environment variable */ addenv(&envp, "ATTRPATH", path); } Free(path); /* * now set environment variable for the printer's PostScript * Printer Description (PPD) file, this is used by the filter * when forming the print data for this printer. */ if ((request->printer != NULL) && (request->printer->printer != NULL) && (request->printer->printer->name != NULL)) { snprintf(tmpName, sizeof (tmpName), "%s.ppd", request->printer->printer->name); path = makepath(ETCDIR, "ppd", tmpName, (char *)0); if ((path != NULL) && (stat(path, &tmpBuf) == 0)) { addenv(&envp, "PPD", path); } Free(path); } #endif if (request->printer_type) addenv(&envp, "TERM", request->printer_type); if (!(printer->printer->daisy)) { register char * chset = 0; register char * csp; if ( request->form && request->form->form->chset && request->form->form->mandatory && !STREQU(NAME_ANY, request->form->form->chset) ) chset = request->form->form->chset; else if ( request->request->charset && !STREQU(NAME_ANY, request->request->charset) ) chset = request->request->charset; if (chset) { csp = search_cslist( chset, printer->printer->char_sets ); /* * The "strtok()" below wrecks the string * for future use, but this is a child * process where it won't be needed again. */ addenv (&envp, "CHARSET", (csp? strtok(csp, "=") : chset) ); } } if (request->fast) addenv(&envp, "FILTER", request->fast); /* * Add the sensitivity label to the environment for * banner page and header/footer processing */ if (is_system_labeled() && request->secure->slabel != NULL) addenv(&envp, "SLABEL", request->secure->slabel); /* * Add the system name to the user name (ala system!user) * unless it is already there. RFS users may have trouble * here, sorry! */ cp = strchr(request->secure->user, '@'); allTraysWithForm(printer, request->form); /* * Fix for 4137389 * Remove double quotes from title string. */ fr_flg = 1; clean_title = strdup(NB(request->request->title)); if (clean_title == NULL) { /* * strdup failed. We're probably hosed * but try setting clean_title * to original title and continuing. */ clean_title = NB(request->request->title); fr_flg = 0; } else if (strcmp(clean_title, "") != 0) { char *ct_p; for (ct_p = clean_title; *ct_p != NULL; ct_p++) { if (*ct_p == '"') *ct_p = ' '; } } av[ac++] = arg_string(TRUSTED, "%s/%s", Lp_A_Interfaces, printer->printer->name); av[ac++] = arg_string(TRUSTED, "%s", request->secure->req_id); av[ac++] = arg_string(UNTRUSTED, "%s", request->request->user); av[ac++] = arg_string(TRUSTED, "%s", clean_title); av[ac++] = arg_string(TRUSTED, "%d", request->copies); if (fr_flg) free (clean_title); sep = ""; /* * Do the administrator defined key=value pair options */ argbuf[0] = '\0'; if (printer->printer->options) { char **tmp = printer->printer->options; while(*tmp != NULL) { STRLCAT(argbuf, sep, sizeof (argbuf)); sep = " "; STRLCAT(argbuf, *tmp++, sizeof (argbuf)); } } /* * Do the administrator defined ``stty'' stuff before * the user's -o options, to allow the user to override. */ if (printer->printer->stty) { STRLCAT (argbuf, sep, sizeof (argbuf)); sep = " "; STRLCAT (argbuf, "stty='", sizeof (argbuf)); STRLCAT (argbuf, printer->printer->stty, sizeof (argbuf)); STRLCAT (argbuf, "'", sizeof (argbuf)); } /* * Do all of the user's options except the cpi/lpi/etc. * stuff, which is done separately. */ if (request->request->options) { listp = dashos(request->request->options); while (*listp) { if ( !STRNEQU(*listp, "cpi=", 4) && !STRNEQU(*listp, "lpi=", 4) && !STRNEQU(*listp, "width=", 6) && !STRNEQU(*listp, "length=", 7) ) { STRLCAT (argbuf, sep, sizeof (argbuf)); sep = " "; STRLCAT (argbuf, *listp, sizeof (argbuf)); } listp++; } } /* * The "pickfilter()" routine (from "validate()") * stored the cpi/lpi/etc. stuff that should be * used for this request. It chose form over user, * and user over printer. */ if (request->cpi) { STRLCAT (argbuf, sep, sizeof (argbuf)); sep = " "; STRLCAT (argbuf, "cpi=", sizeof (argbuf)); STRLCAT (argbuf, request->cpi, sizeof (argbuf)); } if (request->lpi) { STRLCAT (argbuf, sep, sizeof (argbuf)); sep = " "; STRLCAT (argbuf, "lpi=", sizeof (argbuf)); STRLCAT (argbuf, request->lpi, sizeof (argbuf)); } if (request->pwid) { STRLCAT (argbuf, sep, sizeof (argbuf)); sep = " "; STRLCAT (argbuf, "width=", sizeof (argbuf)); STRLCAT (argbuf, request->pwid, sizeof (argbuf)); } if (request->plen) { STRLCAT (argbuf, sep, sizeof (argbuf)); sep = " "; STRLCAT (argbuf, "length=", sizeof (argbuf)); STRLCAT (argbuf, request->plen, sizeof (argbuf)); } /* * Do the ``raw'' bit last, to ensure it gets * done. If the user doesn't want this, then he or * she can do the correct thing using -o stty= * and leaving out the -r option. */ if (request->request->actions & ACT_RAW) { STRLCAT (argbuf, sep, sizeof (argbuf)); sep = " "; STRLCAT (argbuf, "stty=-opost", sizeof (argbuf)); } /* the "options" */ av[ac++] = arg_string(UNTRUSTED, "%s", argbuf); for (listp = file_list; *listp; listp++) av[ac++] = arg_string(TRUSTED, "%s", *listp); (void)chfiles (file_list, procuid, procgid); break; case EX_SLOWF: if (request->slow) addenv(&envp, "FILTER", request->slow); if (strchr (request->request->user, '@')) { procuid = Lp_Uid; procgid = Lp_Gid; } else { procuid = request->secure->uid; procgid = request->secure->gid; } cp = _alloc_files( lenlist(request->request->file_list), getreqno(request->secure->req_id), procuid, procgid); av[ac++] = arg_string(TRUSTED, "%s", Lp_Slow_Filter); av[ac++] = arg_string(TRUSTED, "%s/%s", Lp_Temp, cp); for (listp = request->request->file_list; *listp; listp++) av[ac++] = arg_string(TRUSTED, "%s", *listp); (void)chfiles (request->request->file_list, procuid, procgid); #ifdef LP_USE_PAPI_ATTR /* * Check if the PAPI job attribute file exists, if it does * pass the file's pathname to the slow-filters in an * environment variable. Note: this file is created when * print jobs are submitted via the PAPI interface. */ snprintf(tmpName, sizeof (tmpName), "%s-%s", getreqno(request->secure->req_id), LP_PAPIATTRNAME); path = makepath(Lp_Temp, tmpName, (char *)0); if ((path != NULL) && (stat(path, &tmpBuf) == 0)) { /* * IPP job attribute file exists for this job so * set the environment variable */ addenv(&envp, "ATTRPATH", path); } Free(path); /* * now set environment variable for the printer's PostScript * Printer Description (PPD) file, this is used by the filter * when forming the print data for this printer. */ if ((request->printer != NULL) && (request->printer->printer != NULL) && (request->printer->printer->name != NULL)) { snprintf(tmpName, sizeof (tmpName), "%s.ppd", request->printer->printer->name); path = makepath(ETCDIR, "ppd", tmpName, (char *)0); if ((path != NULL) && (stat(path, &tmpBuf) == 0)) { addenv(&envp, "PPD", path); } Free(path); } #endif break; case EX_ALERT: procuid = Lp_Uid; procgid = Lp_Gid; (void)Chown (printer->alert->msgfile, procuid, procgid); av[ac++] = arg_string(TRUSTED, "%s/%s/%s", Lp_A_Printers, printer->printer->name, ALERTSHFILE); av[ac++] = arg_string(TRUSTED, "%s", printer->alert->msgfile); break; case EX_PALERT: procuid = Lp_Uid; procgid = Lp_Gid; (void)Chown (pwheel->alert->msgfile, procuid, procgid); av[ac++] = arg_string(TRUSTED, "%s/%s/%s", Lp_A_PrintWheels, pwheel->pwheel->name, ALERTSHFILE); av[ac++] = arg_string(TRUSTED, "%s", printer->alert->msgfile); break; case EX_FALERT: procuid = Lp_Uid; procgid = Lp_Gid; (void)Chown (form->alert->msgfile, procuid, procgid); av[ac++] = arg_string(TRUSTED, "%s/%s/%s", Lp_A_Forms, form->form->name, ALERTSHFILE); av[ac++] = arg_string(TRUSTED, "%s", printer->alert->msgfile); break; case EX_FORM_MESSAGE: procuid = Lp_Uid; procgid = Lp_Gid; av[ac++] = arg_string(TRUSTED, "%s/form", Lp_A_Faults); av[ac++] = arg_string(TRUSTED, "%s", form->form->name); av[ac++] = arg_string(TRUSTED, "%s", time_buf); av[ac++] = arg_string(TRUSTED, "%s/%s/%s", Lp_A_Forms, form->form->name, FORMMESSAGEFILE); break; case EX_FAULT_MESSAGE: procuid = Lp_Uid; procgid = Lp_Gid; av[ac++] = arg_string(TRUSTED, "%s/printer", Lp_A_Faults); av[ac++] = arg_string(TRUSTED, "%s", printerNameToShow); av[ac++] = arg_string(TRUSTED, "%s", time_buf); av[ac++] = arg_string(TRUSTED, "%s/%s/%s", Lp_A_Printers, printerName, FAULTMESSAGEFILE); break; case EX_NOTIFY: if (request->request->alert) { if (strchr(request->request->user, '@')) { procuid = Lp_Uid; procgid = Lp_Gid; } else { procuid = request->secure->uid; procgid = request->secure->gid; } av[ac++] = arg_string(TRUSTED, "%s", request->request->alert); } else { char *user = strdup(request->request->user); clean_string(user); slabel = request->secure->slabel; if (request->request->actions & ACT_WRITE) { av[ac++] = arg_string(TRUSTED, "%s", BINWRITE); snprintf(argbuf, sizeof (argbuf), "%s %s || %s %s", BINWRITE, user, BINMAIL, user ); av[ac++] = arg_string(TRUSTED, "/bin/sh"); av[ac++] = arg_string(TRUSTED, "-c"); av[ac++] = arg_string(TRUSTED, "%s", argbuf); } else if ((getzoneid() == GLOBAL_ZONEID) && is_system_labeled() && (slabel != NULL)) { /* * If in the global zone and the system is * labeled, mail is handled via a local * labeled zone that is the same label as * the request. */ if ((mail_zonename = get_labeled_zonename(slabel)) == (char *)-1) { /* * Cannot find labeled zone, just * return 0. */ return(0); } } if (mail_zonename == NULL) { procuid = Lp_Uid; procgid = Lp_Gid; av[ac++] = arg_string(TRUSTED, "%s", BINMAIL); av[ac++] = arg_string(UNTRUSTED, "%s", user); } else { procuid = getuid(); procgid = getgid(); av[ac++] = arg_string(TRUSTED, "%s", "/usr/sbin/zlogin"); av[ac++] = arg_string(TRUSTED, "%s", mail_zonename); av[ac++] = arg_string(TRUSTED, "%s", BINMAIL); av[ac++] = arg_string(UNTRUSTED, "%s", user); Free(mail_zonename); } free(user); } break; } av[ac++] = NULL; Fork2 (); /* only the child returns */ /* * Correctly set up the supplemental group list * for proper file access (before execl the interface program) */ pwp = getpwuid(procuid); if (pwp == NULL) { note("getpwuid(%d) call failed\n", procuid); } else if (initgroups(pwp->pw_name, procgid) < 0) { note("initgroups() call failed %d\n", errno); } setgid (procgid); setuid (procuid); /* * The shell doesn't allow the "trap" builtin to set a trap * for a signal ignored when the shell is started. Thus, don't * turn off signals in the last child! */ #ifdef DEBUG for (i = 0; av[i] != NULL; i++) note("exec(%s): av[%d] = %s", _exec_name(type), i, av[i]); for (i = 0; envp[i] != NULL; i++) note("exec(%s): envp[%d] = %s", _exec_name(type), i, envp[i]); #endif execvpe(av[0], av, envp); Done (EXEC_EXIT_NEXEC, errno); /*NOTREACHED*/ return (0); }
int main(int argc, char **argv) { int i, count = 0, self = FALSE; FILE *f, *fo; if (argc >= 2) { if ((argv[1][0] == '-') || (argv[1][0] == '/')) { if (strchr(argv[1], '?') != NULL) { about(); return 0; } if (strchr(argv[1], 's') != NULL) { silent = TRUE; } if (strchr(argv[1], 'i') != NULL) { ignorecase = TRUE; } if (strchr(argv[1], 'm') != NULL) { self = TRUE; } argv[1] = argv[0]; argv++; argc--; } } if (argc < 4) { fprintf(stderr, "frepl [-?sim] <src> <dest> <infile> [<outfile>]\n"); return 1; } else { if ((self == TRUE) || (argc >= 5)) { if ((fo = openx(0)) == NULL) { perror("error in opening temp file FREPLTMP.$$$"); return 10; } } else { fo = stdout; } } makestr(argv[1], s); makestr(argv[2], d); if (silent == FALSE) { fprintf(stderr, "Source string = \"%s\"\nDest string = \"%s\"\n", s, d); } if ((f = fopenx(argv[3], "rb")) == NULL) { if (silent == FALSE) { perror("error in opening source file"); } return 2; } for (;;) { if ((i = fgetc(f)) == EOF) { break; } if (charequal((char)i, s[0]) == TRUE) { /* 1st matched */ if (rmatch(f, s + 1) == TRUE) { if (silent == FALSE) { fprintf(stderr, "\rCount = %04d ", ++count); } fputs(d, fo); } else { fputc(i, fo); } } else { fputc(i, fo); } } fclose(f); fclose(fo); if (silent == FALSE) { fprintf(stderr, "\n"); } if ((self == TRUE) || (argc >= 5)) { if ((f = openx(1)) == NULL) { if (silent == FALSE) { perror("error in preparing to read temp file FREPLTMP.$$$"); } return 21; } if (silent == FALSE) { fprintf(stderr, "rewrite file...\n"); } if (self == TRUE) { copyto(f, argv[3], TRUE, "error in preparing to write infile"); } if (argc >= 5) { copyto(f, argv[4], FALSE, "error in preparing to write outfile"); } fclose(f); if (silent == FALSE) { fprintf(stderr, "deleting temp file...\n"); } remove("FREPLTMP.$$$"); } return 0; }
int main( int argc, char **argv, char **envp) { const char *LIB = "../libexec/as/"; const char *LOCALLIB = "../local/libexec/as/"; const char *AS = "/as"; int i, j; uint32_t count, verbose, run_clang; char *p, c, *arch_name, *as, *as_local; char **new_argv; const char *CLANG = "clang"; char *prefix, buf[MAXPATHLEN], resolved_name[PATH_MAX]; uint32_t bufsize; struct arch_flag arch_flag; const struct arch_flag *arch_flags, *family_arch_flag; enum bool oflag_specified, qflag, Qflag, some_input_files; progname = argv[0]; arch_name = NULL; verbose = 0; run_clang = 0; oflag_specified = FALSE; qflag = FALSE; Qflag = FALSE; some_input_files = FALSE; /* * Construct the prefix to the assembler driver. */ bufsize = MAXPATHLEN; p = buf; i = _NSGetExecutablePath(p, &bufsize); if(i == -1){ p = allocate(bufsize); _NSGetExecutablePath(p, &bufsize); } prefix = realpath(p, resolved_name); if(prefix == NULL) system_fatal("realpath(3) for %s failed", p); p = rindex(prefix, '/'); if(p != NULL) p[1] = '\0'; /* * Process the assembler flags exactly like the assembler would (except * let the assembler complain about multiple flags, bad combinations of * flags, unknown single letter flags and the like). The main thing * here is to parse out the "-arch <arch_flag>" and to do so the * multiple argument and multiple character flags need to be known how * to be stepped over correctly. */ for(i = 1; i < argc; i++){ /* * The assembler flags start with '-' except that "--" is recognized * as assemble from stdin and that flag "--" is not allowed to be * grouped with other flags (so "-a-" is not the same as "-a --"). */ if(argv[i][0] == '-' && !(argv[i][1] == '-' && argv[i][2] == '\0')){ /* * Treat a single "-" as reading from stdin input also. */ if(argv[i][1] == '\0') some_input_files = TRUE; /* * the assembler allows single letter flags to be grouped * together so "-abc" is the same as "-a -b -c". So that * logic must be followed here. */ for(p = &(argv[i][1]); (c = *p); p++){ /* * The assembler simply ignores the high bit of flag * characters and not treat them as different characters * as they are (but the argument following the flag * character is not treated this way). So it's done * here as well to match it. */ c &= 0x7F; switch(c){ /* * Flags that take a single argument. The argument is the * rest of the current argument if there is any or the it is * the next argument. Again errors like missing arguments * are not handled here but left to the assembler. */ case 'o': /* -o name */ oflag_specified = TRUE; case 'I': /* -I directory */ case 'm': /* -mc68000, -mc68010 and mc68020 */ case 'N': /* -NEXTSTEP-deployment-target */ /* * We want to skip the next argv if the value is not * contained in this argv eg: -I dir . */ if(p[1] == '\0') i++; /* * And in case the value is contained in this argv * (eg: -Idir), skip the rest. */ while(p[1]) p++; p = " "; /* Finished with this arg. */ break; case 'g': if(strcmp(p, "gstabs") == 0 || strcmp(p, "gdwarf2") == 0 || strcmp(p, "gdwarf-2") == 0){ p = " "; /* Finished with this arg. */ } break; case 'd': if(strcmp(p, "dynamic") == 0){ p = " "; /* Finished with this arg. */ } break; case 's': if(strcmp(p, "static") == 0){ p = " "; /* Finished with this arg. */ } break; case 'a': if(strcmp(p, "arch_multiple") == 0){ p = " "; /* Finished with this arg. */ } if(strcmp(p, "arch") == 0){ if(i + 1 >= argc) fatal("missing argument to %s option", argv[i]); if(arch_name != NULL) fatal("more than one %s option (not allowed, " "use cc(1) instead)", argv[i]); arch_name = argv[i+1]; p = " "; /* Finished with this arg. */ i++; break; } /* fall through for non "-arch" */ case 'f': if(strcmp(p, "force_cpusubtype_ALL") == 0){ p = " "; /* Finished with this arg. */ break; } case 'k': case 'v': case 'W': case 'L': case 'l': default: /* just recognize it, do nothing */ break; case 'q': qflag = TRUE; break; case 'Q': Qflag = TRUE; break; case 'V': verbose = 1; break; } } } else{ some_input_files = TRUE; } } /* * Construct the name of the assembler to run from the given -arch * <arch_flag> or if none then from the value returned from * get_arch_from_host(). */ if(arch_name == NULL){ if(get_arch_from_host(&arch_flag, NULL)){ #if __LP64__ /* * If runing as a 64-bit binary and on an Intel x86 host * default to the 64-bit assember. */ if(arch_flag.cputype == CPU_TYPE_I386) arch_flag = *get_arch_family_from_cputype(CPU_TYPE_X86_64); #endif /* __LP64__ */ arch_name = arch_flag.name; } else fatal("unknown host architecture (can't determine which " "assembler to run)"); } else{ /* * Convert a possible machine specific architecture name to a * family name to base the name of the assembler to run. */ if(get_arch_from_flag(arch_name, &arch_flag) != 0){ family_arch_flag = get_arch_family_from_cputype(arch_flag.cputype); if(family_arch_flag != NULL) arch_name = (char *)(family_arch_flag->name); } } if(qflag == TRUE && Qflag == TRUE){ printf("%s: can't specifiy both -q and -Q\n", progname); exit(1); } /* * If the environment variable AS_INTEGRATED_ASSEMBLER is set then set * the qflag to call clang(1) with -integrated-as unless the -Q flag is * set and do this for the supported architectures. */ if(Qflag == FALSE && getenv("AS_INTEGRATED_ASSEMBLER") != NULL && (arch_flag.cputype == CPU_TYPE_X86_64 || arch_flag.cputype == CPU_TYPE_I386 || arch_flag.cputype == CPU_TYPE_ARM64 || arch_flag.cputype == CPU_TYPE_ARM)){ qflag = TRUE; } if(qflag == TRUE && (arch_flag.cputype != CPU_TYPE_X86_64 && arch_flag.cputype != CPU_TYPE_I386 && arch_flag.cputype != CPU_TYPE_ARM64 && arch_flag.cputype != CPU_TYPE_ARM)){ printf("%s: can't specifiy -q with -arch %s\n", progname, arch_flag.name); exit(1); } /* * When the target assembler is for arm64, for now: * rdar://8913781 ARM64: cctools 'as' driver should invoke clang * for ARM64 assembly files * use clang. Later for: * rdar://8928193 ARM64: Standalone 'as' driver * when there is and llvm-mc based standalone 'as' driver and it is * in the usual place as the other target assemblers this use of clang * will be removed. */ if(arch_flag.cputype == CPU_TYPE_ARM64){ if(Qflag == TRUE){ printf("%s: can't specifiy -Q with -arch arm64\n", progname); exit(1); } run_clang = 1; } /* * Use the LLVM integrated assembler as the default with the as(1) * driver for Intel (64-bit & 32-bit) as well as ARM for 32-bit too * (64-bit ARM handled above) via running clang. */ if(arch_flag.cputype == CPU_TYPE_X86_64 || arch_flag.cputype == CPU_TYPE_I386 || arch_flag.cputype == CPU_TYPE_ARM) run_clang = 1; #ifndef DISABLE_CLANG_AS /* cctools-port */ if(getenv("CCTOOLS_NO_CLANG_AS") != NULL) /* cctools-port */ run_clang = 0; /* * Use the clang as the assembler if is the default or asked to with * the -q flag. But don't use it asked to use the system assembler * with the -Q flag. */ if((run_clang || qflag) && !Qflag && (arch_flag.cputype == CPU_TYPE_X86_64 || arch_flag.cputype == CPU_TYPE_I386 || arch_flag.cputype == CPU_TYPE_ARM64 || arch_flag.cputype == CPU_TYPE_ARM)){ #if 0 /* cctools port */ as = makestr(prefix, CLANG, NULL); #endif /* cctools-port start */ #ifndef __APPLE__ char *target_triple = getenv("CCTOOLS_CLANG_AS_TARGET_TRIPLE"); #endif /* ! __APPLE__ */ as = find_clang(); /* cctools-port end */ if(!as || access(as, F_OK) != 0){ /* cctools-port: added !as || */ printf("%s: assembler (%s) not installed\n", progname, as ? as : "clang"); /* cctools-port: added ? as : "clang" */ exit(1); } new_argv = allocate((argc + 10) * sizeof(char *)); /* cctools-port: + 8 -> + 10 */ new_argv[0] = as; j = 1; /* * Add "-x assembler" in case the input does not end in .s this must * come before "-" or the clang driver will issue an error: * "error: -E or -x required when input is from standard input" */ new_argv[j] = "-x"; j++; new_argv[j] = "assembler"; j++; /* * If we have not seen some some_input_files or a "-" or "--" to * indicate we are assembling stdin add a "-" so clang will * assemble stdin as as(1) would. */ if(some_input_files == FALSE){ new_argv[j] = "-"; j++; } for(i = 1; i < argc; i++){ /* * Translate as(1) use of "--" for stdin to clang's use of "-". */ if(strcmp(argv[i], "--") == 0){ new_argv[j] = "-"; j++; } /* * Do not pass command line argument that are Unknown to * to clang. */ else if(strcmp(argv[i], "-V") != 0 && strcmp(argv[i], "-q") != 0 && strcmp(argv[i], "-Q") != 0){ new_argv[j] = argv[i]; j++; } } /* * clang requires a "-o a.out" if not -o is specified. */ if(oflag_specified == FALSE){ new_argv[j] = "-o"; j++; new_argv[j] = "a.out"; j++; } /* Add -integrated-as or clang will run as(1). */ new_argv[j] = "-integrated-as"; j++; /* Add -c or clang will run ld(1). */ new_argv[j] = "-c"; j++; /* cctools-port start */ #ifndef __APPLE__ new_argv[j] = "-target"; j++; new_argv[j] = target_triple ? target_triple : "unknown-apple-darwin"; j++; #endif /* ! __APPLE__ */ /* cctools-port end */ new_argv[j] = NULL; if(execute(new_argv, verbose)) exit(0); else exit(1); } #endif /* ! DISABLE_CLANG_AS */ /* * If this assembler exist try to run it else print an error message. */ as = makestr(prefix, LIB, arch_name, AS, NULL); new_argv = allocate((argc + 1) * sizeof(char *)); new_argv[0] = as; j = 1; for(i = 1; i < argc; i++){ /* * Do not pass command line argument that are unknown to as. */ if(strcmp(argv[i], "-q") != 0 && strcmp(argv[i], "-Q") != 0){ new_argv[j] = argv[i]; j++; } } new_argv[j] = NULL; if(access(as, F_OK) == 0){ argv[0] = as; if(execute(new_argv, verbose)) exit(0); else exit(1); } as_local = makestr(prefix, LOCALLIB, arch_name, AS, NULL); new_argv[0] = as_local; if(access(as_local, F_OK) == 0){ argv[0] = as_local; if(execute(new_argv, verbose)) exit(0); else exit(1); } printf("%s: assembler (%s or %s) for architecture %s not installed\n", progname, as, as_local, arch_name); arch_flags = get_arch_flags(); count = 0; for(i = 0; arch_flags[i].name != NULL; i++){ as = makestr(prefix, LIB, arch_flags[i].name, AS, NULL); if(access(as, F_OK) == 0){ if(count == 0) printf("Installed assemblers are:\n"); printf("%s for architecture %s\n", as, arch_flags[i].name); count++; } else{ as_local = makestr(prefix, LOCALLIB, arch_flags[i].name, AS, NULL); if(access(as_local, F_OK) == 0){ if(count == 0) printf("Installed assemblers are:\n"); printf("%s for architecture %s\n", as_local, arch_flags[i].name); count++; } } } if(count == 0) printf("%s: no assemblers installed\n", progname); exit(1); }
//search in HTML document void SearchString(void) { struct HTMLrecord HTMLatom,foundatom; unsigned currentHTMLatom=p->firstonscr,foundHTMLatom,nextHTMLatom; struct HTMLframe *frame=&(p->htmlframe[p->activeframe]); long minY=0l; char *str,*tmp,*foundstr,*ptr,found=0; struct HTMLrecord *atomptr; str=farmalloc(IE_MAXLEN+2); tmp=farmalloc(IE_MAXLEN+2); foundstr=farmalloc(IE_MAXLEN+2); if(!str || !tmp || !foundstr) memerr(); getTXTprompt(str,IE_MAXLEN); if(p->HTMLatomcounter>1000) { sprintf(tmp,MSG_SRCH1,str); outs(tmp); } strlwr(str); while(currentHTMLatom!=IE_NULL) { // kbhit(); atomptr=(struct HTMLrecord *)ie_getswap(currentHTMLatom); if(!atomptr) MALLOCERR(); nextHTMLatom=atomptr->next; if(atomptr->type==TEXT && atomptr->frameID==p->activeframe && atomptr->y>=frame->posY) { memcpy(&HTMLatom,atomptr,sizeof(struct HTMLrecord)); ptr=ie_getswap(atomptr->ptr); if(!ptr) MALLOCERR(); strcpy(tmp,ptr); //tmp[IE_MAXLEN]='\0'; strlwr(tmp); if(strstr(tmp,str) && HTMLatom.y>frame->posY && lastfound!=currentHTMLatom && (lastfoundY<HTMLatom.y || lastfoundY==HTMLatom.y && lastfoundX<HTMLatom.x) && (!found || HTMLatom.y<minY)) { minY=HTMLatom.y; memcpy(&foundatom,&HTMLatom,sizeof(struct HTMLrecord)); makestr(foundstr,ptr,IE_MAXLEN); foundHTMLatom=currentHTMLatom; found=1; if(foundHTMLatom==p->firstHTMLatom) break; } } currentHTMLatom=nextHTMLatom; }//loop if(found) { if(foundatom.yy>frame->posY+frame->scroll.ysize) { frame->posY=foundatom.y-FUZZYPIX; if(frame->posY+frame->scroll.ysize>frame->scroll.total_y) frame->posY=frame->scroll.total_y-frame->scroll.ysize; if(frame->posY<0) frame->posY=0; } if(foundatom.xx>frame->posX+frame->scroll.xsize || foundatom.x<frame->posX) { frame->posX=foundatom.x; if(frame->posX+frame->scroll.xsize>frame->scroll.total_x) frame->posX=frame->scroll.total_x-frame->scroll.xsize; } //!!glennmcc: Sep 21, 2007 -- place pointer at new postion #ifdef CAV ImouseSet((int)foundatom.x,(int)foundatom.y); #endif //!!glennmcc: end if(arachne.framescount) { p->activeframe=0; redrawHTML(REDRAW_NO_MESSAGE,REDRAW_CREATE_VIRTUAL); } else redrawHTML(REDRAW_NO_MESSAGE,REDRAW_VIRTUAL); highlightatom(&foundatom); lastfound=foundHTMLatom; lastfoundY=foundatom.y; lastfoundX=foundatom.x; outs(foundstr); ie_appendclip(foundstr); GLOBAL.clipdel=0; } else { redrawHTML(REDRAW_NO_MESSAGE,REDRAW_VIRTUAL); outs(MSG_SRCH2); } farfree(foundstr); farfree(tmp); farfree(str); }
/* {APPLICATION}.make */ void F863_6993 (EIF_REFERENCE Current) { GTCX char *l_feature_name = "make"; RTEX; EIF_TYPED_VALUE up1x = {{0}, SK_POINTER}; #define up1 up1x.it_p EIF_TYPED_VALUE ur1x = {{0}, SK_REF}; #define ur1 ur1x.it_r EIF_TYPED_VALUE ui4_1x = {{0}, SK_INT32}; #define ui4_1 ui4_1x.it_i4 EIF_REFERENCE tr1 = NULL; EIF_REFERENCE tr2 = NULL; EIF_BOOLEAN tb1; RTCDT; RTSN; RTDA; RTLD; RTLI(4); RTLR(0,Current); RTLR(1,tr1); RTLR(2,tr2); RTLR(3,ur1); RTLIU(4); RTLU (SK_VOID, NULL); RTLU (SK_REF, &Current); RTEAA(l_feature_name, 862, Current, 0, 0, 12674); RTSA(dtype); RTSC; RTME(dtype, 0); RTGC; RTDBGEAA(862, Current, 12674); RTIV(Current, RTAL); RTHOOK(1); RTDBGAA(Current, dtype, 4920, 0xF800035D, 0); /* tree */ tr1 = RTLNSMART(RTWCT(4920, dtype, Dftype(Current)).id); ui4_1 = ((EIF_INTEGER_32) 10L); (FUNCTION_CAST(void, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTWC(4912, Dtype(tr1)))(tr1, ui4_1x); RTNHOOK(1,1); RTAR(Current, tr1); *(EIF_REFERENCE *)(Current + RTWA(4920, dtype)) = (EIF_REFERENCE) RTCCL(tr1); RTHOOK(2); tr1 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE)) RTWF(4920, dtype))(Current)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); RTNHOOK(2,1); ui4_1 = ((EIF_INTEGER_32) 15L); (FUNCTION_CAST(void, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTVF(4915, "add", tr1))(tr1, ui4_1x); RTHOOK(3); tr1 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE)) RTWF(4920, dtype))(Current)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); RTNHOOK(3,1); ui4_1 = ((EIF_INTEGER_32) 15L); (FUNCTION_CAST(void, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTVF(4915, "add", tr1))(tr1, ui4_1x); RTHOOK(4); tr1 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE)) RTWF(4920, dtype))(Current)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); RTNHOOK(4,1); ui4_1 = ((EIF_INTEGER_32) 20L); (FUNCTION_CAST(void, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTVF(4915, "add", tr1))(tr1, ui4_1x); RTHOOK(5); tr1 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE)) RTWF(4920, dtype))(Current)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); RTNHOOK(5,1); ui4_1 = ((EIF_INTEGER_32) 17L); (FUNCTION_CAST(void, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTVF(4915, "add", tr1))(tr1, ui4_1x); RTHOOK(6); RTDBGAA(Current, dtype, 4921, 0x04000000, 1); /* res */ tr1 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE)) RTWF(4920, dtype))(Current)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); RTNHOOK(6,1); ui4_1 = ((EIF_INTEGER_32) 15L); tb1 = (((FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTVF(4913, "haselement", tr1))(tr1, ui4_1x)).it_b); *(EIF_BOOLEAN *)(Current + RTWA(4921, dtype)) = (EIF_BOOLEAN) tb1; RTHOOK(7); tr1 = RTMS_EX_H("15 exist: ",10,1449834016); tb1 = *(EIF_BOOLEAN *)(Current + RTWA(4921, dtype)); tr2 = (tb1 ? makestr ("True", 4) : makestr ("False", 5)); ur1 = RTCCL(tr2); tr2 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTVF(4422, "plus", tr1))(tr1, ur1x)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); ur1 = RTCCL(tr2); (FUNCTION_CAST(void, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTWF(30, dtype))(Current, ur1x); RTHOOK(8); tr1 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE)) RTWF(27, dtype))(Current)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); RTNHOOK(8,1); (FUNCTION_CAST(void, (EIF_REFERENCE)) RTVF(173, "new_line", tr1))(tr1); RTHOOK(9); RTDBGAA(Current, dtype, 4921, 0x04000000, 1); /* res */ tr1 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE)) RTWF(4920, dtype))(Current)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); RTNHOOK(9,1); ui4_1 = ((EIF_INTEGER_32) 5L); tb1 = (((FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTVF(4913, "haselement", tr1))(tr1, ui4_1x)).it_b); *(EIF_BOOLEAN *)(Current + RTWA(4921, dtype)) = (EIF_BOOLEAN) tb1; RTHOOK(10); tr1 = RTMS_EX_H("5 exist: ",9,307662368); tb1 = *(EIF_BOOLEAN *)(Current + RTWA(4921, dtype)); tr2 = (tb1 ? makestr ("True", 4) : makestr ("False", 5)); ur1 = RTCCL(tr2); tr2 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTVF(4422, "plus", tr1))(tr1, ur1x)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); ur1 = RTCCL(tr2); (FUNCTION_CAST(void, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTWF(30, dtype))(Current, ur1x); RTHOOK(11); tr1 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE)) RTWF(27, dtype))(Current)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); RTNHOOK(11,1); (FUNCTION_CAST(void, (EIF_REFERENCE)) RTVF(173, "new_line", tr1))(tr1); RTHOOK(12); RTDBGAA(Current, dtype, 4921, 0x04000000, 1); /* res */ tr1 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE)) RTWF(4920, dtype))(Current)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); RTNHOOK(12,1); ui4_1 = ((EIF_INTEGER_32) 20L); tb1 = (((FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTVF(4913, "haselement", tr1))(tr1, ui4_1x)).it_b); *(EIF_BOOLEAN *)(Current + RTWA(4921, dtype)) = (EIF_BOOLEAN) tb1; RTHOOK(13); tr1 = RTMS_EX_H("20 exist: ",10,1222057760); tb1 = *(EIF_BOOLEAN *)(Current + RTWA(4921, dtype)); tr2 = (tb1 ? makestr ("True", 4) : makestr ("False", 5)); ur1 = RTCCL(tr2); tr2 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTVF(4422, "plus", tr1))(tr1, ur1x)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); ur1 = RTCCL(tr2); (FUNCTION_CAST(void, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTWF(30, dtype))(Current, ur1x); RTHOOK(14); tr1 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE)) RTWF(27, dtype))(Current)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); RTNHOOK(14,1); (FUNCTION_CAST(void, (EIF_REFERENCE)) RTVF(172, "put_new_line", tr1))(tr1); RTHOOK(15); tr1 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE)) RTWF(4920, dtype))(Current)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); RTNHOOK(15,1); ui4_1 = ((EIF_INTEGER_32) 15L); (FUNCTION_CAST(void, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTVF(4917, "remove", tr1))(tr1, ui4_1x); RTHOOK(16); tr1 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE)) RTWF(4920, dtype))(Current)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); RTNHOOK(16,1); ui4_1 = ((EIF_INTEGER_32) 5L); (FUNCTION_CAST(void, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTVF(4917, "remove", tr1))(tr1, ui4_1x); RTHOOK(17); tr1 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE)) RTWF(4920, dtype))(Current)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); RTNHOOK(17,1); ui4_1 = ((EIF_INTEGER_32) 20L); (FUNCTION_CAST(void, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTVF(4917, "remove", tr1))(tr1, ui4_1x); RTHOOK(18); tr1 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE)) RTWF(4920, dtype))(Current)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); RTNHOOK(18,1); ui4_1 = ((EIF_INTEGER_32) 17L); (FUNCTION_CAST(void, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTVF(4917, "remove", tr1))(tr1, ui4_1x); RTHOOK(19); tr1 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE)) RTWF(27, dtype))(Current)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); RTNHOOK(19,1); (FUNCTION_CAST(void, (EIF_REFERENCE)) RTVF(173, "new_line", tr1))(tr1); RTHOOK(20); RTDBGAA(Current, dtype, 4922, 0x04000000, 1); /* res2 */ tr1 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE)) RTWF(4920, dtype))(Current)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); RTNHOOK(20,1); ui4_1 = ((EIF_INTEGER_32) 15L); tb1 = (((FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTVF(4913, "haselement", tr1))(tr1, ui4_1x)).it_b); *(EIF_BOOLEAN *)(Current + RTWA(4922, dtype)) = (EIF_BOOLEAN) tb1; RTHOOK(21); tr1 = RTMS_EX_H("15 exist: ",10,1449834016); tb1 = *(EIF_BOOLEAN *)(Current + RTWA(4922, dtype)); tr2 = (tb1 ? makestr ("True", 4) : makestr ("False", 5)); ur1 = RTCCL(tr2); tr2 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTVF(4422, "plus", tr1))(tr1, ur1x)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); ur1 = RTCCL(tr2); (FUNCTION_CAST(void, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTWF(30, dtype))(Current, ur1x); RTHOOK(22); tr1 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE)) RTWF(27, dtype))(Current)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); RTNHOOK(22,1); (FUNCTION_CAST(void, (EIF_REFERENCE)) RTVF(173, "new_line", tr1))(tr1); RTHOOK(23); RTDBGAA(Current, dtype, 4922, 0x04000000, 1); /* res2 */ tr1 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE)) RTWF(4920, dtype))(Current)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); RTNHOOK(23,1); ui4_1 = ((EIF_INTEGER_32) 5L); tb1 = (((FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTVF(4913, "haselement", tr1))(tr1, ui4_1x)).it_b); *(EIF_BOOLEAN *)(Current + RTWA(4922, dtype)) = (EIF_BOOLEAN) tb1; RTHOOK(24); tr1 = RTMS_EX_H("5 exist: ",9,307662368); tb1 = *(EIF_BOOLEAN *)(Current + RTWA(4922, dtype)); tr2 = (tb1 ? makestr ("True", 4) : makestr ("False", 5)); ur1 = RTCCL(tr2); tr2 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTVF(4422, "plus", tr1))(tr1, ur1x)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); ur1 = RTCCL(tr2); (FUNCTION_CAST(void, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTWF(30, dtype))(Current, ur1x); RTHOOK(25); tr1 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE)) RTWF(27, dtype))(Current)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); RTNHOOK(25,1); (FUNCTION_CAST(void, (EIF_REFERENCE)) RTVF(173, "new_line", tr1))(tr1); RTHOOK(26); RTDBGAA(Current, dtype, 4922, 0x04000000, 1); /* res2 */ tr1 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE)) RTWF(4920, dtype))(Current)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); RTNHOOK(26,1); ui4_1 = ((EIF_INTEGER_32) 20L); tb1 = (((FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTVF(4913, "haselement", tr1))(tr1, ui4_1x)).it_b); *(EIF_BOOLEAN *)(Current + RTWA(4922, dtype)) = (EIF_BOOLEAN) tb1; RTHOOK(27); tr1 = RTMS_EX_H("20 exist: ",10,1222057760); tb1 = *(EIF_BOOLEAN *)(Current + RTWA(4922, dtype)); tr2 = (tb1 ? makestr ("True", 4) : makestr ("False", 5)); ur1 = RTCCL(tr2); tr2 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTVF(4422, "plus", tr1))(tr1, ur1x)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); ur1 = RTCCL(tr2); (FUNCTION_CAST(void, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTWF(30, dtype))(Current, ur1x); RTHOOK(28); tr1 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE)) RTWF(27, dtype))(Current)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); RTNHOOK(28,1); (FUNCTION_CAST(void, (EIF_REFERENCE)) RTVF(173, "new_line", tr1))(tr1); RTHOOK(29); tr1 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE)) RTWF(4920, dtype))(Current)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); RTNHOOK(29,1); ui4_1 = ((EIF_INTEGER_32) 10L); (FUNCTION_CAST(void, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTVF(4917, "remove", tr1))(tr1, ui4_1x); RTHOOK(30); RTDBGAA(Current, dtype, 4922, 0x04000000, 1); /* res2 */ tr1 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE)) RTWF(4920, dtype))(Current)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); RTNHOOK(30,1); ui4_1 = ((EIF_INTEGER_32) 10L); tb1 = (((FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTVF(4913, "haselement", tr1))(tr1, ui4_1x)).it_b); *(EIF_BOOLEAN *)(Current + RTWA(4922, dtype)) = (EIF_BOOLEAN) tb1; RTHOOK(31); tr1 = RTMS_EX_H("10 exist: ",10,1154922016); tb1 = *(EIF_BOOLEAN *)(Current + RTWA(4922, dtype)); tr2 = (tb1 ? makestr ("True", 4) : makestr ("False", 5)); ur1 = RTCCL(tr2); tr2 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTVF(4422, "plus", tr1))(tr1, ur1x)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); ur1 = RTCCL(tr2); (FUNCTION_CAST(void, (EIF_REFERENCE, EIF_TYPED_VALUE)) RTWF(30, dtype))(Current, ur1x); RTHOOK(32); tr1 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE)) RTWF(27, dtype))(Current)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); RTNHOOK(32,1); (FUNCTION_CAST(void, (EIF_REFERENCE)) RTVF(173, "new_line", tr1))(tr1); RTHOOK(33); tr1 = ((up1x = (FUNCTION_CAST(EIF_TYPED_VALUE, (EIF_REFERENCE)) RTWF(27, dtype))(Current)), (((up1x.type & SK_HEAD) == SK_REF)? (EIF_REFERENCE) 0: (up1x.it_r = RTBU(up1x))), (up1x.type = SK_POINTER), up1x.it_r); RTNHOOK(33,1); (FUNCTION_CAST(void, (EIF_REFERENCE)) RTVF(172, "put_new_line", tr1))(tr1); RTVI(Current, RTAL); RTRS; RTHOOK(34); RTDBGLE; RTMD(0); RTLE; RTLO(2); RTEE; #undef up1 #undef ur1 #undef ui4_1 }