static void Z8_union_internal(CL_FORM *base, CL_FORM *display[]) { M1_1:; if(CL_TRUEP(ARG(0))) { if(CL_TRUEP(&display[0][4])) { COPY(&display[0][4], ARG(1)); if(CL_CONSP(ARG(0))) { COPY(GET_CAR(ARG(0)), ARG(2)); } else { LOAD_SMSTR((CL_FORM *)&KClisp[264], ARG(2)); /* ~a is not a list */ COPY(ARG(0), ARG(3)); Ferror(ARG(2), 2); } Ffuncall(ARG(1), 2); mv_count = 1; } else { if(CL_CONSP(ARG(0))) { COPY(GET_CAR(ARG(0)), ARG(1)); } else { LOAD_SMSTR((CL_FORM *)&KClisp[264], ARG(1)); /* ~a is not a list */ COPY(ARG(0), ARG(2)); Ferror(ARG(1), 2); } } COPY(&display[0][1], ARG(2)); COPY(&display[0][2], ARG(3)); COPY(&display[0][4], ARG(4)); COPY(ARG(1), ARG(5)); COPY(ARG(2), ARG(6)); COPY(ARG(3), ARG(7)); LOAD_NIL(ARG(8)); COPY(ARG(4), ARG(9)); member1(ARG(5)); if(CL_TRUEP(ARG(5))) { COPY(ARG(0), ARG(1)); if(CL_CONSP(ARG(1))) { COPY(GET_CDR(ARG(1)), ARG(0)); } else { LOAD_SMSTR((CL_FORM *)&KClisp[262], ARG(0)); /* ~a is not a list */ Ferror(ARG(0), 2); } goto M1_1; } else { if(CL_CONSP(ARG(0))) { COPY(GET_CAR(ARG(0)), ARG(1)); } else { LOAD_SMSTR((CL_FORM *)&KClisp[264], ARG(1)); /* ~a is not a list */ COPY(ARG(0), ARG(2)); Ferror(ARG(1), 2); } if(CL_CONSP(ARG(0))) { COPY(GET_CDR(ARG(0)), ARG(2)); } else { LOAD_SMSTR((CL_FORM *)&KClisp[262], ARG(2)); /* ~a is not a list */ COPY(ARG(0), ARG(3)); Ferror(ARG(2), 2); } Z8_union_internal(ARG(2), display); ALLOC_CONS(ARG(3), ARG(1), ARG(2), ARG(0)); } } else { COPY(&display[0][1], ARG(0)); } goto RETURN1; RETURN1:; }
void * rpmShowProgress(const void * arg, const rpmCallbackType what, const rpm_loff_t amount, const rpm_loff_t total, fnpyKey key, void * data) { Header h = (Header) arg; int flags = (int) ((long)data); void * rc = NULL; const char * filename = (const char *)key; static FD_t fd = NULL; switch (what) { case RPMCALLBACK_INST_OPEN_FILE: if (filename == NULL || filename[0] == '\0') return NULL; fd = Fopen(filename, "r.ufdio"); /* FIX: still necessary? */ if (fd == NULL || Ferror(fd)) { rpmlog(RPMLOG_ERR, _("open of %s failed: %s\n"), filename, Fstrerror(fd)); if (fd != NULL) { Fclose(fd); fd = NULL; } } else fd = fdLink(fd); #if defined(POSIX_FADV_WILLNEED) (void) Fadvise(fd, 0, 0, POSIX_FADV_WILLNEED); #endif return (void *)fd; break; case RPMCALLBACK_INST_CLOSE_FILE: /* FIX: still necessary? */ fd = fdFree(fd); if (fd != NULL) { Fclose(fd); fd = NULL; } break; case RPMCALLBACK_INST_START: case RPMCALLBACK_UNINST_START: if (rpmcliProgressState != what) { rpmcliProgressState = what; if (flags & INSTALL_HASH) { if (what == RPMCALLBACK_INST_START) { fprintf(stdout, _("Updating / installing...\n")); } else { fprintf(stdout, _("Cleaning up / removing...\n")); } fflush(stdout); } } rpmcliHashesCurrent = 0; if (h == NULL || !(flags & INSTALL_LABEL)) break; if (flags & INSTALL_HASH) { char *s = headerGetAsString(h, RPMTAG_NEVR); if (isatty (STDOUT_FILENO)) fprintf(stdout, "%4d:%-33.33s", rpmcliProgressCurrent + 1, s); else fprintf(stdout, "%-38.38s", s); (void) fflush(stdout); free(s); } else { char *s = headerGetAsString(h, RPMTAG_NEVRA); fprintf(stdout, "%s\n", s); (void) fflush(stdout); free(s); } break; case RPMCALLBACK_INST_STOP: break; case RPMCALLBACK_TRANS_PROGRESS: case RPMCALLBACK_INST_PROGRESS: case RPMCALLBACK_UNINST_PROGRESS: if (flags & INSTALL_PERCENT) fprintf(stdout, "%%%% %f\n", (double) (total ? ((((float) amount) / total) * 100) : 100.0)); else if (flags & INSTALL_HASH) printHash(amount, total); (void) fflush(stdout); break; case RPMCALLBACK_TRANS_START: rpmcliHashesCurrent = 0; rpmcliProgressTotal = 1; rpmcliProgressCurrent = 0; rpmcliPackagesTotal = total; rpmcliProgressState = what; if (!(flags & INSTALL_LABEL)) break; if (flags & INSTALL_HASH) fprintf(stdout, "%-38s", _("Preparing...")); else fprintf(stdout, "%s\n", _("Preparing packages...")); (void) fflush(stdout); break; case RPMCALLBACK_TRANS_STOP: if (flags & INSTALL_HASH) printHash(1, 1); /* Fixes "preparing..." progress bar */ rpmcliProgressTotal = rpmcliPackagesTotal; rpmcliProgressCurrent = 0; break; case RPMCALLBACK_UNINST_STOP: break; case RPMCALLBACK_UNPACK_ERROR: break; case RPMCALLBACK_CPIO_ERROR: break; case RPMCALLBACK_SCRIPT_ERROR: break; case RPMCALLBACK_SCRIPT_START: break; case RPMCALLBACK_SCRIPT_STOP: break; case RPMCALLBACK_UNKNOWN: default: break; } return rc; }
/** \ingroup rpmcli * Create/modify elements in signature header. * @param rpm path to package * @param deleting adding or deleting signature? * @param signfiles sign files if non-zero * @return 0 on success, -1 on error */ static int rpmSign(const char *rpm, int deleting, int signfiles) { FD_t fd = NULL; FD_t ofd = NULL; char *trpm = NULL; Header sigh = NULL; Header h = NULL; char *msg = NULL; int res = -1; /* assume failure */ rpmRC rc; struct rpmtd_s utd; off_t headerStart; off_t sigStart; struct sigTarget_s sigt_v3; struct sigTarget_s sigt_v4; unsigned int origSigSize; int insSig = 0; fprintf(stdout, "%s:\n", rpm); if (manageFile(&fd, rpm, O_RDWR)) goto exit; if ((rc = rpmLeadRead(fd, &msg)) != RPMRC_OK) { rpmlog(RPMLOG_ERR, "%s: %s\n", rpm, msg); goto exit; } sigStart = Ftell(fd); rc = rpmReadSignature(fd, &sigh, &msg); if (rc != RPMRC_OK) { rpmlog(RPMLOG_ERR, _("%s: rpmReadSignature failed: %s"), rpm, (msg && *msg ? msg : "\n")); goto exit; } headerStart = Ftell(fd); if (rpmReadHeader(NULL, fd, &h, &msg) != RPMRC_OK) { rpmlog(RPMLOG_ERR, _("%s: headerRead failed: %s\n"), rpm, msg); goto exit; } if (!headerIsEntry(h, RPMTAG_HEADERIMMUTABLE)) { rpmlog(RPMLOG_ERR, _("Cannot sign RPM v3 packages\n")); goto exit; } unloadImmutableRegion(&sigh, RPMTAG_HEADERSIGNATURES); origSigSize = headerSizeof(sigh, HEADER_MAGIC_YES); if (signfiles) { if (includeFileSignatures(&sigh, &h)) goto exit; } if (deleting) { /* Nuke all the signature tags. */ deleteSigs(sigh); } else { /* Signature target containing header + payload */ sigt_v3.fd = fd; sigt_v3.start = headerStart; sigt_v3.fileName = rpm; sigt_v3.size = fdSize(fd) - headerStart; /* Signature target containing only header */ sigt_v4 = sigt_v3; sigt_v4.size = headerSizeof(h, HEADER_MAGIC_YES); res = replaceSignature(sigh, &sigt_v3, &sigt_v4); if (res != 0) { if (res == 1) { rpmlog(RPMLOG_WARNING, _("%s already contains identical signature, skipping\n"), rpm); /* Identical signature is not an error */ res = 0; } goto exit; } res = -1; } /* Try to make new signature smaller to have size of original signature */ rpmtdReset(&utd); if (headerGet(sigh, RPMSIGTAG_RESERVEDSPACE, &utd, HEADERGET_MINMEM)) { int diff; int count; char *reservedSpace = NULL; count = utd.count; diff = headerSizeof(sigh, HEADER_MAGIC_YES) - origSigSize; if (diff < count) { reservedSpace = xcalloc(count - diff, sizeof(char)); headerDel(sigh, RPMSIGTAG_RESERVEDSPACE); rpmtdReset(&utd); utd.tag = RPMSIGTAG_RESERVEDSPACE; utd.count = count - diff; utd.type = RPM_BIN_TYPE; utd.data = reservedSpace; headerPut(sigh, &utd, HEADERPUT_DEFAULT); free(reservedSpace); insSig = 1; } } /* Reallocate the signature into one contiguous region. */ sigh = headerReload(sigh, RPMTAG_HEADERSIGNATURES); if (sigh == NULL) /* XXX can't happen */ goto exit; if (insSig) { /* Insert new signature into original rpm */ if (Fseek(fd, sigStart, SEEK_SET) < 0) { rpmlog(RPMLOG_ERR, _("Could not seek in file %s: %s\n"), rpm, Fstrerror(fd)); goto exit; } if (rpmWriteSignature(fd, sigh)) { rpmlog(RPMLOG_ERR, _("%s: rpmWriteSignature failed: %s\n"), rpm, Fstrerror(fd)); goto exit; } res = 0; } else { /* Replace orignal rpm with new rpm containing new signature */ rasprintf(&trpm, "%s.XXXXXX", rpm); ofd = rpmMkTemp(trpm); if (ofd == NULL || Ferror(ofd)) { rpmlog(RPMLOG_ERR, _("rpmMkTemp failed\n")); goto exit; } /* Write the lead/signature of the output rpm */ rc = rpmLeadWrite(ofd, h); if (rc != RPMRC_OK) { rpmlog(RPMLOG_ERR, _("%s: writeLead failed: %s\n"), trpm, Fstrerror(ofd)); goto exit; } if (rpmWriteSignature(ofd, sigh)) { rpmlog(RPMLOG_ERR, _("%s: rpmWriteSignature failed: %s\n"), trpm, Fstrerror(ofd)); goto exit; } if (Fseek(fd, headerStart, SEEK_SET) < 0) { rpmlog(RPMLOG_ERR, _("Could not seek in file %s: %s\n"), rpm, Fstrerror(fd)); goto exit; } /* Append the header and archive from the temp file */ if (copyFile(&fd, rpm, &ofd, trpm) == 0) { struct stat st; /* Move final target into place, restore file permissions. */ if (stat(rpm, &st) == 0 && unlink(rpm) == 0 && rename(trpm, rpm) == 0 && chmod(rpm, st.st_mode) == 0) { res = 0; } else { rpmlog(RPMLOG_ERR, _("replacing %s failed: %s\n"), rpm, strerror(errno)); } } } exit: if (fd) (void) closeFile(&fd); if (ofd) (void) closeFile(&ofd); headerFree(sigh); headerFree(h); free(msg); /* Clean up intermediate target */ if (trpm) { (void) unlink(trpm); free(trpm); } return res; }
void Penumerate_directories(CL_FORM *base) { M1_1:; if(CL_TRUEP(ARG(1))) { if(CL_CONSP(ARG(1))) { COPY(GET_CAR(ARG(1)), ARG(5)); } else { LOAD_SMSTR((CL_FORM *)&KClisp[239], ARG(5)); /* ~a is not a list */ COPY(ARG(1), ARG(6)); Ferror(ARG(5), 2); } if(CL_SMSTRP(ARG(5))) { LOAD_SYMBOL(SYMBOL(Slisp, 44), ARG(6)); /* STRING */ COPY(ARG(0), ARG(7)); COPY(ARG(5), ARG(8)); LOAD_SMSTR((CL_FORM *)&KPenumerate_directories[0], ARG(9)); /* / */ Fconcatenate(ARG(6), 4); if(CL_CONSP(ARG(1))) { COPY(GET_CDR(ARG(1)), ARG(7)); } else { LOAD_SMSTR((CL_FORM *)&KClisp[241], ARG(7)); /* ~a is not a list */ COPY(ARG(1), ARG(8)); Ferror(ARG(7), 2); } COPY(ARG(6), ARG(0)); COPY(ARG(7), ARG(1)); LOAD_SYMBOL(SYMBOL(Slisp, 48), ARG(3)); /* T */ goto M1_1; } else { if(CL_SYMBOLP(ARG(5)) && GET_SYMBOL(ARG(5)) == SYMBOL(Slisp, 265)) /* UP */ { LOAD_SYMBOL(SYMBOL(Slisp, 44), ARG(6)); /* STRING */ COPY(ARG(0), ARG(7)); LOAD_SMSTR((CL_FORM *)&KPenumerate_directories[2], ARG(8)); /* ../ */ Fconcatenate(ARG(6), 3); if(CL_CONSP(ARG(1))) { COPY(GET_CDR(ARG(1)), ARG(7)); } else { LOAD_SMSTR((CL_FORM *)&KClisp[241], ARG(7)); /* ~a is not a list */ COPY(ARG(1), ARG(8)); Ferror(ARG(7), 2); } COPY(ARG(6), ARG(0)); COPY(ARG(7), ARG(1)); LOAD_SYMBOL(SYMBOL(Slisp, 48), ARG(3)); /* T */ goto M1_1; } else { LOAD_SMSTR((CL_FORM *)&KPenumerate_directories[4], ARG(0)); /* etypecase: the value ~a is not a legal value */ COPY(ARG(5), ARG(1)); Ferror(ARG(0), 2); } } } else { COPY(ARG(2), ARG(1)); LOAD_SYMBOL(SYMBOL(Slisp, 48), ARG(2)); /* T */ COPY(ARG(4), ARG(3)); Penumerate_files(ARG(0)); } goto RETURN1; RETURN1:; }
/** @todo Generalize --freshen policies. */ int rpmInstall(rpmts ts, struct rpmInstallArguments_s * ia, ARGV_t fileArgv) { struct rpmEIU * eiu = xcalloc(1, sizeof(*eiu)); rpmps ps; rpmprobFilterFlags probFilter; rpmRelocation * relocations; char * fileURL = NULL; int stopInstall = 0; rpmVSFlags vsflags, ovsflags, tvsflags; int rc; int xx; int i; if (fileArgv == NULL) goto exit; rpmcliPackagesTotal = 0; (void) rpmtsSetFlags(ts, ia->transFlags); probFilter = ia->probFilter; relocations = ia->relocations; if (ia->installInterfaceFlags & INSTALL_UPGRADE) vsflags = rpmExpandNumeric("%{?_vsflags_erase}"); else vsflags = rpmExpandNumeric("%{?_vsflags_install}"); if (ia->qva_flags & VERIFY_DIGEST) vsflags |= _RPMVSF_NODIGESTS; if (ia->qva_flags & VERIFY_SIGNATURE) vsflags |= _RPMVSF_NOSIGNATURES; if (ia->qva_flags & VERIFY_HDRCHK) vsflags |= RPMVSF_NOHDRCHK; ovsflags = rpmtsSetVSFlags(ts, (vsflags | RPMVSF_NEEDPAYLOAD)); { int notifyFlags; notifyFlags = ia->installInterfaceFlags | (rpmIsVerbose() ? INSTALL_LABEL : 0 ); xx = rpmtsSetNotifyCallback(ts, rpmShowProgress, (void *) ((long)notifyFlags)); } if ((eiu->relocations = relocations) != NULL) { while (eiu->relocations->oldPath) eiu->relocations++; if (eiu->relocations->newPath == NULL) eiu->relocations = NULL; } /* Build fully globbed list of arguments in argv[argc]. */ for (eiu->fnp = fileArgv; *eiu->fnp != NULL; eiu->fnp++) { ARGV_t av = NULL; int ac = 0; char * fn; fn = rpmEscapeSpaces(*eiu->fnp); rc = rpmGlob(fn, &ac, &av); fn = _free(fn); if (rc || ac == 0) { rpmlog(RPMLOG_ERR, _("File not found by glob: %s\n"), *eiu->fnp); eiu->numFailed++; continue; } argvAppend(&(eiu->argv), av); argvFree(av); eiu->argc += ac; } restart: /* Allocate sufficient storage for next set of args. */ if (eiu->pkgx >= eiu->numPkgs) { eiu->numPkgs = eiu->pkgx + eiu->argc; eiu->pkgURL = xrealloc(eiu->pkgURL, (eiu->numPkgs + 1) * sizeof(*eiu->pkgURL)); memset(eiu->pkgURL + eiu->pkgx, 0, ((eiu->argc + 1) * sizeof(*eiu->pkgURL))); eiu->pkgState = xrealloc(eiu->pkgState, (eiu->numPkgs + 1) * sizeof(*eiu->pkgState)); memset(eiu->pkgState + eiu->pkgx, 0, ((eiu->argc + 1) * sizeof(*eiu->pkgState))); } /* Retrieve next set of args, cache on local storage. */ for (i = 0; i < eiu->argc; i++) { fileURL = _free(fileURL); fileURL = eiu->argv[i]; eiu->argv[i] = NULL; switch (urlIsURL(fileURL)) { case URL_IS_HTTPS: case URL_IS_HTTP: case URL_IS_FTP: { char *tfn; FD_t tfd; if (rpmIsVerbose()) fprintf(stdout, _("Retrieving %s\n"), fileURL); tfd = rpmMkTempFile(rpmtsRootDir(ts), &tfn); if (tfd && tfn) { Fclose(tfd); rc = urlGetFile(fileURL, tfn); } else { rc = -1; } if (rc != 0) { rpmlog(RPMLOG_ERR, _("skipping %s - transfer failed\n"), fileURL); eiu->numFailed++; eiu->pkgURL[eiu->pkgx] = NULL; tfn = _free(tfn); break; } eiu->pkgState[eiu->pkgx] = 1; eiu->pkgURL[eiu->pkgx] = tfn; eiu->pkgx++; } break; case URL_IS_PATH: case URL_IS_DASH: /* WRONG WRONG WRONG */ case URL_IS_HKP: /* WRONG WRONG WRONG */ default: eiu->pkgURL[eiu->pkgx] = fileURL; fileURL = NULL; eiu->pkgx++; break; } } fileURL = _free(fileURL); if (eiu->numFailed) goto exit; /* Continue processing file arguments, building transaction set. */ for (eiu->fnp = eiu->pkgURL+eiu->prevx; *eiu->fnp != NULL; eiu->fnp++, eiu->prevx++) { const char * fileName; rpmlog(RPMLOG_DEBUG, "============== %s\n", *eiu->fnp); (void) urlPath(*eiu->fnp, &fileName); /* Try to read the header from a package file. */ eiu->fd = Fopen(*eiu->fnp, "r.ufdio"); if (eiu->fd == NULL || Ferror(eiu->fd)) { rpmlog(RPMLOG_ERR, _("open of %s failed: %s\n"), *eiu->fnp, Fstrerror(eiu->fd)); if (eiu->fd != NULL) { xx = Fclose(eiu->fd); eiu->fd = NULL; } eiu->numFailed++; *eiu->fnp = NULL; continue; } /* Read the header, verifying signatures (if present). */ tvsflags = rpmtsSetVSFlags(ts, vsflags); eiu->rpmrc = rpmReadPackageFile(ts, eiu->fd, *eiu->fnp, &eiu->h); tvsflags = rpmtsSetVSFlags(ts, tvsflags); xx = Fclose(eiu->fd); eiu->fd = NULL; switch (eiu->rpmrc) { case RPMRC_FAIL: rpmlog(RPMLOG_ERR, _("%s cannot be installed\n"), *eiu->fnp); eiu->numFailed++; *eiu->fnp = NULL; continue; break; case RPMRC_NOTFOUND: goto maybe_manifest; break; case RPMRC_NOTTRUSTED: case RPMRC_NOKEY: case RPMRC_OK: default: break; } eiu->isSource = headerIsSource(eiu->h); if (eiu->isSource) { rpmlog(RPMLOG_DEBUG, "\tadded source package [%d]\n", eiu->numSRPMS); eiu->sourceURL = xrealloc(eiu->sourceURL, (eiu->numSRPMS + 2) * sizeof(*eiu->sourceURL)); eiu->sourceURL[eiu->numSRPMS] = *eiu->fnp; *eiu->fnp = NULL; eiu->numSRPMS++; eiu->sourceURL[eiu->numSRPMS] = NULL; continue; } if (eiu->relocations) { struct rpmtd_s prefixes; headerGet(eiu->h, RPMTAG_PREFIXES, &prefixes, HEADERGET_DEFAULT); if (rpmtdCount(&prefixes) == 1) { eiu->relocations->oldPath = xstrdup(rpmtdGetString(&prefixes)); rpmtdFreeData(&prefixes); } else { const char * name; xx = headerNVR(eiu->h, &name, NULL, NULL); rpmlog(RPMLOG_ERR, _("package %s is not relocatable\n"), name); eiu->numFailed++; goto exit; } } /* On --freshen, verify package is installed and newer */ if (ia->installInterfaceFlags & INSTALL_FRESHEN) { rpmdbMatchIterator mi; const char * name; Header oldH; int count; xx = headerNVR(eiu->h, &name, NULL, NULL); mi = rpmtsInitIterator(ts, RPMTAG_NAME, name, 0); count = rpmdbGetIteratorCount(mi); while ((oldH = rpmdbNextIterator(mi)) != NULL) { if (rpmVersionCompare(oldH, eiu->h) < 0) continue; /* same or newer package already installed */ count = 0; break; } mi = rpmdbFreeIterator(mi); if (count == 0) { eiu->h = headerFree(eiu->h); continue; } /* Package is newer than those currently installed. */ } rc = rpmtsAddInstallElement(ts, eiu->h, (fnpyKey)fileName, (ia->installInterfaceFlags & INSTALL_UPGRADE) != 0, relocations); /* XXX reference held by transaction set */ eiu->h = headerFree(eiu->h); if (eiu->relocations) eiu->relocations->oldPath = _free(eiu->relocations->oldPath); switch(rc) { case 0: rpmlog(RPMLOG_DEBUG, "\tadded binary package [%d]\n", eiu->numRPMS); break; case 1: rpmlog(RPMLOG_ERR, _("error reading from file %s\n"), *eiu->fnp); eiu->numFailed++; goto exit; break; case 2: rpmlog(RPMLOG_ERR, _("file %s requires a newer version of RPM\n"), *eiu->fnp); eiu->numFailed++; goto exit; break; default: eiu->numFailed++; goto exit; break; } eiu->numRPMS++; continue; maybe_manifest: /* Try to read a package manifest. */ eiu->fd = Fopen(*eiu->fnp, "r.fpio"); if (eiu->fd == NULL || Ferror(eiu->fd)) { rpmlog(RPMLOG_ERR, _("open of %s failed: %s\n"), *eiu->fnp, Fstrerror(eiu->fd)); if (eiu->fd != NULL) { xx = Fclose(eiu->fd); eiu->fd = NULL; } eiu->numFailed++; *eiu->fnp = NULL; break; } /* Read list of packages from manifest. */ /* FIX: *eiu->argv can be NULL */ rc = rpmReadPackageManifest(eiu->fd, &eiu->argc, &eiu->argv); if (rc != RPMRC_OK) rpmlog(RPMLOG_ERR, _("%s: not an rpm package (or package manifest): %s\n"), *eiu->fnp, Fstrerror(eiu->fd)); xx = Fclose(eiu->fd); eiu->fd = NULL; /* If successful, restart the query loop. */ if (rc == RPMRC_OK) { eiu->prevx++; goto restart; } eiu->numFailed++; *eiu->fnp = NULL; break; } rpmlog(RPMLOG_DEBUG, "found %d source and %d binary packages\n", eiu->numSRPMS, eiu->numRPMS); if (eiu->numFailed) goto exit; if (eiu->numRPMS && !(ia->installInterfaceFlags & INSTALL_NODEPS)) { if (rpmtsCheck(ts)) { eiu->numFailed = eiu->numPkgs; stopInstall = 1; } ps = rpmtsProblems(ts); if (!stopInstall && rpmpsNumProblems(ps) > 0) { rpmlog(RPMLOG_ERR, _("Failed dependencies:\n")); rpmpsPrint(NULL, ps); eiu->numFailed = eiu->numPkgs; stopInstall = 1; } ps = rpmpsFree(ps); } if (eiu->numRPMS && !(ia->installInterfaceFlags & INSTALL_NOORDER)) { if (rpmtsOrder(ts)) { eiu->numFailed = eiu->numPkgs; stopInstall = 1; } } if (eiu->numRPMS && !stopInstall) { rpmcliPackagesTotal += eiu->numSRPMS; rpmlog(RPMLOG_DEBUG, "installing binary packages\n"); /* Drop added/available package indices and dependency sets. */ rpmtsClean(ts); rc = rpmtsRun(ts, NULL, probFilter); ps = rpmtsProblems(ts); if (rc < 0) { eiu->numFailed += eiu->numRPMS; } else if (rc > 0) { eiu->numFailed += rc; if (rpmpsNumProblems(ps) > 0) rpmpsPrint(stderr, ps); } ps = rpmpsFree(ps); } if (eiu->numSRPMS && !stopInstall) { if (eiu->sourceURL != NULL) for (i = 0; i < eiu->numSRPMS; i++) { rpmdbCheckSignals(); if (eiu->sourceURL[i] == NULL) continue; eiu->fd = Fopen(eiu->sourceURL[i], "r.ufdio"); if (eiu->fd == NULL || Ferror(eiu->fd)) { rpmlog(RPMLOG_ERR, _("cannot open file %s: %s\n"), eiu->sourceURL[i], Fstrerror(eiu->fd)); if (eiu->fd != NULL) { xx = Fclose(eiu->fd); eiu->fd = NULL; } continue; } if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_TEST)) { eiu->rpmrc = rpmInstallSourcePackage(ts, eiu->fd, NULL, NULL); if (eiu->rpmrc != RPMRC_OK) eiu->numFailed++; } xx = Fclose(eiu->fd); eiu->fd = NULL; } } exit: if (eiu->pkgURL != NULL) for (i = 0; i < eiu->numPkgs; i++) { if (eiu->pkgURL[i] == NULL) continue; if (eiu->pkgState[i] == 1) (void) unlink(eiu->pkgURL[i]); eiu->pkgURL[i] = _free(eiu->pkgURL[i]); } eiu->pkgState = _free(eiu->pkgState); eiu->pkgURL = _free(eiu->pkgURL); eiu->argv = _free(eiu->argv); rc = eiu->numFailed; free(eiu); rpmtsEmpty(ts); return rc; }
void Ftypep(CL_FORM *base) { if(CL_SYMBOLP(ARG(1)) && GET_SYMBOL(ARG(1)) == SYMBOL(Slisp, 48)) /* T */ { LOAD_SYMBOL(SYMBOL(Slisp, 48), ARG(0)); /* T */ } else { if(CL_TRUEP(ARG(1))) { if(CL_SYMBOLP(ARG(1)) && GET_SYMBOL(ARG(1)) == SYMBOL(Slisp, 23)) /* FIXNUM */ { if(CL_FIXNUMP(ARG(0))) { COPY(SYMVAL(Slisp, 1), ARG(2)); /* MOST-NEGATIVE-FIXNUM */ COPY(ARG(0), ARG(3)); COPY(SYMVAL(Slisp, 0), ARG(4)); /* MOST-POSITIVE-FIXNUM */ Fle(ARG(2), 3); COPY(ARG(2), ARG(0)); } else { LOAD_NIL(ARG(0)); } } else { LOAD_BOOL(CL_SYMBOLP(ARG(1)) && GET_SYMBOL(ARG(1)) == SYMBOL(Slisp, 24), ARG(2)); /* FLOAT */ if(CL_TRUEP(ARG(2))) { goto THEN1; } else { LOAD_BOOL(CL_SYMBOLP(ARG(1)) && GET_SYMBOL(ARG(1)) == SYMBOL(Slisp, 37), ARG(3)); /* SHORT-FLOAT */ if(CL_TRUEP(ARG(3))) { goto THEN1; } else { LOAD_BOOL(CL_SYMBOLP(ARG(1)) && GET_SYMBOL(ARG(1)) == SYMBOL(Slisp, 42), ARG(4)); /* SINGLE-FLOAT */ if(CL_TRUEP(ARG(4))) { goto THEN1; } else { LOAD_BOOL(CL_SYMBOLP(ARG(1)) && GET_SYMBOL(ARG(1)) == SYMBOL(Slisp, 22), ARG(5)); /* DOUBLE-FLOAT */ if(CL_TRUEP(ARG(5))) { goto THEN1; } else { } /* LONG-FLOAT */ } } } if(CL_SYMBOLP(ARG(1)) && GET_SYMBOL(ARG(1)) == SYMBOL(Slisp, 29)) { THEN1:; LOAD_BOOL(CL_FLOATP(ARG(0)), ARG(0)); } else { LOAD_BOOL(CL_SYMBOLP(ARG(1)) && GET_SYMBOL(ARG(1)) == SYMBOL(Slisp, 18), ARG(2)); /* CHARACTER */ if(CL_TRUEP(ARG(2))) { goto THEN2; } else { } /* STANDARD-CHAR */ if(CL_SYMBOLP(ARG(1)) && GET_SYMBOL(ARG(1)) == SYMBOL(Slisp, 43)) { THEN2:; LOAD_BOOL(CL_CHARP(ARG(0)), ARG(0)); } else { if(CL_SYMBOLP(ARG(1)) && GET_SYMBOL(ARG(1)) == SYMBOL(Slisp, 28)) /* LIST */ { LOAD_BOOL(CL_LISTP(ARG(0)), ARG(0)); } else { if(CL_SYMBOLP(ARG(1)) && GET_SYMBOL(ARG(1)) == SYMBOL(Slisp, 31)) /* NULL */ { if(CL_TRUEP(ARG(0))) { LOAD_NIL(ARG(0)); } else { LOAD_SYMBOL(SYMBOL(Slisp, 48), ARG(0)); /* T */ } } else { if(CL_SYMBOLP(ARG(1)) && GET_SYMBOL(ARG(1)) == SYMBOL(Slisp, 21)) /* CONS */ { LOAD_BOOL(CL_CONSP(ARG(0)), ARG(0)); } else { LOAD_SMSTR((CL_FORM *)&KClisp[86], ARG(2)); /* (TYPEP ~S ~S) is not implemented */ COPY(ARG(0), ARG(3)); COPY(ARG(1), ARG(4)); Ferror(ARG(2), 3); } } } } } } } else { LOAD_NIL(ARG(0)); } } }
void copy_symbol1(CL_FORM *base) { if(CL_SYMBOLP(ARG(0))) { LOAD_SMSTR(SYM_NAME(ARG(0)), ARG(2)); } else { if(CL_TRUEP(ARG(0))) { COPY(SYMVAL(Slisp, 676), ARG(2)); /* SYM_EXPECTED */ COPY(ARG(0), ARG(3)); Ferror(ARG(2), 2); } else { LOAD_SMSTR((CL_FORM *)&KClisp[266], ARG(2)); /* NIL */ } } Fmake_symbol(ARG(2)); if(CL_TRUEP(ARG(1))) { COPY(ARG(0), ARG(3)); Fboundp(ARG(3)); if(CL_TRUEP(ARG(3))) { COPY(ARG(2), ARG(3)); if(CL_SYMBOLP(ARG(0))) { COPY(SYM_VALUE(ARG(0)), ARG(4)); } else { if(CL_TRUEP(ARG(0))) { COPY(SYMVAL(Slisp, 676), ARG(4)); /* SYM_EXPECTED */ COPY(ARG(0), ARG(5)); Ferror(ARG(4), 2); } else { LOAD_NIL(ARG(4)); } } Fset(ARG(3)); } if(CL_SYMBOLP(ARG(0))) { COPY(SYM_PLIST(ARG(0)), ARG(3)); } else { if(CL_TRUEP(ARG(0))) { COPY(SYMVAL(Slisp, 676), ARG(3)); /* SYM_EXPECTED */ COPY(ARG(0), ARG(4)); Ferror(ARG(3), 2); } else { COPY(SYMVAL(Slisp, 678), ARG(3)); /* *NIL-PLIST* */ } } Fcopy_list(ARG(3)); COPY(ARG(3), ARG(4)); COPY(ARG(2), ARG(5)); Fset_symbol_plist(ARG(4)); } COPY(ARG(2), ARG(0)); }
void pathname_name1(CL_FORM *base) { COPY(ARG(0), ARG(2)); LOAD_SYMBOL(SYMBOL(Slisp, 234), ARG(3)); /* PATHNAME */ rt_struct_typep(ARG(2)); if(CL_TRUEP(ARG(2))) { COPY(ARG(0), ARG(2)); } else { COPY(ARG(0), ARG(2)); Fstringp(ARG(2)); if(CL_TRUEP(ARG(2))) { COPY(ARG(0), ARG(2)); LOAD_NIL(ARG(3)); COPY(SYMVAL(Slisp, 233), ARG(4)); /* *DEFAULT-PATHNAME-DEFAULTS* */ LOAD_FIXNUM(ARG(5), 0, ARG(5)); LOAD_NIL(ARG(6)); LOAD_NIL(ARG(7)); parse_namestring1(ARG(2)); mv_count = 1; } else { COPY(ARG(0), ARG(2)); LOAD_SYMBOL(SYMBOL(Slisp, 64), ARG(3)); /* STREAM */ rt_struct_typep(ARG(2)); if(CL_TRUEP(ARG(2))) { COPY(ARG(0), ARG(2)); LOAD_NIL(ARG(3)); file_name1(ARG(2)); COPY(SYMVAL(Slisp, 233), ARG(3)); /* *DEFAULT-PATHNAME-DEFAULTS* */ COPY(ARG(2), ARG(4)); LOAD_NIL(ARG(5)); COPY(ARG(3), ARG(6)); LOAD_FIXNUM(ARG(7), 0, ARG(7)); LOAD_NIL(ARG(8)); LOAD_NIL(ARG(9)); parse_namestring1(ARG(4)); mv_count = 1; COPY(ARG(4), ARG(2)); } else { LOAD_SMSTR((CL_FORM *)&Kpathname_name1[0], ARG(2)); /* etypecase: the value ~a is not a legal value */ COPY(ARG(0), ARG(3)); Ferror(ARG(2), 2); } } } COPY(ARG(2), ARG(3)); LOAD_SYMBOL(SYMBOL(Slisp, 234), ARG(4)); /* PATHNAME */ rt_struct_typep(ARG(3)); if(CL_TRUEP(ARG(3))) { COPY(OFFSET(AR_BASE(GET_FORM(ARG(2))), 3 + 1), ARG(3)); } else { COPY(SYMVAL(Slisp, 352), ARG(3)); /* NO_STRUCT */ COPY(ARG(2), ARG(4)); LOAD_SYMBOL(SYMBOL(Slisp, 234), ARG(5)); /* PATHNAME */ Ferror(ARG(3), 3); } if(CL_SYMBOLP(ARG(1)) && GET_SYMBOL(ARG(1)) == SYMBOL(Slisp, 278)) /* COMMON */ { COPY(ARG(2), ARG(4)); LOAD_SYMBOL(SYMBOL(Slisp, 234), ARG(5)); /* PATHNAME */ rt_struct_typep(ARG(4)); if(CL_TRUEP(ARG(4))) { COPY(OFFSET(AR_BASE(GET_FORM(ARG(2))), 0 + 1), ARG(4)); } else { COPY(SYMVAL(Slisp, 352), ARG(4)); /* NO_STRUCT */ COPY(ARG(2), ARG(5)); LOAD_SYMBOL(SYMBOL(Slisp, 234), ARG(6)); /* PATHNAME */ Ferror(ARG(4), 3); } COPY(ARG(4), ARG(5)); LOAD_SYMBOL(SYMBOL(Slisp, 263), ARG(6)); /* HOST */ rt_struct_typep(ARG(5)); if(CL_TRUEP(ARG(5))) { COPY(OFFSET(AR_BASE(GET_FORM(ARG(4))), 6 + 1), ARG(4)); } else { COPY(SYMVAL(Slisp, 352), ARG(5)); /* NO_STRUCT */ COPY(ARG(4), ARG(6)); LOAD_SYMBOL(SYMBOL(Slisp, 263), ARG(7)); /* HOST */ Ferror(ARG(5), 3); } LOAD_BOOL(CL_SYMBOLP(ARG(4)) && GET_SYMBOL(ARG(4)) == SYMBOL(Slisp, 279), ARG(4)); /* LOWER */ } else { LOAD_NIL(ARG(4)); } maybe_diddle_case(ARG(3)); COPY(ARG(3), ARG(0)); }
void export1(CL_FORM *base) { coerce_to_package(ARG(1)); if(CL_LISTP(ARG(0))) { } else { COPY(ARG(0), ARG(2)); Flist(ARG(2), 1); COPY(ARG(2), ARG(0)); } LOAD_NIL(ARG(2)); COPY(ARG(0), ARG(3)); M1_1:; if(CL_ATOMP(ARG(3))) { LOAD_NIL(ARG(2)); goto RETURN1; } COPY(ARG(3), ARG(4)); COPY(GET_CAR(ARG(4)), ARG(2)); if(CL_SYMBOLP(ARG(2))) { LOAD_SMSTR(SYM_NAME(ARG(2)), ARG(4)); } else { if(CL_TRUEP(ARG(2))) { COPY(SYMVAL(Slisp, 676), ARG(4)); /* SYM_EXPECTED */ COPY(ARG(2), ARG(5)); Ferror(ARG(4), 2); } else { LOAD_SMSTR((CL_FORM *)&KClisp[266], ARG(4)); /* NIL */ } } COPY(ARG(1), ARG(5)); find_symbol1(ARG(4)); COPY(&mv_buf[0], ARG(5)); { int nargs; nargs = 2; mv_count = 1; { switch(nargs) { case 0: LOAD_NIL(ARG(4)); case 1: LOAD_NIL(ARG(5)); nargs = 2; } if(CL_TRUEP(ARG(5))) { LOAD_NIL(ARG(6)); } else { LOAD_SYMBOL(SYMBOL(Slisp, 48), ARG(6)); /* T */ } if(CL_TRUEP(ARG(6))) { goto THEN1; } else { if(EQ(ARG(4), ARG(2))) { goto ELSE2; } else { goto THEN1; } } { THEN1:; LOAD_SMSTR((CL_FORM *)&Kexport1[0], ARG(6)); /* ~S is not accessible in ~S */ COPY(ARG(2), ARG(7)); COPY(ARG(1), ARG(8)); Ferror(ARG(6), 3); } ELSE2:; if(CL_SYMBOLP(ARG(5)) && GET_SYMBOL(ARG(5)) == SYMBOL(Slisp, 385)) /* EXTERNAL */ { goto RETURN1; } LOAD_NIL(ARG(6)); COPY(ARG(1), ARG(7)); LOAD_SYMBOL(SYMBOL(Slisp, 354), ARG(8)); /* PACKAGE */ rt_struct_typep(ARG(7)); if(CL_TRUEP(ARG(7))) { COPY(OFFSET(AR_BASE(GET_FORM(ARG(1))), 6 + 1), ARG(7)); } else { COPY(SYMVAL(Slisp, 352), ARG(7)); /* NO_STRUCT */ COPY(ARG(1), ARG(8)); LOAD_SYMBOL(SYMBOL(Slisp, 354), ARG(9)); /* PACKAGE */ Ferror(ARG(7), 3); } M2_1:; if(CL_ATOMP(ARG(7))) { LOAD_NIL(ARG(6)); goto RETURN2; } COPY(ARG(7), ARG(8)); COPY(GET_CAR(ARG(8)), ARG(6)); if(CL_SYMBOLP(ARG(2))) { LOAD_SMSTR(SYM_NAME(ARG(2)), ARG(8)); } else { if(CL_TRUEP(ARG(2))) { COPY(SYMVAL(Slisp, 676), ARG(8)); /* SYM_EXPECTED */ COPY(ARG(2), ARG(9)); Ferror(ARG(8), 2); } else { LOAD_SMSTR((CL_FORM *)&KClisp[266], ARG(8)); /* NIL */ } } COPY(ARG(6), ARG(9)); find_symbol1(ARG(8)); COPY(&mv_buf[0], ARG(9)); { int nargs; nargs = 2; mv_count = 1; { switch(nargs) { case 0: LOAD_NIL(ARG(8)); case 1: LOAD_NIL(ARG(9)); nargs = 2; } if(CL_TRUEP(ARG(9))) { if(EQ(ARG(8), ARG(2))) { goto ELSE3; } else { COPY(ARG(6), ARG(10)); LOAD_SYMBOL(SYMBOL(Slisp, 354), ARG(11)); /* PACKAGE */ rt_struct_typep(ARG(10)); if(CL_TRUEP(ARG(10))) { COPY(OFFSET(AR_BASE(GET_FORM(ARG(6))), 4 + 1), ARG(10)); } else { COPY(SYMVAL(Slisp, 352), ARG(10)); /* NO_STRUCT */ COPY(ARG(6), ARG(11)); LOAD_SYMBOL(SYMBOL(Slisp, 354), ARG(12)); /* PACKAGE */ Ferror(ARG(10), 3); } COPY(ARG(8), ARG(11)); COPY(ARG(10), ARG(12)); LOAD_NIL(ARG(13)); LOAD_NIL(ARG(14)); LOAD_NIL(ARG(15)); member1(ARG(11)); COPY(ARG(11), ARG(10)); if(CL_TRUEP(ARG(10))) { goto ELSE3; } else { goto THEN4; } } } else { goto ELSE3; } { THEN4:; LOAD_SMSTR((CL_FORM *)&Kexport1[2], ARG(10)); /* ~S will cause a name conflict in ~S */ COPY(ARG(2), ARG(11)); COPY(ARG(6), ARG(12)); Ferror(ARG(10), 3); } ELSE3:; } } COPY(ARG(7), ARG(8)); COPY(GET_CDR(ARG(8)), ARG(7)); goto M2_1; RETURN2:; if(CL_SYMBOLP(ARG(2))) { LOAD_SMSTR(SYM_NAME(ARG(2)), ARG(6)); } else { if(CL_TRUEP(ARG(2))) { COPY(SYMVAL(Slisp, 676), ARG(6)); /* SYM_EXPECTED */ COPY(ARG(2), ARG(7)); Ferror(ARG(6), 2); } else { LOAD_SMSTR((CL_FORM *)&KClisp[266], ARG(6)); /* NIL */ } } LOAD_FIXNUM(ARG(7), 101, ARG(7)); COPY(ARG(6), ARG(8)); string_to_simple_string(ARG(8)); rt_sxhash_string(ARG(8)); COPY(ARG(8), ARG(9)); LOAD_FIXNUM(ARG(10), 101, ARG(10)); rt_floor(ARG(9)); COPY(&mv_buf[0], ARG(10)); mv_count = 1; { COPY(ARG(10), ARG(6)); } if(CL_SYMBOLP(ARG(5)) && GET_SYMBOL(ARG(5)) == SYMBOL(Slisp, 384)) /* INTERNAL */ { COPY(ARG(2), ARG(7)); COPY(ARG(1), ARG(8)); LOAD_SYMBOL(SYMBOL(Slisp, 354), ARG(9)); /* PACKAGE */ rt_struct_typep(ARG(8)); if(CL_TRUEP(ARG(8))) { COPY(OFFSET(AR_BASE(GET_FORM(ARG(1))), 2 + 1), ARG(8)); } else { COPY(SYMVAL(Slisp, 352), ARG(8)); /* NO_STRUCT */ COPY(ARG(1), ARG(9)); LOAD_SYMBOL(SYMBOL(Slisp, 354), ARG(10)); /* PACKAGE */ Ferror(ARG(8), 3); } COPY(ARG(6), ARG(9)); del_pack_sym(ARG(7)); } COPY(ARG(1), ARG(7)); LOAD_SYMBOL(SYMBOL(Slisp, 354), ARG(8)); /* PACKAGE */ rt_struct_typep(ARG(7)); if(CL_TRUEP(ARG(7))) { COPY(OFFSET(AR_BASE(GET_FORM(ARG(1))), 3 + 1), ARG(7)); } else { COPY(SYMVAL(Slisp, 352), ARG(7)); /* NO_STRUCT */ COPY(ARG(1), ARG(8)); LOAD_SYMBOL(SYMBOL(Slisp, 354), ARG(9)); /* PACKAGE */ Ferror(ARG(7), 3); } COPY(ARG(7), ARG(9)); COPY(ARG(6), ARG(10)); Fsvref(ARG(9)); ALLOC_CONS(ARG(10), ARG(2), ARG(9), ARG(8)); COPY(ARG(8), ARG(9)); COPY(ARG(7), ARG(10)); COPY(ARG(6), ARG(11)); Fset_svref(ARG(9)); } } COPY(ARG(3), ARG(4)); COPY(GET_CDR(ARG(4)), ARG(3)); goto M1_1; RETURN1:; LOAD_SYMBOL(SYMBOL(Slisp, 48), ARG(0)); /* T */ }
void shadowing_import1(CL_FORM *base) { coerce_to_package(ARG(1)); if(CL_LISTP(ARG(0))) { } else { COPY(ARG(0), ARG(2)); Flist(ARG(2), 1); COPY(ARG(2), ARG(0)); } LOAD_NIL(ARG(2)); COPY(ARG(0), ARG(3)); M1_1:; if(CL_ATOMP(ARG(3))) { LOAD_NIL(ARG(2)); goto RETURN1; } COPY(ARG(3), ARG(4)); COPY(GET_CAR(ARG(4)), ARG(2)); if(CL_SYMBOLP(ARG(2))) { LOAD_SMSTR(SYM_NAME(ARG(2)), ARG(4)); } else { if(CL_TRUEP(ARG(2))) { COPY(SYMVAL(Slisp, 676), ARG(4)); /* SYM_EXPECTED */ COPY(ARG(2), ARG(5)); Ferror(ARG(4), 2); } else { LOAD_SMSTR((CL_FORM *)&KClisp[266], ARG(4)); /* NIL */ } } COPY(ARG(1), ARG(5)); find_symbol1(ARG(4)); COPY(&mv_buf[0], ARG(5)); { int nargs; nargs = 2; mv_count = 1; { switch(nargs) { case 0: LOAD_NIL(ARG(4)); case 1: LOAD_NIL(ARG(5)); nargs = 2; } if(CL_SYMBOLP(ARG(2))) { LOAD_SMSTR(SYM_NAME(ARG(2)), ARG(6)); } else { if(CL_TRUEP(ARG(2))) { COPY(SYMVAL(Slisp, 676), ARG(6)); /* SYM_EXPECTED */ COPY(ARG(2), ARG(7)); Ferror(ARG(6), 2); } else { LOAD_SMSTR((CL_FORM *)&KClisp[266], ARG(6)); /* NIL */ } } LOAD_FIXNUM(ARG(7), 101, ARG(7)); COPY(ARG(6), ARG(8)); string_to_simple_string(ARG(8)); rt_sxhash_string(ARG(8)); COPY(ARG(8), ARG(9)); LOAD_FIXNUM(ARG(10), 101, ARG(10)); rt_floor(ARG(9)); COPY(&mv_buf[0], ARG(10)); mv_count = 1; { COPY(ARG(10), ARG(6)); } if(CL_SYMBOLP(ARG(5)) && GET_SYMBOL(ARG(5)) == SYMBOL(Slisp, 384)) /* INTERNAL */ { COPY(ARG(4), ARG(7)); COPY(ARG(1), ARG(8)); LOAD_SYMBOL(SYMBOL(Slisp, 354), ARG(9)); /* PACKAGE */ rt_struct_typep(ARG(8)); if(CL_TRUEP(ARG(8))) { COPY(OFFSET(AR_BASE(GET_FORM(ARG(1))), 2 + 1), ARG(8)); } else { COPY(SYMVAL(Slisp, 352), ARG(8)); /* NO_STRUCT */ COPY(ARG(1), ARG(9)); LOAD_SYMBOL(SYMBOL(Slisp, 354), ARG(10)); /* PACKAGE */ Ferror(ARG(8), 3); } COPY(ARG(6), ARG(9)); del_pack_sym(ARG(7)); } else { if(CL_SYMBOLP(ARG(5)) && GET_SYMBOL(ARG(5)) == SYMBOL(Slisp, 385)) /* EXTERNAL */ { COPY(ARG(4), ARG(7)); COPY(ARG(1), ARG(8)); LOAD_SYMBOL(SYMBOL(Slisp, 354), ARG(9)); /* PACKAGE */ rt_struct_typep(ARG(8)); if(CL_TRUEP(ARG(8))) { COPY(OFFSET(AR_BASE(GET_FORM(ARG(1))), 3 + 1), ARG(8)); } else { COPY(SYMVAL(Slisp, 352), ARG(8)); /* NO_STRUCT */ COPY(ARG(1), ARG(9)); LOAD_SYMBOL(SYMBOL(Slisp, 354), ARG(10)); /* PACKAGE */ Ferror(ARG(8), 3); } COPY(ARG(6), ARG(9)); del_pack_sym(ARG(7)); } } } } COPY(ARG(2), ARG(4)); COPY(ARG(1), ARG(5)); internal_import(ARG(4)); COPY(ARG(1), ARG(5)); LOAD_SYMBOL(SYMBOL(Slisp, 354), ARG(6)); /* PACKAGE */ rt_struct_typep(ARG(5)); if(CL_TRUEP(ARG(5))) { COPY(OFFSET(AR_BASE(GET_FORM(ARG(1))), 4 + 1), ARG(5)); } else { COPY(SYMVAL(Slisp, 352), ARG(5)); /* NO_STRUCT */ COPY(ARG(1), ARG(6)); LOAD_SYMBOL(SYMBOL(Slisp, 354), ARG(7)); /* PACKAGE */ Ferror(ARG(5), 3); } ALLOC_CONS(ARG(6), ARG(2), ARG(5), ARG(4)); LOAD_FIXNUM(ARG(5), 4, ARG(5)); COPY(ARG(1), ARG(6)); LOAD_SYMBOL(SYMBOL(Slisp, 354), ARG(7)); /* PACKAGE */ rt_struct_typep(ARG(6)); if(CL_TRUEP(ARG(6))) { COPY(ARG(4), OFFSET(AR_BASE(GET_FORM(ARG(1))), 4 + 1)); } else { COPY(SYMVAL(Slisp, 352), ARG(6)); /* NO_STRUCT */ COPY(ARG(1), ARG(7)); LOAD_SYMBOL(SYMBOL(Slisp, 354), ARG(8)); /* PACKAGE */ Ferror(ARG(6), 3); } COPY(ARG(3), ARG(4)); COPY(GET_CDR(ARG(4)), ARG(3)); goto M1_1; RETURN1:; LOAD_SYMBOL(SYMBOL(Slisp, 48), ARG(0)); /* T */ }
void pathname_host1(CL_FORM *base) { COPY(ARG(0), ARG(2)); LOAD_SYMBOL(SYMBOL(Slisp, 232), ARG(3)); /* PATHNAME */ rt_struct_typep(ARG(2)); if(CL_TRUEP(ARG(2))) { COPY(ARG(0), ARG(2)); } else { COPY(ARG(0), ARG(2)); Fstringp(ARG(2)); if(CL_TRUEP(ARG(2))) { COPY(ARG(0), ARG(2)); LOAD_NIL(ARG(3)); COPY(SYMVAL(Slisp, 231), ARG(4)); /* *DEFAULT-PATHNAME-DEFAULTS* */ LOAD_SMALLFIXNUM(0, ARG(5)); LOAD_NIL(ARG(6)); LOAD_NIL(ARG(7)); parse_namestring1(ARG(2)); mv_count = 1; } else { COPY(ARG(0), ARG(2)); LOAD_SYMBOL(SYMBOL(Slisp, 64), ARG(3)); /* STREAM */ rt_struct_typep(ARG(2)); if(CL_TRUEP(ARG(2))) { COPY(ARG(0), ARG(2)); LOAD_NIL(ARG(3)); file_name1(ARG(2)); COPY(SYMVAL(Slisp, 231), ARG(3)); /* *DEFAULT-PATHNAME-DEFAULTS* */ LOAD_SMALLFIXNUM(0, ARG(4)); COPY(ARG(2), ARG(5)); LOAD_NIL(ARG(6)); COPY(ARG(3), ARG(7)); COPY(ARG(4), ARG(8)); LOAD_NIL(ARG(9)); LOAD_NIL(ARG(10)); parse_namestring1(ARG(5)); mv_count = 1; COPY(ARG(5), ARG(2)); } else { LOAD_SMSTR((CL_FORM *)&Kpathname_host1[0], ARG(2)); /* etypecase: the value ~a is not a legal value */ COPY(ARG(0), ARG(3)); Ferror(ARG(2), 2); } } } COPY(ARG(2), ARG(3)); LOAD_SYMBOL(SYMBOL(Slisp, 232), ARG(4)); /* PATHNAME */ rt_struct_typep(ARG(3)); if(CL_TRUEP(ARG(3))) { COPY(OFFSET(AR_BASE(GET_FORM(ARG(2))), 0 + 1), ARG(0)); } else { COPY(SYMVAL(Slisp, 342), ARG(0)); /* NO_STRUCT */ COPY(ARG(2), ARG(1)); LOAD_SYMBOL(SYMBOL(Slisp, 232), ARG(2)); /* PATHNAME */ Ferror(ARG(0), 3); } }
void vector_push_extend1(CL_FORM *base) { COPY(ARG(1), ARG(3)); Farray_has_fill_pointer_p(ARG(3)); if(CL_TRUEP(ARG(3))) { } else { COPY(SYMVAL(Slisp, 154), ARG(3)); /* NO_FILL_PTR */ COPY(ARG(1), ARG(4)); Ferror(ARG(3), 2); } COPY(ARG(1), ARG(3)); LOAD_SYMBOL(SYMBOL(Slisp, 150), ARG(4)); /* COMPLEX-VECTOR */ rt_struct_typep(ARG(3)); if(CL_TRUEP(ARG(3))) { COPY(OFFSET(AR_BASE(GET_FORM(ARG(1))), 3 + 1), ARG(3)); } else { COPY(SYMVAL(Slisp, 352), ARG(3)); /* NO_STRUCT */ COPY(ARG(1), ARG(4)); LOAD_SYMBOL(SYMBOL(Slisp, 150), ARG(5)); /* COMPLEX-VECTOR */ Ferror(ARG(3), 3); } COPY(ARG(3), ARG(4)); COPY(ARG(1), ARG(5)); Farray_total_size(ARG(5)); Fge(ARG(4), 2); if(CL_TRUEP(ARG(4))) { COPY(ARG(1), ARG(4)); if(CL_TRUEP(ARG(2))) { COPY(ARG(1), ARG(5)); Farray_total_size(ARG(5)); COPY(ARG(2), ARG(6)); Fplus(ARG(5), 2); } else { LOAD_FIXNUM(ARG(5), 2, ARG(5)); COPY(ARG(1), ARG(6)); Farray_total_size(ARG(6)); Fmult(ARG(5), 2); } LOAD_NIL(ARG(6)); LOAD_NIL(ARG(7)); LOAD_NIL(ARG(8)); COPY(ARG(3), ARG(9)); LOAD_NIL(ARG(10)); LOAD_NIL(ARG(11)); LOAD_SYMBOL(SYMBOL(Slisp, 101), ARG(12)); /* FILL-POINTER */ COPY(ARG(3), ARG(13)); Flist(ARG(12), 2); LOAD_NIL(ARG(13)); LOAD_SYMBOL(SYMBOL(Slisp, 48), ARG(14)); /* T */ adjust_array1(ARG(4)); } COPY(ARG(0), ARG(4)); COPY(ARG(1), ARG(5)); COPY(ARG(3), ARG(6)); rt_set_vref(ARG(4)); COPY(ARG(3), ARG(4)); F1plus(ARG(4)); COPY(ARG(1), ARG(5)); Fset_fill_pointer(ARG(4)); COPY(ARG(3), ARG(0)); }
void Fpathname_host(CL_FORM *base, int nargs) { BOOL supl_flags[1]; static CL_FORM * keylist[] = { SYMBOL(Slisp, 208), /* CASE */ }; keysort(STACK(base, 1), nargs - 1, 1, keylist, supl_flags, FALSE); if(NOT(supl_flags[0])) { LOAD_SYMBOL(SYMBOL(Slisp, 207), STACK(base, 1)); /* LOCAL */ } COPY(STACK(base, 0), STACK(base, 2)); COPY(STACK(base, 0), STACK(base, 3)); LOAD_SYMBOL(SYMBOL(Slisp, 164), STACK(base, 4)); /* PATHNAME */ struct_typep(STACK(base, 3)); if(CL_TRUEP(STACK(base, 3))) { COPY(STACK(base, 0), STACK(base, 2)); } else { if(CL_ARRAY_P(STACK(base, 0))) { COPY(STACK(base, 0), STACK(base, 3)); LOAD_SYMBOL(SYMBOL(Slisp, 43), STACK(base, 4)); /* STANDARD-CHAR */ LOAD_SYMBOL(SYMBOL(Slisp, 48), STACK(base, 5)); /* * */ check_array_internal(STACK(base, 3)); bool_result = CL_TRUEP(STACK(base, 3)); } else { bool_result = FALSE; } if(bool_result) { COPY(STACK(base, 0), STACK(base, 2)); Fparse_namestring(STACK(base, 2), 1); mv_count = 1; } else { COPY(STACK(base, 0), STACK(base, 3)); LOAD_SYMBOL(SYMBOL(Slisp, 63), STACK(base, 4)); /* STREAM */ struct_typep(STACK(base, 3)); if(CL_TRUEP(STACK(base, 3))) { COPY(STACK(base, 0), STACK(base, 2)); file_name(STACK(base, 2), 1); Fparse_namestring(STACK(base, 2), 1); mv_count = 1; } else { LOAD_SMSTR((CL_FORM *)&KFpathname_host[0], STACK(base, 2)); /* etypecase: the value ~a is not a legal value */ COPY(STACK(base, 0), STACK(base, 3)); Ferror(STACK(base, 2), 2); } } } COPY(STACK(base, 2), STACK(base, 0)); LOAD_FIXNUM(0, STACK(base, 1)); LOAD_SYMBOL(SYMBOL(Slisp, 164), STACK(base, 2)); /* PATHNAME */ struct_ref(STACK(base, 0)); }
void string_greaterp1(CL_FORM *base) { COPY(ARG(0), ARG(6)); Fstring(ARG(6)); COPY(ARG(6), ARG(0)); COPY(ARG(1), ARG(6)); Fstring(ARG(6)); COPY(ARG(6), ARG(1)); if(CL_TRUEP(ARG(3))) { } else { COPY(ARG(0), ARG(6)); Flength(ARG(6)); COPY(ARG(6), ARG(3)); } if(CL_TRUEP(ARG(5))) { } else { COPY(ARG(1), ARG(5)); Flength(ARG(5)); } COPY(ARG(2), ARG(6)); COPY(ARG(4), ARG(7)); LOAD_NIL(ARG(8)); LOAD_NIL(ARG(9)); M1_1:; COPY(ARG(6), ARG(10)); COPY(ARG(3), ARG(11)); Fnumeql(ARG(10), 2); if(CL_TRUEP(ARG(10))) { LOAD_NIL(ARG(0)); goto RETURN2; } COPY(ARG(7), ARG(10)); COPY(ARG(5), ARG(11)); Fnumeql(ARG(10), 2); if(CL_TRUEP(ARG(10))) { COPY(ARG(6), ARG(0)); goto RETURN2; } COPY(ARG(0), ARG(10)); COPY(ARG(6), ARG(11)); COPY(ARG(10), ARG(12)); COPY(ARG(11), ARG(13)); Frow_major_aref(ARG(12)); COPY(ARG(12), ARG(8)); COPY(ARG(1), ARG(10)); COPY(ARG(7), ARG(11)); COPY(ARG(10), ARG(9)); COPY(ARG(11), ARG(10)); Frow_major_aref(ARG(9)); if(CL_CHARP(ARG(8))) { COPY(ARG(8), ARG(10)); } else { COPY(SYMVAL(Slisp, 58), ARG(10)); /* WRONG_TYPE */ COPY(ARG(8), ARG(11)); LOAD_SYMBOL(SYMBOL(Slisp, 18), ARG(12)); /* CHARACTER */ Ferror(ARG(10), 3); } rt_char_upcase(ARG(10)); rt_char_code(ARG(10)); if(CL_CHARP(ARG(9))) { COPY(ARG(9), ARG(11)); } else { COPY(SYMVAL(Slisp, 58), ARG(11)); /* WRONG_TYPE */ COPY(ARG(9), ARG(12)); LOAD_SYMBOL(SYMBOL(Slisp, 18), ARG(13)); /* CHARACTER */ Ferror(ARG(11), 3); } rt_char_upcase(ARG(11)); rt_char_code(ARG(11)); Fgt(ARG(10), 2); if(CL_TRUEP(ARG(10))) { COPY(ARG(6), ARG(0)); goto RETURN1; } else { if(CL_CHARP(ARG(8))) { COPY(ARG(8), ARG(10)); } else { COPY(SYMVAL(Slisp, 58), ARG(10)); /* WRONG_TYPE */ COPY(ARG(8), ARG(11)); LOAD_SYMBOL(SYMBOL(Slisp, 18), ARG(12)); /* CHARACTER */ Ferror(ARG(10), 3); } rt_char_upcase(ARG(10)); rt_char_code(ARG(10)); if(CL_CHARP(ARG(9))) { COPY(ARG(9), ARG(11)); } else { COPY(SYMVAL(Slisp, 58), ARG(11)); /* WRONG_TYPE */ COPY(ARG(9), ARG(12)); LOAD_SYMBOL(SYMBOL(Slisp, 18), ARG(13)); /* CHARACTER */ Ferror(ARG(11), 3); } rt_char_upcase(ARG(11)); rt_char_code(ARG(11)); Fnumeql(ARG(10), 2); if(CL_TRUEP(ARG(10))) { } else { LOAD_NIL(ARG(0)); goto RETURN1; } } COPY(ARG(6), ARG(10)); F1plus(ARG(10)); COPY(ARG(7), ARG(11)); F1plus(ARG(11)); COPY(ARG(11), ARG(7)); COPY(ARG(10), ARG(6)); goto M1_1; RETURN2:; RETURN1:; }
void get_macro_character1(CL_FORM *base) { COPY(ARG(1), ARG(2)); LOAD_SYMBOL(SYMBOL(Slisp, 410), ARG(3)); /* READTABLE */ rt_struct_typep(ARG(2)); if(CL_TRUEP(ARG(2))) { COPY(OFFSET(AR_BASE(GET_FORM(ARG(1))), 0 + 1), ARG(2)); } else { COPY(SYMVAL(Slisp, 342), ARG(2)); /* NO_STRUCT */ COPY(ARG(1), ARG(3)); LOAD_SYMBOL(SYMBOL(Slisp, 410), ARG(4)); /* READTABLE */ Ferror(ARG(2), 3); } if(CL_CHARP(ARG(0))) { COPY(ARG(0), ARG(3)); } else { COPY(SYMVAL(Slisp, 58), ARG(3)); /* WRONG_TYPE */ COPY(ARG(0), ARG(4)); LOAD_SYMBOL(SYMBOL(Slisp, 18), ARG(5)); /* CHARACTER */ Ferror(ARG(3), 3); } rt_char_code(ARG(3)); LOAD_BOOL(CL_SMVECP(ARG(2)), ARG(4)); if(CL_TRUEP(ARG(4))) { goto THEN1; } else { COPY(ARG(2), ARG(5)); LOAD_SYMBOL(SYMBOL(Slisp, 150), ARG(6)); /* COMPLEX-VECTOR */ rt_struct_typep(ARG(5)); } if(CL_TRUEP(ARG(5))) { THEN1:; } else { COPY(SYMVAL(Slisp, 58), ARG(4)); /* WRONG_TYPE */ COPY(ARG(2), ARG(5)); LOAD_SYMBOL(SYMBOL(Slisp, 47), ARG(6)); /* VECTOR */ Ferror(ARG(4), 3); } Frow_major_aref(ARG(2)); if(CL_TRUEP(ARG(2))) { if(CL_CONSP(ARG(2))) { COPY(GET_CAR(ARG(2)), ARG(3)); } else { LOAD_SMSTR((CL_FORM *)&KClisp[239], ARG(3)); /* ~a is not a list */ COPY(ARG(2), ARG(4)); Ferror(ARG(3), 2); } if(CL_CONSP(ARG(2))) { COPY(GET_CDR(ARG(2)), ARG(4)); } else { LOAD_SMSTR((CL_FORM *)&KClisp[241], ARG(4)); /* ~a is not a list */ COPY(ARG(2), ARG(5)); Ferror(ARG(4), 2); } COPY(ARG(3), ARG(0)); COPY(ARG(4), &mv_buf[0]); mv_count = 2; } else { LOAD_NIL(ARG(0)); } }
/* * @todo Single use by %%doc in files.c prevents static. */ rpmRC doScript(Spec spec, int what, const char *name, rpmiob iob, int test) { const char * rootURL = spec->rootURL; const char * rootDir; const char * scriptName = NULL; const char * buildDirURL = rpmGenPath(rootURL, "%{_builddir}", ""); const char * buildScript; const char * buildCmd = NULL; const char * buildTemplate = NULL; const char * buildPost = NULL; const char * mTemplate = NULL; const char * mCmd = NULL; const char * mPost = NULL; int argc = 0; const char **argv = NULL; FILE * fp = NULL; urlinfo u = NULL; rpmop op = NULL; int ix = -1; FD_t fd; FD_t xfd; int status; rpmRC rc; size_t i; switch (what) { case RPMBUILD_PREP: name = "%prep"; iob = spec->prep; op = memset(alloca(sizeof(*op)), 0, sizeof(*op)); ix = RPMSCRIPT_PREP; mTemplate = "%{__spec_prep_template}"; mPost = "%{__spec_prep_post}"; mCmd = "%{__spec_prep_cmd}"; break; case RPMBUILD_BUILD: name = "%build"; iob = spec->build; op = memset(alloca(sizeof(*op)), 0, sizeof(*op)); ix = RPMSCRIPT_BUILD; mTemplate = "%{__spec_build_template}"; mPost = "%{__spec_build_post}"; mCmd = "%{__spec_build_cmd}"; break; case RPMBUILD_INSTALL: name = "%install"; iob = spec->install; op = memset(alloca(sizeof(*op)), 0, sizeof(*op)); ix = RPMSCRIPT_INSTALL; mTemplate = "%{__spec_install_template}"; mPost = "%{__spec_install_post}"; mCmd = "%{__spec_install_cmd}"; break; case RPMBUILD_CHECK: name = "%check"; iob = spec->check; op = memset(alloca(sizeof(*op)), 0, sizeof(*op)); ix = RPMSCRIPT_CHECK; mTemplate = "%{__spec_check_template}"; mPost = "%{__spec_check_post}"; mCmd = "%{__spec_check_cmd}"; break; case RPMBUILD_CLEAN: name = "%clean"; iob = spec->clean; mTemplate = "%{__spec_clean_template}"; mPost = "%{__spec_clean_post}"; mCmd = "%{__spec_clean_cmd}"; break; case RPMBUILD_RMBUILD: name = "--clean"; mTemplate = "%{__spec_clean_template}"; mPost = "%{__spec_clean_post}"; mCmd = "%{__spec_clean_cmd}"; break; /* support "%track" script/section */ case RPMBUILD_TRACK: name = "%track"; iob = NULL; if (spec->foo) for (i = 0; i < spec->nfoo; i++) { if (spec->foo[i].str == NULL || spec->foo[i].iob == NULL) continue; if (xstrcasecmp(spec->foo[i].str, "track")) continue; iob = spec->foo[i].iob; /*@loopbreak@*/ break; } mTemplate = "%{__spec_track_template}"; mPost = "%{__spec_track_post}"; mCmd = "%{__spec_track_cmd}"; break; case RPMBUILD_STRINGBUF: default: mTemplate = "%{___build_template}"; mPost = "%{___build_post}"; mCmd = "%{___build_cmd}"; break; } assert(name != NULL); if ((what != RPMBUILD_RMBUILD) && iob == NULL) { rc = RPMRC_OK; goto exit; } if (rpmTempFile(rootURL, &scriptName, &fd) || fd == NULL || Ferror(fd)) { rpmlog(RPMLOG_ERR, _("Unable to open temp file.\n")); rc = RPMRC_FAIL; goto exit; } if (fdGetFp(fd) == NULL) xfd = Fdopen(fd, "w.fpio"); else xfd = fd; /*@-type@*/ /* FIX: cast? */ if ((fp = fdGetFp(xfd)) == NULL) { rc = RPMRC_FAIL; goto exit; } /*@=type@*/ (void) urlPath(rootURL, &rootDir); if (*rootDir == '\0') rootDir = "/"; (void) urlPath(scriptName, &buildScript); buildTemplate = rpmExpand(mTemplate, NULL); buildPost = rpmExpand(mPost, NULL); (void) fputs(buildTemplate, fp); /* support "%track" script/section */ if (what != RPMBUILD_PREP && what != RPMBUILD_RMBUILD && spec->buildSubdir && what != RPMBUILD_TRACK) fprintf(fp, "cd '%s'\n", spec->buildSubdir); if (what == RPMBUILD_RMBUILD) { if (spec->buildSubdir) fprintf(fp, "rm -rf '%s'\n", spec->buildSubdir); } else if (iob != NULL) fprintf(fp, "%s", rpmiobStr(iob)); (void) fputs(buildPost, fp); (void) Fclose(xfd); if (test) { rc = RPMRC_OK; goto exit; } if (buildDirURL && buildDirURL[0] != '/' && (urlSplit(buildDirURL, &u) != 0)) { rc = RPMRC_FAIL; goto exit; } switch (urlType(u)) { case URL_IS_HTTPS: case URL_IS_HTTP: case URL_IS_FTP: addMacro(spec->macros, "_remsh", NULL, "%{__remsh}", RMIL_SPEC); addMacro(spec->macros, "_remhost", NULL, u->host, RMIL_SPEC); if (strcmp(rootDir, "/")) addMacro(spec->macros, "_remroot", NULL, rootDir, RMIL_SPEC); break; case URL_IS_UNKNOWN: case URL_IS_DASH: case URL_IS_PATH: case URL_IS_HKP: default: break; } buildCmd = rpmExpand(mCmd, " ", buildScript, NULL); (void) poptParseArgvString(buildCmd, &argc, &argv); if (what != RPMBUILD_TRACK) /* support "%track" script/section */ rpmlog(RPMLOG_NOTICE, _("Executing(%s): %s\n"), name, buildCmd); /* Run the script with a stopwatch. */ if (op != NULL) (void) rpmswEnter(op, 0); status = rpmsqExecve(argv); if (ix >= 0 && ix < RPMSCRIPT_MAX) spec->sstates[ix] = (RPMSCRIPT_STATE_EXEC | RPMSCRIPT_STATE_REAPED) | (status & 0xffff); if (!WIFEXITED(status) || WEXITSTATUS(status)) { rpmlog(RPMLOG_ERR, _("Bad exit status from %s (%s)\n"), scriptName, name); rc = RPMRC_FAIL; } else rc = RPMRC_OK; if (op != NULL) { static unsigned int scale = 1000; (void) rpmswExit(op, 0); if (ix >= 0 && ix < RPMSCRIPT_MAX) spec->smetrics[ix] += op->usecs / scale; } exit: if (scriptName) { #if defined(RPM_VENDOR_OPENPKG) /* always-remove-tempfiles */ /* Unconditionally remove temporary files ("rpm-tmp.XXXXX") which were generated for the executed scripts. In OpenPKG we run the scripts in debug mode ("set -x") anyway, so we never need to see the whole generated script -- not even if it breaks. Instead we would just have temporary files staying around forever. */ #else if (rc == RPMRC_OK) #endif (void) Unlink(scriptName); scriptName = _free(scriptName); } switch (urlType(u)) { case URL_IS_HTTPS: case URL_IS_HTTP: case URL_IS_FTP: delMacro(spec->macros, "_remsh"); delMacro(spec->macros, "_remhost"); if (strcmp(rootDir, "/")) delMacro(spec->macros, "_remroot"); break; case URL_IS_UNKNOWN: case URL_IS_DASH: case URL_IS_PATH: case URL_IS_HKP: default: break; } argv = _free(argv); buildCmd = _free(buildCmd); buildTemplate = _free(buildTemplate); buildPost = _free(buildPost); buildDirURL = _free(buildDirURL); return rc; }
void member1(CL_FORM *base) { GEN_HEAPVAR(ARG(3), ARG(5)); if(CL_TRUEP(ARG(2))) { } else { if(CL_TRUEP(INDIRECT(ARG(3)))) { GEN_CLOSURE(array, ARG(5), 4, Z11_lambda, -1); COPY(ARG(3), &array[3]); LOAD_CLOSURE(array, ARG(5)); COPY(ARG(5), ARG(2)); } else { GEN_STATIC_GLOBAL_FUNARG(extern_closure, Feql, 2); LOAD_GLOBFUN(&extern_closure, ARG(2)); } } COPY(ARG(1), ARG(5)); M1_1:; if(CL_TRUEP(ARG(5))) { COPY(ARG(2), ARG(6)); COPY(ARG(0), ARG(7)); if(CL_TRUEP(ARG(4))) { COPY(ARG(4), ARG(8)); if(CL_CONSP(ARG(5))) { COPY(GET_CAR(ARG(5)), ARG(9)); } else { LOAD_SMSTR((CL_FORM *)&KClisp[264], ARG(9)); /* ~a is not a list */ COPY(ARG(5), ARG(10)); Ferror(ARG(9), 2); } Ffuncall(ARG(8), 2); mv_count = 1; } else { if(CL_CONSP(ARG(5))) { COPY(GET_CAR(ARG(5)), ARG(8)); } else { LOAD_SMSTR((CL_FORM *)&KClisp[264], ARG(8)); /* ~a is not a list */ COPY(ARG(5), ARG(9)); Ferror(ARG(8), 2); } } Ffuncall(ARG(6), 3); mv_count = 1; if(CL_TRUEP(ARG(6))) { COPY(ARG(5), ARG(0)); } else { COPY(ARG(5), ARG(6)); COPY(ARG(6), ARG(7)); if(CL_CONSP(ARG(7))) { COPY(GET_CDR(ARG(7)), ARG(5)); } else { if(CL_TRUEP(ARG(7))) { LOAD_SMSTR((CL_FORM *)&KClisp[262], ARG(5)); /* ~a is not a list */ COPY(ARG(7), ARG(6)); Ferror(ARG(5), 2); } else { COPY(ARG(7), ARG(5)); } } goto M1_1; } } else { LOAD_NIL(ARG(0)); } goto RETURN1; RETURN1:; }
void string_reader(CL_FORM *base) { LOAD_NIL(ARG(2)); LOAD_FIXNUM(ARG(3), 0, ARG(3)); COPY(SYMVAL(Slisp, 448), ARG(4)); /* *TOKEN* */ Fset_fill_pointer(ARG(3)); M1_1: ; COPY(ARG(0), ARG(3)); COPY(ARG(3), ARG(2)); LOAD_SYMBOL(SYMBOL(Slisp, 48), ARG(3)); /* T */ LOAD_NIL(ARG(4)); LOAD_SYMBOL(SYMBOL(Slisp, 48), ARG(5)); /* T */ read_char1(ARG(2)); COPY(SYMVAL(Slisp, 454), ARG(3)); /* *READTABLE* */ readtable_syntax(ARG(3)); if(CL_CHARP(ARG(2))) { } else { COPY(SYMVAL(Slisp, 58), ARG(4)); /* WRONG_TYPE */ COPY(ARG(2), ARG(5)); LOAD_SYMBOL(SYMBOL(Slisp, 18), ARG(6)); /* CHARACTER */ Ferror(ARG(4), 3); } COPY(ARG(2), ARG(4)); rt_char_code(ARG(4)); LOAD_BOOL(CL_SMVECP(ARG(3)), ARG(5)); if(CL_TRUEP(ARG(5))) { goto THEN1; } else { COPY(ARG(3), ARG(6)); LOAD_SYMBOL(SYMBOL(Slisp, 150), ARG(7)); /* COMPLEX-VECTOR */ rt_struct_typep(ARG(6)); } if(CL_TRUEP(ARG(6))) { THEN1: ; } else { COPY(SYMVAL(Slisp, 58), ARG(5)); /* WRONG_TYPE */ COPY(ARG(3), ARG(6)); LOAD_SYMBOL(SYMBOL(Slisp, 47), ARG(7)); /* VECTOR */ Ferror(ARG(5), 3); } Frow_major_aref(ARG(3)); if(CL_SYMBOLP(ARG(3)) && GET_SYMBOL(ARG(3)) == SYMBOL(Slisp, 463)) /* SINGLE-ESCAPE */ { COPY(ARG(0), ARG(3)); COPY(ARG(3), ARG(2)); LOAD_SYMBOL(SYMBOL(Slisp, 48), ARG(3)); /* T */ LOAD_NIL(ARG(4)); LOAD_SYMBOL(SYMBOL(Slisp, 48), ARG(5)); /* T */ read_char1(ARG(2)); COPY(ARG(2), ARG(3)); COPY(SYMVAL(Slisp, 448), ARG(4)); /* *TOKEN* */ LOAD_NIL(ARG(5)); vector_push_extend1(ARG(3)); } else { if(EQL(ARG(1), ARG(2))) { COPY(SYMVAL(Slisp, 448), ARG(0)); /* *TOKEN* */ LOAD_FIXNUM(ARG(1), 0, ARG(1)); LOAD_NIL(ARG(2)); subseq1(ARG(0)); goto RETURN1; } else { COPY(ARG(2), ARG(3)); COPY(SYMVAL(Slisp, 448), ARG(4)); /* *TOKEN* */ LOAD_NIL(ARG(5)); vector_push_extend1(ARG(3)); } } goto M1_1; RETURN1: ; }
void Fget_properties(CL_FORM *base) { M1_1:; if(CL_ATOMP(ARG(0))) { LOAD_NIL(ARG(0)); LOAD_NIL(ARG(1)); LOAD_NIL(ARG(2)); COPY(ARG(1), &mv_buf[0]); COPY(ARG(2), &mv_buf[1]); mv_count = 3; } else { COPY(GET_CAR(ARG(0)), ARG(2)); COPY(ARG(2), ARG(3)); COPY(ARG(1), ARG(4)); LOAD_NIL(ARG(5)); LOAD_NIL(ARG(6)); LOAD_NIL(ARG(7)); member1(ARG(3)); if(CL_TRUEP(ARG(3))) { COPY(GET_CAR(ARG(0)), ARG(2)); COPY(GET_CDR(ARG(0)), ARG(3)); if(CL_CONSP(ARG(3))) { COPY(GET_CAR(ARG(3)), ARG(3)); } else { if(CL_TRUEP(ARG(3))) { LOAD_SMSTR((CL_FORM *)&KClisp[264], ARG(4)); /* ~a is not a list */ COPY(ARG(3), ARG(5)); Ferror(ARG(4), 2); } else { } } COPY(ARG(0), ARG(4)); COPY(ARG(2), ARG(0)); COPY(ARG(3), &mv_buf[0]); COPY(ARG(4), &mv_buf[1]); mv_count = 3; } else { COPY(ARG(0), ARG(2)); COPY(ARG(2), ARG(3)); COPY(GET_CDR(ARG(3)), ARG(3)); if(CL_CONSP(ARG(3))) { COPY(GET_CDR(ARG(3)), ARG(0)); } else { if(CL_TRUEP(ARG(3))) { LOAD_SMSTR((CL_FORM *)&KClisp[262], ARG(4)); /* ~a is not a list */ COPY(ARG(3), ARG(5)); Ferror(ARG(4), 2); } else { COPY(ARG(3), ARG(0)); } } goto M1_1; } } goto RETURN1; RETURN1:; }
void Fchar_equal(CL_FORM *base, int nargs) { CL_FORM *rest_0; CL_FORM *local; rest_0 = ARG(1); local = ARG(nargs); { CL_FORM *rest_1; LOAD_NIL(LOCAL(0)); rest_1 = rest_0; M1_1:; if(NOT(REST_NOT_EMPTY(rest_1))) { LOAD_NIL(LOCAL(0)); LOAD_SYMBOL(SYMBOL(Slisp, 48), ARG(0)); /* T */ goto RETURN1; } { CL_FORM *rest_2; rest_2 = rest_1; REST_CAR(rest_2, LOCAL(0)); } { if(CL_CHARP(LOCAL(0))) { COPY(LOCAL(0), LOCAL(1)); } else { COPY(SYMVAL(Slisp, 58), LOCAL(1)); /* WRONG_TYPE */ COPY(LOCAL(0), LOCAL(2)); LOAD_SYMBOL(SYMBOL(Slisp, 18), LOCAL(3)); /* CHARACTER */ Ferror(LOCAL(1), 3); } rt_char_upcase(LOCAL(1)); rt_char_code(LOCAL(1)); } { if(CL_CHARP(ARG(0))) { COPY(ARG(0), LOCAL(2)); } else { COPY(SYMVAL(Slisp, 58), LOCAL(2)); /* WRONG_TYPE */ COPY(ARG(0), LOCAL(3)); LOAD_SYMBOL(SYMBOL(Slisp, 18), LOCAL(4)); /* CHARACTER */ Ferror(LOCAL(2), 3); } rt_char_upcase(LOCAL(2)); rt_char_code(LOCAL(2)); } Fnumeql(LOCAL(1), 2); if(CL_TRUEP(LOCAL(1))) { LOAD_NIL(ARG(0)); goto RETURN1; } { CL_FORM *rest_3; rest_3 = rest_1; rest_1 = REST_CDR(rest_3); } goto M1_1; } RETURN1:; }
static void Z146_get_elem(CL_FORM *base) { if(CL_CONSP(ARG(1))) { COPY(GET_CAR(ARG(1)), ARG(2)); } else { if(CL_TRUEP(ARG(1))) { LOAD_SMSTR((CL_FORM *)&KClisp[264], ARG(2)); /* ~a is not a list */ COPY(ARG(1), ARG(3)); Ferror(ARG(2), 2); } else { COPY(ARG(1), ARG(2)); } } if(CL_LISTP(ARG(2))) { if(CL_CONSP(ARG(1))) { COPY(GET_CAR(ARG(1)), ARG(2)); } else { if(CL_TRUEP(ARG(1))) { LOAD_SMSTR((CL_FORM *)&KClisp[264], ARG(2)); /* ~a is not a list */ COPY(ARG(1), ARG(3)); Ferror(ARG(2), 2); } else { COPY(ARG(1), ARG(2)); } } if(CL_CONSP(ARG(2))) { COPY(GET_CAR(ARG(2)), ARG(3)); } else { if(CL_TRUEP(ARG(2))) { LOAD_SMSTR((CL_FORM *)&KClisp[264], ARG(3)); /* ~a is not a list */ COPY(ARG(2), ARG(4)); Ferror(ARG(3), 2); } else { COPY(ARG(2), ARG(3)); } } COPY(ARG(2), ARG(4)); COPY(ARG(4), ARG(5)); if(CL_CONSP(ARG(5))) { COPY(GET_CDR(ARG(5)), ARG(2)); } else { if(CL_TRUEP(ARG(5))) { LOAD_SMSTR((CL_FORM *)&KClisp[262], ARG(6)); /* ~a is not a list */ COPY(ARG(5), ARG(7)); Ferror(ARG(6), 2); } else { COPY(ARG(5), ARG(2)); } } if(CL_CONSP(ARG(1))) { COPY(ARG(2), GET_CAR(ARG(1))); } else { LOAD_SMSTR((CL_FORM *)&KClisp[252], ARG(4)); /* ~a is not a cons */ COPY(ARG(1), ARG(5)); Ferror(ARG(4), 2); } COPY(ARG(3), ARG(0)); } else { if(CL_CONSP(ARG(1))) { COPY(GET_CAR(ARG(1)), ARG(2)); } else { if(CL_TRUEP(ARG(1))) { LOAD_SMSTR((CL_FORM *)&KClisp[264], ARG(2)); /* ~a is not a list */ COPY(ARG(1), ARG(3)); Ferror(ARG(2), 2); } else { COPY(ARG(1), ARG(2)); } } COPY(INDIRECT(GET_FORM(ARG(0)) + 3), ARG(3)); Felt(ARG(2)); COPY(ARG(2), ARG(0)); } }
/* * explode source RPM into the current directory * use filters to skip packages and files we do not need */ int explodeRPM(const char *source, filterfunc filter, dependencyfunc provides, dependencyfunc deps, void* userptr) { char buffer[BUFFERSIZE+1]; /* make space for trailing \0 */ FD_t fdi; Header h; char * rpmio_flags = NULL; rpmRC rc; FD_t gzdi; struct archive *cpio; struct archive_entry *cpio_entry; struct cpio_mydata cpio_mydata; rpmts ts; rpmVSFlags vsflags; const char *compr; if (strcmp(source, "-") == 0) fdi = fdDup(STDIN_FILENO); else fdi = Fopen(source, "r.ufdio"); if (Ferror(fdi)) { const char *srcname = (strcmp(source, "-") == 0) ? "<stdin>" : source; logMessage(ERROR, "%s: %s\n", srcname, Fstrerror(fdi)); return EXIT_FAILURE; } rpmReadConfigFiles(NULL, NULL); /* Initialize RPM transaction */ ts = rpmtsCreate(); vsflags = 0; /* Do not check digests, signatures or headers */ vsflags |= _RPMVSF_NODIGESTS; vsflags |= _RPMVSF_NOSIGNATURES; vsflags |= RPMVSF_NOHDRCHK; (void) rpmtsSetVSFlags(ts, vsflags); rc = rpmReadPackageFile(ts, fdi, "rpm2dir", &h); ts = rpmtsFree(ts); switch (rc) { case RPMRC_OK: case RPMRC_NOKEY: case RPMRC_NOTTRUSTED: break; case RPMRC_NOTFOUND: logMessage(ERROR, "%s is not an RPM package", source); return EXIT_FAILURE; break; case RPMRC_FAIL: default: logMessage(ERROR, "error reading header from %s package\n", source); return EXIT_FAILURE; break; } /* Retrieve all dependencies and run them through deps function */ while (deps) { struct rpmtd_s td; const char *depname; if (!headerGet(h, RPMTAG_REQUIRENAME, &td, HEADERGET_MINMEM)) break; /* iterator */ while ((depname = rpmtdNextString(&td))) { if (deps(depname, userptr)) { Fclose(fdi); return EXIT_BADDEPS; } } rpmtdFreeData(&td); break; } /* Retrieve all provides and run them through provides function */ while (provides) { struct rpmtd_s td; const char *depname; int found = 0; if (!headerGet(h, RPMTAG_PROVIDES, &td, HEADERGET_MINMEM)) break; /* iterator */ while ((depname = rpmtdNextString(&td))) { if (!provides(depname, userptr)) { found++; } } rpmtdFreeData(&td); if (found<=0) return EXIT_BADDEPS; break; } /* Retrieve type of payload compression. */ compr = headerGetString(h, RPMTAG_PAYLOADCOMPRESSOR); if (compr && strcmp(compr, "gzip")) { checked_asprintf(&rpmio_flags, "r.%sdio", compr); } else { checked_asprintf(&rpmio_flags, "r.gzdio"); } /* Open uncompressed cpio stream */ gzdi = Fdopen(fdi, rpmio_flags); free(rpmio_flags); if (gzdi == NULL) { logMessage(ERROR, "cannot re-open payload: %s\n", Fstrerror(gzdi)); return EXIT_FAILURE; } /* initialize cpio decompressor */ cpio = archive_read_new(); if (cpio==NULL) { Fclose(gzdi); return -1; } cpio_mydata.gzdi = gzdi; cpio_mydata.buffer = buffer; archive_read_support_compression_all(cpio); archive_read_support_format_all(cpio); rc = archive_read_open(cpio, &cpio_mydata, NULL, rpm_myread, rpm_myclose); /* check the status of archive_open */ if (rc != ARCHIVE_OK){ Fclose(gzdi); return -1; } /* read all files in cpio archive */ while ((rc = archive_read_next_header(cpio, &cpio_entry)) == ARCHIVE_OK){ const struct stat *fstat; int64_t fsize; const char* filename; int needskip = 1; /* do we need to read the data to get to the next header? */ int offset = 0; int towrite = 0; filename = archive_entry_pathname(cpio_entry); fstat = archive_entry_stat(cpio_entry); fsize = archive_entry_size(cpio_entry); /* Strip leading slashes */ while (filename[offset] == '/') offset+=1; /* Strip leading ./ */ while (filename[offset] == '.' && filename[offset+1] == '/') offset+=2; /* Other file type - we do not care except special cases */ if (!S_ISREG(fstat->st_mode)) towrite = 1; else towrite = 2; if (filter && filter(filename+offset, fstat, userptr)) { /* filter this file */ towrite = 0; } /* Create directories */ char* dirname = strdup(filename+offset); /* If the dup fails, let's hope the dirs already exist */ if (dirname){ char* dirptr = dirname; while (dirptr && *dirptr) { dirptr = strchr(dirptr, '/'); if (dirptr) { *dirptr = 0; mkdir(dirname, 0700); *dirptr = '/'; dirptr++; } } free(dirname); } /* Regular file */ if (towrite>=2) { FILE *fdout = fopen(filename+offset, "w"); if (fdout==NULL){ rc = 33; break; } rc = archive_read_data_into_fd(cpio, fileno(fdout)); if (rc!=ARCHIVE_OK) { /* XXX We didn't get the file.. well.. */ needskip = 0; } else { needskip = 0; fclose(fdout); } } /* symlink, we assume that the path contained in symlink * is shorter than BUFFERSIZE */ while (towrite && S_ISLNK(fstat->st_mode)) { char symlinkbuffer[BUFFERSIZE-1]; needskip = 0; if ((rc = archive_read_data(cpio, symlinkbuffer, fsize))!=ARCHIVE_OK) { /* XXX We didn't get the file.. well.. */ break; } if (symlink(buffer, filename+offset)) { logMessage(ERROR, "Failed to create symlink %s -> %s", filename+offset, buffer); } break; } if(needskip) archive_read_data_skip(cpio); } archive_read_finish(cpio); return rc != ARCHIVE_OK; }
static void Z122_check_for(CL_FORM *base) { COPY(ARG(1), ARG(2)); LOAD_SYMBOL(SYMBOL(Slisp, 248), ARG(3)); /* PATTERN */ rt_struct_typep(ARG(2)); if(CL_TRUEP(ARG(2))) { LOAD_NIL(ARG(2)); COPY(ARG(1), ARG(3)); pattern_pieces(ARG(3)); M1_1:; if(CL_ATOMP(ARG(3))) { LOAD_NIL(ARG(2)); COPY(ARG(2), ARG(0)); goto RETURN1; } COPY(ARG(3), ARG(4)); COPY(GET_CAR(ARG(4)), ARG(2)); if(CL_SMSTRP(ARG(2))) { COPY(ARG(0), ARG(4)); COPY(ARG(2), ARG(5)); Z122_check_for(ARG(4)); bool_result = CL_TRUEP(ARG(4)); } else { if(CL_CONSP(ARG(2))) { if(CL_CONSP(ARG(1))) { COPY(GET_CAR(ARG(1)), ARG(4)); } else { if(CL_TRUEP(ARG(1))) { LOAD_SMSTR((CL_FORM *)&KClisp[239], ARG(4)); /* ~a is not a list */ COPY(ARG(1), ARG(5)); Ferror(ARG(4), 2); } else { COPY(ARG(1), ARG(4)); } } if(CL_SYMBOLP(ARG(4)) && GET_SYMBOL(ARG(4)) == SYMBOL(Slisp, 255)) /* CHARACTER-SET */ { COPY(ARG(0), ARG(5)); if(CL_CONSP(ARG(1))) { COPY(GET_CDR(ARG(1)), ARG(6)); } else { if(CL_TRUEP(ARG(1))) { LOAD_SMSTR((CL_FORM *)&KClisp[241], ARG(6)); /* ~a is not a list */ COPY(ARG(1), ARG(7)); Ferror(ARG(6), 2); } else { COPY(ARG(1), ARG(6)); } } Z122_check_for(ARG(5)); } else { goto ELSE1; } } else { goto ELSE1; } bool_result = CL_TRUEP(ARG(5)); } if(bool_result) { LOAD_SYMBOL(SYMBOL(Slisp, 48), ARG(0)); /* T */ goto RETURN1; } ELSE1:; COPY(ARG(3), ARG(4)); COPY(GET_CDR(ARG(4)), ARG(3)); goto M1_1; RETURN1:; } else { if(CL_LISTP(ARG(1))) { LOAD_NIL(ARG(2)); COPY(ARG(1), ARG(3)); M2_1:; if(CL_ATOMP(ARG(3))) { LOAD_NIL(ARG(2)); COPY(ARG(2), ARG(0)); goto RETURN2; } COPY(ARG(3), ARG(4)); COPY(GET_CAR(ARG(4)), ARG(2)); COPY(ARG(0), ARG(4)); COPY(ARG(2), ARG(5)); Z122_check_for(ARG(4)); if(CL_TRUEP(ARG(4))) { LOAD_SYMBOL(SYMBOL(Slisp, 48), ARG(0)); /* T */ goto RETURN2; } COPY(ARG(3), ARG(4)); COPY(GET_CDR(ARG(4)), ARG(3)); goto M2_1; RETURN2:; } else { if(CL_SMSTRP(ARG(1))) { COPY(ARG(1), ARG(2)); Flength(ARG(2)); LOAD_SMALLFIXNUM(0, ARG(3)); M3_1:; COPY(ARG(3), ARG(4)); COPY(ARG(2), ARG(5)); Fge(ARG(4), 2); if(CL_TRUEP(ARG(4))) { LOAD_NIL(ARG(0)); goto RETURN3; } COPY(ARG(0), ARG(4)); COPY(ARG(1), ARG(5)); COPY(ARG(3), ARG(6)); Fschar(ARG(5)); Ffuncall(ARG(4), 2); mv_count = 1; if(CL_TRUEP(ARG(4))) { LOAD_SYMBOL(SYMBOL(Slisp, 48), ARG(0)); /* T */ goto RETURN3; } F1plus(ARG(3)); goto M3_1; RETURN3:; } else { if(CL_SYMBOLP(ARG(1)) && GET_SYMBOL(ARG(1)) == SYMBOL(Slisp, 256)) /* UNSPECIFIC */ { LOAD_NIL(ARG(0)); } else { LOAD_SMSTR((CL_FORM *)&Kmaybe_diddle_case[0], ARG(0)); /* etypecase: the value ~a is not a legal value */ Ferror(ARG(0), 2); } } } } }
/* * This is more than just a little insane: * In order to write the signature, we need to know the size and * the size and digests of the header and payload, which are located * after the signature on disk. We also need a digest of the compressed * payload for the main header, and of course the payload is after the * header on disk. So we need to create placeholders for both the * signature and main header that exactly match the final sizes, calculate * the payload digest, then generate and write the real main header to * be able to FINALLY calculate the digests we need for the signature * header. In other words, we need to write things in the exact opposite * order to how the RPM format is laid on disk. */ static rpmRC writeRPM(Package pkg, unsigned char ** pkgidp, const char *fileName, char **cookie) { FD_t fd = NULL; char * rpmio_flags = NULL; char * SHA1 = NULL; char * SHA256 = NULL; uint8_t * MD5 = NULL; char * pld = NULL; uint32_t pld_algo = PGPHASHALGO_SHA256; /* TODO: macro configuration */ rpmRC rc = RPMRC_FAIL; /* assume failure */ rpm_loff_t archiveSize = 0; off_t sigStart, hdrStart, payloadStart, payloadEnd; if (pkgidp) *pkgidp = NULL; rpmio_flags = getIOFlags(pkg); if (!rpmio_flags) goto exit; finalizeDeps(pkg); /* Create and add the cookie */ if (cookie) { rasprintf(cookie, "%s %d", buildHost(), (int) (*getBuildTime())); headerPutString(pkg->header, RPMTAG_COOKIE, *cookie); } /* Create a dummy payload digest to get the header size right */ pld = nullDigest(pld_algo, 1); headerPutUint32(pkg->header, RPMTAG_PAYLOADDIGESTALGO, &pld_algo, 1); headerPutString(pkg->header, RPMTAG_PAYLOADDIGEST, pld); pld = _free(pld); /* Check for UTF-8 encoding of string tags, add encoding tag if all good */ if (checkForEncoding(pkg->header, 1)) goto exit; /* Open the output file */ fd = Fopen(fileName, "w+.ufdio"); if (fd == NULL || Ferror(fd)) { rpmlog(RPMLOG_ERR, _("Could not open %s: %s\n"), fileName, Fstrerror(fd)); goto exit; } /* Write the lead section into the package. */ if (rpmLeadWrite(fd, pkg->header)) { rpmlog(RPMLOG_ERR, _("Unable to write package: %s\n"), Fstrerror(fd)); goto exit; } /* Save the position of signature section */ sigStart = Ftell(fd); /* Generate and write a placeholder signature header */ SHA1 = nullDigest(PGPHASHALGO_SHA1, 1); SHA256 = nullDigest(PGPHASHALGO_SHA256, 1); MD5 = nullDigest(PGPHASHALGO_MD5, 0); if (rpmGenerateSignature(SHA256, SHA1, MD5, 0, 0, fd)) goto exit; SHA1 = _free(SHA1); SHA256 = _free(SHA256); MD5 = _free(MD5); /* Write a placeholder header. */ hdrStart = Ftell(fd); if (writeHdr(fd, pkg->header)) goto exit; /* Write payload section (cpio archive) */ payloadStart = Ftell(fd); if (cpio_doio(fd, pkg, rpmio_flags, &archiveSize)) goto exit; payloadEnd = Ftell(fd); /* Re-read payload to calculate compressed digest */ fdInitDigestID(fd, pld_algo, RPMTAG_PAYLOADDIGEST, 0); if (fdConsume(fd, payloadStart, payloadEnd - payloadStart)) goto exit; fdFiniDigest(fd, RPMTAG_PAYLOADDIGEST, (void **)&pld, NULL, 1); /* Insert the payload digest in main header */ headerDel(pkg->header, RPMTAG_PAYLOADDIGEST); headerPutString(pkg->header, RPMTAG_PAYLOADDIGEST, pld); pld = _free(pld); /* Write the final header */ if (fdJump(fd, hdrStart)) goto exit; if (writeHdr(fd, pkg->header)) goto exit; /* Calculate digests: SHA on header, legacy MD5 on header + payload */ fdInitDigestID(fd, PGPHASHALGO_MD5, RPMTAG_SIGMD5, 0); fdInitDigestID(fd, PGPHASHALGO_SHA1, RPMTAG_SHA1HEADER, 0); fdInitDigestID(fd, PGPHASHALGO_SHA256, RPMTAG_SHA256HEADER, 0); if (fdConsume(fd, hdrStart, payloadStart - hdrStart)) goto exit; fdFiniDigest(fd, RPMTAG_SHA1HEADER, (void **)&SHA1, NULL, 1); fdFiniDigest(fd, RPMTAG_SHA256HEADER, (void **)&SHA256, NULL, 1); if (fdConsume(fd, 0, payloadEnd - payloadStart)) goto exit; fdFiniDigest(fd, RPMTAG_SIGMD5, (void **)&MD5, NULL, 0); if (fdJump(fd, sigStart)) goto exit; /* Generate the signature. Now with right values */ if (rpmGenerateSignature(SHA256, SHA1, MD5, payloadEnd - hdrStart, archiveSize, fd)) goto exit; rc = RPMRC_OK; exit: free(rpmio_flags); free(SHA1); free(SHA256); /* XXX Fish the pkgid out of the signature header. */ if (pkgidp != NULL) { if (MD5 != NULL) { *pkgidp = MD5; } } else { free(MD5); } Fclose(fd); if (rc == RPMRC_OK) rpmlog(RPMLOG_NOTICE, _("Wrote: %s\n"), fileName); else (void) unlink(fileName); return rc; }
void * rpmShowProgress(const void * arg, const rpmCallbackType what, const rpm_loff_t amount, const rpm_loff_t total, fnpyKey key, void * data) { Header h = (Header) arg; char * s; int flags = (int) ((long)data); void * rc = NULL; const char * filename = (const char *)key; static FD_t fd = NULL; int xx; switch (what) { case RPMCALLBACK_INST_OPEN_FILE: if (filename == NULL || filename[0] == '\0') return NULL; fd = Fopen(filename, "r.ufdio"); /* FIX: still necessary? */ if (fd == NULL || Ferror(fd)) { rpmlog(RPMLOG_ERR, _("open of %s failed: %s\n"), filename, Fstrerror(fd)); if (fd != NULL) { xx = Fclose(fd); fd = NULL; } } else fd = fdLink(fd, RPMDBG_M("persist (showProgress)")); return (void *)fd; break; case RPMCALLBACK_INST_CLOSE_FILE: /* FIX: still necessary? */ fd = fdFree(fd, RPMDBG_M("persist (showProgress)")); if (fd != NULL) { xx = Fclose(fd); fd = NULL; } break; case RPMCALLBACK_INST_START: rpmcliHashesCurrent = 0; if (h == NULL || !(flags & INSTALL_LABEL)) break; /* @todo Remove headerFormat() on a progress callback. */ if (flags & INSTALL_HASH) { s = headerFormat(h, "%{NAME}", NULL); if (isatty (STDOUT_FILENO)) fprintf(stdout, "%4d:%-23.23s", rpmcliProgressCurrent + 1, s); else fprintf(stdout, "%-28.28s", s); (void) fflush(stdout); s = _free(s); } else { s = headerFormat(h, "%{NAME}-%{VERSION}-%{RELEASE}", NULL); fprintf(stdout, "%s\n", s); (void) fflush(stdout); s = _free(s); } break; case RPMCALLBACK_TRANS_PROGRESS: case RPMCALLBACK_INST_PROGRESS: if (flags & INSTALL_PERCENT) fprintf(stdout, "%%%% %f\n", (double) (total ? ((((float) amount) / total) * 100) : 100.0)); else if (flags & INSTALL_HASH) printHash(amount, total); (void) fflush(stdout); break; case RPMCALLBACK_TRANS_START: rpmcliHashesCurrent = 0; rpmcliProgressTotal = 1; rpmcliProgressCurrent = 0; if (!(flags & INSTALL_LABEL)) break; if (flags & INSTALL_HASH) fprintf(stdout, "%-28s", _("Preparing...")); else fprintf(stdout, "%s\n", _("Preparing packages for installation...")); (void) fflush(stdout); break; case RPMCALLBACK_TRANS_STOP: if (flags & INSTALL_HASH) printHash(1, 1); /* Fixes "preparing..." progress bar */ rpmcliProgressTotal = rpmcliPackagesTotal; rpmcliProgressCurrent = 0; break; case RPMCALLBACK_UNINST_PROGRESS: break; case RPMCALLBACK_UNINST_START: break; case RPMCALLBACK_UNINST_STOP: break; case RPMCALLBACK_UNPACK_ERROR: break; case RPMCALLBACK_CPIO_ERROR: break; case RPMCALLBACK_SCRIPT_ERROR: break; case RPMCALLBACK_UNKNOWN: default: break; } return rc; }
void char_reader(CL_FORM *base) { COPY(ARG(0), ARG(3)); LOAD_SYMBOL(SYMBOL(Slisp, 48), ARG(4)); /* T */ LOAD_NIL(ARG(5)); LOAD_SYMBOL(SYMBOL(Slisp, 48), ARG(6)); /* T */ read_char1(ARG(3)); LOAD_NIL(ARG(4)); COPY(ARG(0), ARG(5)); LOAD_NIL(ARG(6)); LOAD_NIL(ARG(7)); LOAD_SYMBOL(SYMBOL(Slisp, 48), ARG(8)); /* T */ peek_char1(ARG(4)); if(CL_TRUEP(ARG(4))) { if(CL_TRUEP(SYMVAL(Slisp, 447))) /* *READTABLE-UNCHANGED* */ { if(CL_CHARP(ARG(4))) /* *READTABLE-SYNTAX* */ { COPY(ARG(4), ARG(5)); } else { COPY(SYMVAL(Slisp, 58), ARG(5)); /* WRONG_TYPE */ COPY(ARG(4), ARG(6)); LOAD_SYMBOL(SYMBOL(Slisp, 18), ARG(7)); /* CHARACTER */ Ferror(ARG(5), 3); } rt_char_code(ARG(5)); COPY(OFFSET(AR_BASE(GET_FORM(SYMVAL(Slisp, 450))), GET_FIXNUM(ARG(5))), ARG(5)); } else { COPY(SYMVAL(Slisp, 449), ARG(5)); /* *READTABLE* */ readtable_syntax(ARG(5)); if(CL_CHARP(ARG(4))) { COPY(ARG(4), ARG(6)); } else { COPY(SYMVAL(Slisp, 58), ARG(6)); /* WRONG_TYPE */ COPY(ARG(4), ARG(7)); LOAD_SYMBOL(SYMBOL(Slisp, 18), ARG(8)); /* CHARACTER */ Ferror(ARG(6), 3); } rt_char_code(ARG(6)); LOAD_BOOL(CL_SMVECP(ARG(5)), ARG(7)); if(CL_TRUEP(ARG(7))) { goto THEN1; } else { COPY(ARG(5), ARG(8)); LOAD_SYMBOL(SYMBOL(Slisp, 150), ARG(9)); /* COMPLEX-VECTOR */ rt_struct_typep(ARG(8)); } if(CL_TRUEP(ARG(8))) { THEN1:; } else { COPY(SYMVAL(Slisp, 58), ARG(7)); /* WRONG_TYPE */ COPY(ARG(5), ARG(8)); LOAD_SYMBOL(SYMBOL(Slisp, 47), ARG(9)); /* VECTOR */ Ferror(ARG(7), 3); } Frow_major_aref(ARG(5)); } } /* CONSTITUENT */ else { goto ELSE2; } if(CL_SYMBOLP(ARG(5)) && GET_SYMBOL(ARG(5)) == SYMBOL(Slisp, 460)) { LOAD_SMALLFIXNUM(0, SYMVAL(Slisp, 440)); /* *FILL-POINTER* */ LOAD_SYMBOL(SYMBOL(Slisp, 48), ARG(5)); /* T */ BIND_SPECIAL(SYMBOL(Slisp, 408), ARG(5)); /* *READ-SUPPRESS* */ COPY(ARG(0), ARG(6)); COPY(ARG(3), ARG(7)); bool_result = CL_TRUEP(SYMVAL(Slisp, 447)); /* *READTABLE-UNCHANGED* */ if(bool_result) { if(CL_CHARP(ARG(3))) /* *READTABLE-SYNTAX* */ { COPY(ARG(3), ARG(8)); } else { COPY(SYMVAL(Slisp, 58), ARG(8)); /* WRONG_TYPE */ COPY(ARG(3), ARG(9)); LOAD_SYMBOL(SYMBOL(Slisp, 18), ARG(10)); /* CHARACTER */ Ferror(ARG(8), 3); } rt_char_code(ARG(8)); COPY(OFFSET(AR_BASE(GET_FORM(SYMVAL(Slisp, 450))), GET_FIXNUM(ARG(8))), ARG(8)); } else { COPY(SYMVAL(Slisp, 449), ARG(8)); /* *READTABLE* */ readtable_syntax(ARG(8)); if(CL_CHARP(ARG(3))) { COPY(ARG(3), ARG(9)); } else { COPY(SYMVAL(Slisp, 58), ARG(9)); /* WRONG_TYPE */ COPY(ARG(3), ARG(10)); LOAD_SYMBOL(SYMBOL(Slisp, 18), ARG(11)); /* CHARACTER */ Ferror(ARG(9), 3); } rt_char_code(ARG(9)); LOAD_BOOL(CL_SMVECP(ARG(8)), ARG(10)); if(CL_TRUEP(ARG(10))) { goto THEN3; } else { COPY(ARG(8), ARG(11)); LOAD_SYMBOL(SYMBOL(Slisp, 150), ARG(12)); /* COMPLEX-VECTOR */ rt_struct_typep(ARG(11)); } if(CL_TRUEP(ARG(11))) { THEN3:; } else { COPY(SYMVAL(Slisp, 58), ARG(10)); /* WRONG_TYPE */ COPY(ARG(8), ARG(11)); LOAD_SYMBOL(SYMBOL(Slisp, 47), ARG(12)); /* VECTOR */ Ferror(ARG(10), 3); } Frow_major_aref(ARG(8)); } read_token(ARG(6)); RESTORE_SPECIAL; if(CL_TRUEP(SYMVAL(Slisp, 408))) /* *READ-SUPPRESS* */ { } else { get_token_string(ARG(5)); Fname_char(ARG(5)); COPY(ARG(5), ARG(3)); if(CL_TRUEP(ARG(3))) { } else { LOAD_SMSTR((CL_FORM *)&Kchar_reader[0], ARG(5)); /* illegal character name ~s */ get_token_string(ARG(6)); Ferror(ARG(5), 2); } } } ELSE2:; if(CL_TRUEP(SYMVAL(Slisp, 408))) /* *READ-SUPPRESS* */ { LOAD_NIL(ARG(0)); } else { if(CL_TRUEP(ARG(2))) { COPY(ARG(2), ARG(5)); Fplusp(ARG(5)); } else { goto ELSE4; } if(CL_TRUEP(ARG(5))) { LOAD_SMSTR((CL_FORM *)&Kchar_reader[2], ARG(5)); /* font ~s of ~s will be ignored */ COPY(ARG(2), ARG(6)); COPY(ARG(3), ARG(7)); Fwarn(ARG(5), 3); mv_count = 1; } ELSE4:; COPY(ARG(3), ARG(0)); } }
static int runGPG(sigTarget sigt, const char *sigfile) { int pid = 0, status; FD_t fnamedPipe = NULL; char *namedPipeName = NULL; unsigned char buf[BUFSIZ]; ssize_t count; ssize_t wantCount; rpm_loff_t size; int rc = 1; /* assume failure */ namedPipeName = mkTempFifo(); rpmPushMacro(NULL, "__plaintext_filename", NULL, namedPipeName, -1); rpmPushMacro(NULL, "__signature_filename", NULL, sigfile, -1); if (!(pid = fork())) { char *const *av; char *cmd = NULL; const char *gpg_path = rpmExpand("%{?_gpg_path}", NULL); if (gpg_path && *gpg_path != '\0') (void) setenv("GNUPGHOME", gpg_path, 1); unsetenv("MALLOC_CHECK_"); cmd = rpmExpand("%{?__gpg_sign_cmd}", NULL); rc = poptParseArgvString(cmd, NULL, (const char ***)&av); if (!rc) rc = execve(av[0], av+1, environ); rpmlog(RPMLOG_ERR, _("Could not exec %s: %s\n"), "gpg", strerror(errno)); _exit(EXIT_FAILURE); } rpmPopMacro(NULL, "__plaintext_filename"); rpmPopMacro(NULL, "__signature_filename"); fnamedPipe = Fopen(namedPipeName, "w"); if (!fnamedPipe) { rpmlog(RPMLOG_ERR, _("Fopen failed\n")); goto exit; } if (Fseek(sigt->fd, sigt->start, SEEK_SET) < 0) { rpmlog(RPMLOG_ERR, _("Could not seek in file %s: %s\n"), sigt->fileName, Fstrerror(sigt->fd)); goto exit; } size = sigt->size; wantCount = size < sizeof(buf) ? size : sizeof(buf); while ((count = Fread(buf, sizeof(buf[0]), wantCount, sigt->fd)) > 0) { Fwrite(buf, sizeof(buf[0]), count, fnamedPipe); if (Ferror(fnamedPipe)) { rpmlog(RPMLOG_ERR, _("Could not write to pipe\n")); goto exit; } size -= count; wantCount = size < sizeof(buf) ? size : sizeof(buf); } if (count < 0) { rpmlog(RPMLOG_ERR, _("Could not read from file %s: %s\n"), sigt->fileName, Fstrerror(sigt->fd)); goto exit; } Fclose(fnamedPipe); fnamedPipe = NULL; (void) waitpid(pid, &status, 0); pid = 0; if (!WIFEXITED(status) || WEXITSTATUS(status)) { rpmlog(RPMLOG_ERR, _("gpg exec failed (%d)\n"), WEXITSTATUS(status)); } else { rc = 0; } exit: if (fnamedPipe) Fclose(fnamedPipe); if (pid) waitpid(pid, &status, 0); if (namedPipeName) { rpmRmTempFifo(namedPipeName); free(namedPipeName); } return rc; }
void quick_integer_to_string(CL_FORM *base) { COPY(ARG(0), ARG(1)); Fzerop(ARG(1)); if(CL_TRUEP(ARG(1))) { LOAD_SMSTR((CL_FORM *)&Kquick_integer_to_string[0], ARG(0)); /* 0 */ } else { if(CL_FIXNUMP(ARG(0)) && GET_FIXNUM(ARG(0)) == 1) { LOAD_SMSTR((CL_FORM *)&Kquick_integer_to_string[2], ARG(0)); /* 1 */ } else { COPY(ARG(0), ARG(1)); Fminusp(ARG(1)); if(CL_TRUEP(ARG(1))) { LOAD_SYMBOL(SYMBOL(Slisp, 40), ARG(1)); /* SIMPLE-STRING */ LOAD_SMSTR((CL_FORM *)&Kquick_integer_to_string[4], ARG(2)); /* - */ COPY(ARG(0), ARG(3)); Fminus(ARG(3), 1); quick_integer_to_string(ARG(3)); if(CL_SMSTRP(ARG(3))) { } else { LOAD_SMSTR((CL_FORM *)&KClisp[244], ARG(4)); /* type error: ~S is not of type ~S */ COPY(ARG(3), ARG(5)); LOAD_SYMBOL(SYMBOL(Slisp, 40), ARG(6)); /* SIMPLE-STRING */ Ferror(ARG(4), 3); } Fconcatenate(ARG(1), 3); COPY(ARG(1), ARG(0)); } else { COPY(ARG(0), ARG(1)); Finteger_length(ARG(1)); LOAD_FIXNUM(ARG(2), 3, ARG(2)); LOAD_FIXNUM(ARG(2), 3, ARG(2)); rt_truncate(ARG(1)); mv_count = 1; F1plus(ARG(1)); COPY(ARG(1), ARG(2)); LOAD_CHAR(ARG(3), ' ', ARG(3)); make_string1(ARG(2)); COPY(ARG(1), ARG(3)); F1minus(ARG(3)); COPY(ARG(0), ARG(4)); LOAD_FIXNUM(ARG(5), 0, ARG(5)); M1_1:; COPY(ARG(4), ARG(6)); Fzerop(ARG(6)); if(CL_TRUEP(ARG(6))) { F1plus(ARG(3)); COPY(ARG(2), ARG(6)); COPY(ARG(2), ARG(7)); LOAD_FIXNUM(ARG(8), 0, ARG(8)); LOAD_NIL(ARG(9)); COPY(ARG(3), ARG(10)); COPY(ARG(1), ARG(11)); replace1(ARG(6)); COPY(ARG(2), ARG(0)); COPY(ARG(3), ARG(2)); Fminus(ARG(1), 2); shrink_simple_string(ARG(0)); goto RETURN1; } LOAD_FIXNUM(ARG(6), 10, ARG(6)); COPY(ARG(4), ARG(6)); LOAD_FIXNUM(ARG(7), 10, ARG(7)); rt_truncate(ARG(6)); COPY(&mv_buf[0], ARG(7)); { int nargs; nargs = 2; mv_count = 1; { switch(nargs) { case 0: LOAD_NIL(ARG(6)); case 1: LOAD_NIL(ARG(7)); nargs = 2; } COPY(ARG(6), ARG(4)); COPY(ARG(7), ARG(5)); } } LOAD_SMSTR((CL_FORM *)&Kquick_integer_to_string[6], ARG(6)); /* 0123456789 */ COPY(ARG(5), ARG(7)); pvref(ARG(6)); COPY(ARG(6), ARG(7)); COPY(ARG(2), ARG(8)); COPY(ARG(3), ARG(9)); Fset_schar(ARG(7)); F1minus(ARG(3)); goto M1_1; RETURN1:; } } } }
static int process_package(rpmts ts, char * filename) { FD_t fdi; FD_t gzdi; Header h; int rc = 0; char * rpmio_flags = NULL; struct archive *a; struct archive_entry *entry; if (!strcmp(filename, "-")) { fdi = fdDup(STDIN_FILENO); } else { fdi = Fopen(filename, "r.ufdio"); } if (Ferror(fdi)) { fprintf(stderr, "rpm2archive: %s: %s\n", filename, Fstrerror(fdi)); exit(EXIT_FAILURE); } rc = rpmReadPackageFile(ts, fdi, "rpm2cpio", &h); switch (rc) { case RPMRC_OK: case RPMRC_NOKEY: case RPMRC_NOTTRUSTED: break; case RPMRC_NOTFOUND: fprintf(stderr, _("argument is not an RPM package\n")); exit(EXIT_FAILURE); break; case RPMRC_FAIL: default: fprintf(stderr, _("error reading header from package\n")); exit(EXIT_FAILURE); break; } /* Retrieve payload size and compression type. */ { const char *compr = headerGetString(h, RPMTAG_PAYLOADCOMPRESSOR); rpmio_flags = rstrscat(NULL, "r.", compr ? compr : "gzip", NULL); } gzdi = Fdopen(fdi, rpmio_flags); /* XXX gzdi == fdi */ free(rpmio_flags); if (gzdi == NULL) { fprintf(stderr, _("cannot re-open payload: %s\n"), Fstrerror(gzdi)); exit(EXIT_FAILURE); } rpmfiles files = rpmfilesNew(NULL, h, 0, RPMFI_KEEPHEADER); rpmfi fi = rpmfiNewArchiveReader(gzdi, files, RPMFI_ITER_READ_ARCHIVE_CONTENT_FIRST); /* create archive */ a = archive_write_new(); archive_write_add_filter_gzip(a); archive_write_set_format_pax_restricted(a); if (!strcmp(filename, "-")) { if (isatty(STDOUT_FILENO)) { fprintf(stderr, "Error: refusing to output archive data to a terminal.\n"); exit(EXIT_FAILURE); } archive_write_open_fd(a, STDOUT_FILENO); } else { char * outname = rstrscat(NULL, filename, ".tgz", NULL); archive_write_open_filename(a, outname); _free(outname); // XXX error handling } entry = archive_entry_new(); char * buf = xmalloc(BUFSIZE); char * hardlink = NULL; rc = 0; while (rc >= 0) { rc = rpmfiNext(fi); if (rc == RPMERR_ITER_END) { break; } rpm_mode_t mode = rpmfiFMode(fi); int nlink = rpmfiFNlink(fi); fill_archive_entry(a, entry, fi); if (nlink > 1) { if (rpmfiArchiveHasContent(fi)) { _free(hardlink); hardlink = rstrscat(NULL, ".", rpmfiFN(fi), NULL); } else { archive_entry_set_hardlink(entry, hardlink); } } archive_write_header(a, entry); if (S_ISREG(mode) && (nlink == 1 || rpmfiArchiveHasContent(fi))) { write_file_content(a, buf, fi); } } /* End of iteration is not an error */ if (rc == RPMERR_ITER_END) { rc = 0; } _free(hardlink); Fclose(gzdi); /* XXX gzdi == fdi */ archive_entry_free(entry); archive_write_close(a); archive_write_free(a); buf = _free(buf); rpmfilesFree(files); rpmfiFree(fi); headerFree(h); return rc; }
void Fremhash(CL_FORM *base) { COPY(ARG(0), ARG(2)); LOAD_SMALLFIXNUM(0, ARG(3)); internal_sxhash(ARG(2)); mv_count = 1; COPY(ARG(1), ARG(3)); LOAD_SYMBOL(SYMBOL(Slisp, 389), ARG(4)); /* HASH-TABLE */ rt_struct_typep(ARG(3)); if(CL_TRUEP(ARG(3))) { COPY(OFFSET(AR_BASE(GET_FORM(ARG(1))), 0 + 1), ARG(3)); } else { COPY(SYMVAL(Slisp, 342), ARG(3)); /* NO_STRUCT */ COPY(ARG(1), ARG(4)); LOAD_SYMBOL(SYMBOL(Slisp, 389), ARG(5)); /* HASH-TABLE */ Ferror(ARG(3), 3); } COPY(ARG(2), ARG(4)); COPY(ARG(3), ARG(5)); LOAD_SMALLFIXNUM(0, ARG(6)); rt_convert_to_int(ARG(4)); COPY(&mv_buf[0], ARG(5)); mv_count = 1; { COPY(ARG(5), ARG(2)); } COPY(ARG(1), ARG(3)); hash_table_array(ARG(3)); COPY(ARG(2), ARG(4)); COPY(ARG(1), ARG(5)); hash_table_array(ARG(5)); LOAD_BOOL(CL_SMVECP(ARG(5)), ARG(6)); if(CL_TRUEP(ARG(6))) { goto THEN1; } else { COPY(ARG(5), ARG(7)); LOAD_SYMBOL(SYMBOL(Slisp, 150), ARG(8)); /* COMPLEX-VECTOR */ rt_struct_typep(ARG(7)); } if(CL_TRUEP(ARG(7))) { THEN1:; } else { COPY(SYMVAL(Slisp, 58), ARG(6)); /* WRONG_TYPE */ COPY(ARG(5), ARG(7)); LOAD_SYMBOL(SYMBOL(Slisp, 47), ARG(8)); /* VECTOR */ Ferror(ARG(6), 3); } COPY(ARG(2), ARG(6)); Frow_major_aref(ARG(5)); COPY(ARG(1), ARG(6)); LOAD_SYMBOL(SYMBOL(Slisp, 389), ARG(7)); /* HASH-TABLE */ rt_struct_typep(ARG(6)); if(CL_TRUEP(ARG(6))) { COPY(OFFSET(AR_BASE(GET_FORM(ARG(1))), 4 + 1), ARG(6)); } else { COPY(SYMVAL(Slisp, 342), ARG(6)); /* NO_STRUCT */ COPY(ARG(1), ARG(7)); LOAD_SYMBOL(SYMBOL(Slisp, 389), ARG(8)); /* HASH-TABLE */ Ferror(ARG(6), 3); } LOAD_SMALLFIXNUM(0, ARG(7)); COPY(SYMVAL(Slisp, 0), ARG(8)); /* MOST-POSITIVE-FIXNUM */ COPY(SYMVAL(Slisp, 0), ARG(9)); /* MOST-POSITIVE-FIXNUM */ COPY(ARG(0), ARG(10)); COPY(ARG(5), ARG(11)); LOAD_NIL(ARG(12)); COPY(ARG(6), ARG(13)); LOAD_NIL(ARG(14)); COPY(ARG(7), ARG(15)); COPY(ARG(8), ARG(16)); COPY(ARG(9), ARG(17)); LOAD_GLOBFUN(&CFcar, ARG(18)); delete1(ARG(10)); COPY(ARG(10), ARG(5)); COPY(ARG(5), ARG(0)); COPY(ARG(3), ARG(1)); COPY(ARG(4), ARG(2)); rt_set_vref(ARG(0)); }