summaryrefslogtreecommitdiffstats
path: root/perl-install/c/stuff.xs.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/c/stuff.xs.pm')
-rw-r--r--perl-install/c/stuff.xs.pm466
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";