diff options
Diffstat (limited to 'perl-install/c/stuff.xs.pm')
-rw-r--r-- | perl-install/c/stuff.xs.pm | 466 |
1 files changed, 42 insertions, 424 deletions
diff --git a/perl-install/c/stuff.xs.pm b/perl-install/c/stuff.xs.pm index 87ee1c98e..2b301d1b0 100644 --- a/perl-install/c/stuff.xs.pm +++ b/perl-install/c/stuff.xs.pm @@ -5,37 +5,28 @@ print ' #include <ctype.h> #include <unistd.h> -#include <syslog.h> #include <fcntl.h> #include <resolv.h> #include <sys/types.h> #include <sys/wait.h> #include <sys/ioctl.h> -#include <sys/resource.h> #include <sys/stat.h> #include <sys/utsname.h> -#include <sys/mount.h> #include <linux/keyboard.h> #include <linux/kd.h> +#include <linux/fs.h> #include <linux/hdreg.h> #include <linux/vt.h> -#include <linux/cdrom.h> -#include <linux/loop.h> #include <net/if.h> #include <net/route.h> #include <gdk/gdkx.h> #include <X11/Xlib.h> -#include <X11/extensions/xf86misc.h> -#include <term.h> #define SECTORSIZE 512 '; $ENV{C_RPM} and print ' -#undef Fflush -#undef Mkdir -#undef Stat #include <rpm/rpmlib.h> void rpmError_callback_empty(void) {} @@ -49,29 +40,11 @@ void rpmError_callback(void) { } FD_t fd2FD_t(int fd) { - static FD_t f = NULL; - if (fd == -1) return NULL; - if (f == NULL) f = fdNew(""); - fdSetFdno(f, fd); - return f; + static struct _FD f = { -1, NULL, NULL, NULL }; + f.fd_fd = fd; + return fd == -1 ? NULL : &f; } -void initIMPS2() { - unsigned char imps2_s1[] = { 243, 200, 243, 100, 243, 80, }; - unsigned char imps2_s2[] = { 246, 230, 244, 243, 100, 232, 3, }; - - int fd = open("/dev/cdrom", O_WRONLY); - if (fd < 0) return; - - write (fd, imps2_s1, sizeof (imps2_s1)); - usleep (30000); - write (fd, imps2_s2, sizeof (imps2_s2)); - usleep (30000); - tcflush (fd, TCIFLUSH); - tcdrain(fd); -} - - '; print ' @@ -91,32 +64,21 @@ Xtest(display) XSetCloseDownMode(d, RetainPermanent); XCloseDisplay(d); } - _exit(d != NULL); + { + char *args[2]; + args[0] = d ? "false" : "true"; /* inverted on purpose! */ + args[1] = NULL; + execvp(args[0], args); + } + printf("***************** SHOUDNT GET THERE ***************\n"); + exit(d != NULL); } + waitpid(pid, &RETVAL, 0); OUTPUT: RETVAL void -setMouseLive(display, type) - char *display - int type - CODE: - { - XF86MiscMouseSettings mseinfo; - Display *d = XOpenDisplay(display); - if (d) { - if (XF86MiscGetMouseSettings(d, &mseinfo) == True) { - mseinfo.type = type; - mseinfo.flags |= 128; - XF86MiscSetMouseSettings(d, &mseinfo); - XFlush(d); - if (type == MTYPE_IMPS2) initIMPS2(); - } - } - } - -void XSetInputFocus(window) int window CODE: @@ -140,66 +102,9 @@ lseek_sector(fd, sector, offset) OUTPUT: RETVAL -unsigned int -total_sectors(fd) - int fd - CODE: - { - long s; - RETVAL = ioctl(fd, BLKGETSIZE, &s) == 0 ? s : 0; - } - OUTPUT: - RETVAL - -void -unlimit_core() - CODE: - { - struct rlimit rlim = { RLIM_INFINITY, RLIM_INFINITY }; - setrlimit(RLIMIT_CORE, &rlim); - } - -int -getlimit_core() - CODE: - { - struct rlimit rlim; - getrlimit(RLIMIT_CORE, &rlim); - RETVAL = rlim.rlim_cur; - } - OUTPUT: - RETVAL - -void -openlog(ident) - char *ident - CODE: - openlog(ident, 0, 0); - -void -closelog() - -void -syslog(mesg) - char *mesg - CODE: - syslog(LOG_WARNING, mesg); - void setsid() -void -_exit(status) - int status - -int -detectSMP() - -char* -crypt_md5(pw, salt) - char *pw - char *salt - unsigned int getpagesize() @@ -280,140 +185,7 @@ kernel_version() OUTPUT: RETVAL -char * -kernel_arch() - CODE: - struct utsname u; - if (uname(&u) == 0) RETVAL = u.machine; else RETVAL = NULL; - OUTPUT: - RETVAL - -int -set_loop(dev_fd, file) - int dev_fd - char *file - CODE: - RETVAL = 0; -{ - struct loop_info loopinfo; - int file_fd = open(file, O_RDWR); - - if (file_fd < 0) return; - - memset(&loopinfo, 0, sizeof(loopinfo)); - strncpy(loopinfo.lo_name, file, LO_NAME_SIZE); - loopinfo.lo_name[LO_NAME_SIZE - 1] = 0; - - if (ioctl(dev_fd, LOOP_SET_FD, file_fd) < 0) return; - if (ioctl(dev_fd, LOOP_SET_STATUS, &loopinfo) < 0) { - ioctl(dev_fd, LOOP_CLR_FD, 0); - return; - } - close(file_fd); - RETVAL = 1; -} - OUTPUT: - RETVAL - -int -del_loop(device) - char *device - CODE: - RETVAL = 0; -{ - int fd; - if ((fd = open(device, O_RDONLY)) < 0) return; - if (ioctl(fd, LOOP_CLR_FD, 0) < 0) return; - close(fd); - RETVAL = 1; -} - OUTPUT: - RETVAL - -int -prom_open() - -void -prom_close() - -int -prom_getsibling(node) - int node - -int -prom_getchild(node) - int node - -void -prom_getopt(key) - char *key - PPCODE: - int lenp = 0; - char *value = NULL; - value = prom_getopt(key, &lenp); - EXTEND(sp, 1); - if (value != NULL) { - PUSHs(sv_2mortal(newSVpv(value, 0))); - } else { - PUSHs(&PL_sv_undef); - } - -void -prom_setopt(key, value) - char *key - char *value - -void -prom_getproperty(key) - char *key - PPCODE: - int lenp = 0; - char *value = NULL; - value = prom_getproperty(key, &lenp); - EXTEND(sp, 1); - if (value != NULL) { - PUSHs(sv_2mortal(newSVpv(value, lenp))); - } else { - PUSHs(&PL_sv_undef); - } - -void -prom_getstring(key) - char *key - PPCODE: - int lenp = 0; - char *value = NULL; - value = prom_getproperty(key, &lenp); - EXTEND(sp, 1); - if (value != NULL) { - PUSHs(sv_2mortal(newSVpv(value, 0))); - } else { - PUSHs(&PL_sv_undef); - } - -int -prom_getbool(key) - char *key - - - -void -initSilo() - -char * -disk2PromPath(disk) - unsigned char *disk - -int -hasAliases() - -char * -promRootName() -void -setPromVars(linuxAlias, bootDevice) - char *linuxAlias - char *bootDevice '; $ENV{C_RPM} and print ' @@ -448,12 +220,7 @@ rpmdbOpenForTraversal(root) char *root CODE: static rpmdb db; - rpmErrorCallBackType old_cb; - old_cb = rpmErrorSetCallback(rpmError_callback_empty); - rpmSetVerbosity(RPMMESS_FATALERROR); RETVAL = rpmdbOpenForTraversal(root, &db) == 0 ? db : NULL; - rpmErrorSetCallback(old_cb); - rpmSetVerbosity(RPMMESS_NORMAL); OUTPUT: RETVAL @@ -474,7 +241,7 @@ rpmdbTraverse(db, ...) } count = 0; num = rpmdbFirstRecNum(db); - while (num>0) { + while (num) { if (callback != &PL_sv_undef && SvROK(callback)) { h = rpmdbGetRecord(db, num); { @@ -568,31 +335,6 @@ rpmtransAddPackage(rpmdep, header, key, update) RETVAL int -rpmtransRemovePackages(db, rpmdep, p) - void *db - void *rpmdep - char *p - CODE: - rpmdb d = db; - rpmTransactionSet r = rpmdep; - dbiIndexSet matches; - int i; - int count = 0; - if (!rpmdbFindByLabel(d, p, &matches)) { - for (i = 0; i < dbiIndexSetCount(matches); ++i) { - unsigned int recOffset = dbiIndexRecordOffset(matches, i); - if (recOffset) { - rpmtransRemovePackage(rpmdep, recOffset); - ++count; - } - } - RETVAL=count; - } else - RETVAL=0; - OUTPUT: - RETVAL - -int rpmdepOrder(order) void *order CODE: @@ -641,12 +383,7 @@ int rpmdbRebuild(root) char *root CODE: - rpmErrorCallBackType old_cb; - old_cb = rpmErrorSetCallback(rpmError_callback_empty); - rpmSetVerbosity(RPMMESS_FATALERROR); RETVAL = rpmdbRebuild(root) == 0; - rpmErrorSetCallback(old_cb); - rpmSetVerbosity(RPMMESS_NORMAL); OUTPUT: RETVAL @@ -672,33 +409,21 @@ rpmtransSetScriptFd(trans, fd) void *trans int fd CODE: - /* this code core dumps on install... - static FD_t scriptFd = NULL; - if (scriptFd == NULL) scriptFd = fdNew(""); - fdSetFdno(scriptFd, fd); - rpmtransSetScriptFd(trans, scriptFd); - */ - static FD_t scriptFd = NULL; - if (scriptFd != NULL) fdClose(scriptFd); - scriptFd = fdDup(fd); - rpmtransSetScriptFd(trans, scriptFd); + rpmtransSetScriptFd(trans, fdDup(fd)); void -rpmRunTransactions(trans, callbackOpen, callbackClose, callbackMessage, force) +rpmRunTransactions(trans, callbackOpen, callbackClose, callbackStart, callbackProgress, force) void *trans SV *callbackOpen SV *callbackClose - SV *callbackMessage + SV *callbackStart + SV *callbackProgress int force PPCODE: rpmProblemSet probs; void *rpmRunTransactions_callback(const Header h, const rpmCallbackType what, const unsigned long amount, const unsigned long total, const void * pkgKey, void * data) { static FD_t fd; static int last_amount; - char *msg = NULL; - char *param_s = NULL; - const unsigned long *param_ul1 = NULL; - const unsigned long *param_ul2 = NULL; char *n = (char *) pkgKey; switch (what) { @@ -722,82 +447,35 @@ rpmRunTransactions(trans, callbackOpen, callbackClose, callbackMessage, force) XPUSHs(sv_2mortal(newSVpv(n, 0))); PUTBACK; perl_call_sv(callbackClose, G_DISCARD); - free(n); /* was strdup in rpmtransAddPackage */ + free(n); /* was strdup in rpmtransAddPackage */ break; } - case RPMCALLBACK_TRANS_START: { - switch (amount) { - case 1: msg = "Examining packages to install..."; break; - case 5: msg = "Examining files to install..."; break; - case 6: msg = "Finding overlapping files..."; break; - } - if (msg) param_ul1 = &total; - } break; - - case RPMCALLBACK_UNINST_START: { - msg = "Removing old files..."; - param_ul1 = &total; - } break; - - case RPMCALLBACK_TRANS_PROGRESS: { - msg = "Progressing transaction"; - param_ul1 = &amount; - } break; - - case RPMCALLBACK_UNINST_PROGRESS: { - msg = "Progressing removing old files"; - param_ul1 = &amount; - } break; - - case RPMCALLBACK_TRANS_STOP: { - msg = "Done transaction"; - } break; - - case RPMCALLBACK_UNINST_STOP: { - msg = "Done removing old files"; - } break; - case RPMCALLBACK_INST_START: { - msg = "Starting installing package"; - param_s = n; - - last_amount = 0; - } break; + dSP ; + PUSHMARK(sp) ; + XPUSHs(sv_2mortal(newSVpv(n, 0))); + PUTBACK ; + perl_call_sv(callbackStart, G_DISCARD); + last_amount = 0; + } break; case RPMCALLBACK_INST_PROGRESS: - if (total && (amount - last_amount) * 4 / total) { - msg = "Progressing installing package"; - param_s = n; - param_ul1 = &amount; - param_ul2 = &total; - + if ((amount - last_amount) * 4 / total) { + dSP; + PUSHMARK(sp); + XPUSHs(sv_2mortal(newSViv(amount))); + XPUSHs(sv_2mortal(newSViv(total))); + PUTBACK ; + perl_call_sv(callbackProgress, G_DISCARD); last_amount = amount; } break; default: break; } - - if (msg) { - dSP ; - PUSHMARK(sp) ; - XPUSHs(sv_2mortal(newSVpv(msg, 0))); - if (param_s) { - XPUSHs(sv_2mortal(newSVpv(param_s, 0))); - } - if (param_ul1) { - XPUSHs(sv_2mortal(newSViv(*param_ul1))); - } - if (param_ul2) { - XPUSHs(sv_2mortal(newSViv(*param_ul2))); - } - PUTBACK ; - perl_call_sv(callbackMessage, G_DISCARD); - } return NULL; } if (rpmRunTransactions(trans, rpmRunTransactions_callback, NULL, NULL, &probs, 0, force ? ~0 : ~RPMPROB_FILTER_DISKSPACE)) { int i; - printf("rpmRunTransactions finished, errors occured %d\n", probs->numProblems); fflush(stdout); EXTEND(SP, probs->numProblems); for (i = 0; i < probs->numProblems; i++) { PUSHs(sv_2mortal(newSVpv(rpmProblemString(probs->probs[i]), 0))); @@ -830,10 +508,6 @@ headerRead(fd, magicp) OUTPUT: RETVAL -void -headerFree(header) - void *header - char * headerGetEntry_string(h, query) void *h @@ -856,85 +530,29 @@ headerGetEntry_int(h, query) RETVAL void -headerGetEntry_int_list(h, query) - void *h - int query - PPCODE: - int i, type, count = 0; - int_32 *intlist = (int_32 *) NULL; - if (headerGetEntry((Header) h, query, &type, (void**) &intlist, &count)) { - if (count > 0) { - EXTEND(SP, count); - for (i = 0; i < count; i++) { - PUSHs(sv_2mortal(newSViv(intlist[i]))); - } - } - } - -void headerGetEntry_string_list(h, query) void *h int query PPCODE: int i, type, count = 0; char **strlist = (char **) NULL; - if (headerGetEntry((Header) h, query, &type, (void**) &strlist, &count)) { - if (count > 0) { - EXTEND(SP, count); - for (i = 0; i < count; i++) { - PUSHs(sv_2mortal(newSVpv(strlist[i], 0))); - } - } - free(strlist); - } - -void -headerGetEntry_filenames(h) - void *h - PPCODE: - int i, type, count = 0; - char ** baseNames, ** dirNames; - int_32 * dirIndexes; - char **strlist = (char **) NULL; - - if (headerGetEntry((Header) h, RPMTAG_OLDFILENAMES, &type, (void**) &strlist, &count)) { - if (count > 0) { - EXTEND(SP, count); - for (i = 0; i < count; i++) { - PUSHs(sv_2mortal(newSVpv(strlist[i], 0))); - } - } - free(strlist); - } else { - - headerGetEntry(h, RPMTAG_BASENAMES, &type, (void **) &baseNames, &count); - headerGetEntry(h, RPMTAG_DIRINDEXES, &type, (void **) &dirIndexes, NULL); - headerGetEntry(h, RPMTAG_DIRNAMES, &type, (void **) &dirNames, NULL); - - if (baseNames && dirNames && dirIndexes) { - EXTEND(SP, count); - for(i = 0; i < count; i++) { - char *p = malloc(strlen(dirNames[dirIndexes[i]]) + strlen(baseNames[i]) + 1); - if (p == NULL) croak("malloc failed"); - strcpy(p, dirNames[dirIndexes[i]]); - strcat(p, baseNames[i]); - PUSHs(sv_2mortal(newSVpv(p, 0))); - free(p); - } - free(baseNames); - free(dirNames); + if (headerGetEntry((Header) h, query, &type, (void**) &strlist, &count) && count) { + EXTEND(SP, count); + for (i = 0; i < count; i++) { + PUSHs(sv_2mortal(newSVpv(strlist[i], 0))); } } + free(strlist); '; @macros = ( [ qw(int S_IFCHR S_IFBLK KDSKBENT KT_SPEC NR_KEYS MAX_NR_KEYMAPS BLKRRPART TIOCSCTTY - HDIO_GETGEO BLKGETSIZE LOOP_GET_STATUS - MS_MGC_VAL MS_RDONLY O_NONBLOCK O_CREAT SECTORSIZE WNOHANG - VT_ACTIVATE VT_WAITACTIVE VT_GETSTATE CDROM_LOCKDOOR CDROMEJECT + HDIO_GETGEO BLKGETSIZE + MS_MGC_VAL MS_RDONLY O_NONBLOCK SECTORSIZE WNOHANG + VT_ACTIVATE VT_WAITACTIVE VT_GETSTATE ) ], ); -push @macros, [ qw(int RPMTAG_NAME RPMTAG_GROUP RPMTAG_SIZE RPMTAG_VERSION RPMTAG_SUMMARY RPMTAG_DESCRIPTION RPMTAG_RELEASE RPMTAG_ARCH RPMTAG_OBSOLETES RPMTAG_REQUIRENAME RPMTAG_FILEFLAGS RPMFILE_CONFIG) ] +push @macros, [ qw(int RPMTAG_NAME RPMTAG_GROUP RPMTAG_SIZE RPMTAG_VERSION RPMTAG_SUMMARY RPMTAG_DESCRIPTION RPMTAG_RELEASE RPMTAG_ARCH RPMTAG_FILENAMES RPMTAG_OBSOLETES) ] if $ENV{C_RPM}; $\= "\n"; |