summaryrefslogtreecommitdiffstats
path: root/perl-install/c/stuff.xs.pm
diff options
context:
space:
mode:
authorFrancois Pons <fpons@mandriva.com>2000-11-15 14:38:03 +0000
committerFrancois Pons <fpons@mandriva.com>2000-11-15 14:38:03 +0000
commit15f4413742c955067baaf9bac680eb5ac7db37a0 (patch)
tree2b2dd70e18edb63b5dfa65d1b8dee399b51be54c /perl-install/c/stuff.xs.pm
parent9f4238729d33ad26776c8cbc5e052b0bb3bd5ad4 (diff)
downloaddrakx-15f4413742c955067baaf9bac680eb5ac7db37a0.tar
drakx-15f4413742c955067baaf9bac680eb5ac7db37a0.tar.gz
drakx-15f4413742c955067baaf9bac680eb5ac7db37a0.tar.bz2
drakx-15f4413742c955067baaf9bac680eb5ac7db37a0.tar.xz
drakx-15f4413742c955067baaf9bac680eb5ac7db37a0.zip
updated for rpm 4.
Diffstat (limited to 'perl-install/c/stuff.xs.pm')
-rw-r--r--perl-install/c/stuff.xs.pm79
1 files changed, 35 insertions, 44 deletions
diff --git a/perl-install/c/stuff.xs.pm b/perl-install/c/stuff.xs.pm
index 525403f24..7d36268ec 100644
--- a/perl-install/c/stuff.xs.pm
+++ b/perl-install/c/stuff.xs.pm
@@ -479,31 +479,28 @@ rpmdbTraverse(db, ...)
void *db
PREINIT:
SV *callback = &PL_sv_undef;
- int num, count;
+ int count;
Header h;
+ rpmdbMatchIterator mi;
CODE:
if (items > 1) {
callback = ST(1);
}
count = 0;
- num = rpmdbFirstRecNum(db);
- while (num>0) {
+ mi = rpmdbInitIterator(db, RPMDBI_PACKAGES, NULL, 0);
+ while (h = rpmdbNextIterator(mi)) {
if (callback != &PL_sv_undef && SvROK(callback)) {
- h = rpmdbGetRecord(db, num);
- {
- dSP;
- ENTER;
- SAVETMPS;
- PUSHMARK(sp);
- XPUSHs(sv_2mortal(newSViv((IV)(void *)h)));
- PUTBACK;
- perl_call_sv(callback, G_DISCARD | G_SCALAR);
- FREETMPS;
- LEAVE;
- }
- headerFree(h);
+ dSP;
+ ENTER;
+ SAVETMPS;
+ PUSHMARK(sp);
+ XPUSHs(sv_2mortal(newSViv((IV)(void *)h)));
+ PUTBACK;
+ perl_call_sv(callback, G_DISCARD | G_SCALAR);
+ FREETMPS;
+ LEAVE;
}
- num = rpmdbNextRecNum(db, num);
+ headerFree(h);
++count;
}
RETVAL = count;
@@ -516,41 +513,35 @@ rpmdbNameTraverse(db, name, ...)
char *name
PREINIT:
SV *callback = &PL_sv_undef;
- int i, rc;
+ int count;
Header h;
+ rpmdbMatchIterator mi;
rpmErrorCallBackType oldcb;
dbiIndexSet matches;
CODE:
if (items > 2) {
callback = ST(2);
}
- rc = rpmdbFindPackage(db, name, &matches);
- if (rc == 0) {
- RETVAL = matches.count;
- if (callback != &PL_sv_undef && SvROK(callback) && matches.count > 0) {
- oldcb = rpmErrorSetCallback(rpmError_callback_empty);
- for (i = 0; i < matches.count; ++i) {
- h = rpmdbGetRecord(db, matches.recs[i].recOffset);
-
- {
- dSP;
- ENTER;
- SAVETMPS;
- PUSHMARK(sp);
- XPUSHs(sv_2mortal(newSViv((IV)(void *)h)));
- PUTBACK;
- perl_call_sv(callback, G_DISCARD | G_SCALAR);
- FREETMPS;
- LEAVE;
- }
-
- headerFree(h);
- }
- rpmErrorSetCallback(oldcb);
+ count = 0;
+ mi = rpmdbInitIterator(db, RPMTAG_NAME, name, 0);
+ oldcb = rpmErrorSetCallback(rpmError_callback_empty);
+ while (h = rpmdbNextIterator(mi)) {
+ if (callback != &PL_sv_undef && SvROK(callback)) {
+ dSP;
+ ENTER;
+ SAVETMPS;
+ PUSHMARK(sp);
+ XPUSHs(sv_2mortal(newSViv((IV)(void *)h)));
+ PUTBACK;
+ perl_call_sv(callback, G_DISCARD | G_SCALAR);
+ FREETMPS;
+ LEAVE;
}
- dbiFreeIndexRecord(matches);
- } else
- RETVAL = 0;
+ headerFree(h);
+ ++count;
+ }
+ rpmErrorSetCallback(oldcb);
+ RETVAL = count;
OUTPUT:
RETVAL
on() or warn("ERROR: kernel package " . c::kernel_version() . " not installed\n"), c::_exit(1); run_program::run('sysctl', '-w', 'kernel.hotplug=/bin/true'); modules::load_category('bus/usb'); *c::pcmcia_probe = \&detect_devices::pcmcia_probe; $o->{pcmcia} ||= !$::noauto && c::pcmcia_probe(); install_steps::setupSCSI($o); run_program::run('sysctl', '-w', 'kernel.hotplug=/sbin/hotplug'); drakx_stuff: $o->{steps}{$_} = { reachable => 1, text => $_ } foreach qw(autoSelectLanguage configMove selectMouse setRootPassword addUser configureNetwork miscellaneous selectMouse); $o->{orderedSteps_orig} = $o->{orderedSteps}; $o->{orderedSteps} = [ qw(selectLanguage acceptLicense selectMouse setupSCSI miscellaneous selectKeyboard setRootPassword addUser configureNetwork configMove ) ]; $o->{steps}{first} = $o->{orderedSteps}[0]; } sub enable_service { run_program::run('/sbin/chkconfig', '--level', 5, $_[0], 'on'); } sub disable_service { run_program::run('/sbin/chkconfig', '--del', $_[0], 'on'); } sub install2::configMove { my $o = $::o; security::level::set($o->{security}); require install_steps; install_steps::addUser($o); # for test, when replaying wizard on an already configured machine while ($#{$o->{users}} eq -1) { install_steps::addUser($o); } $::noauto and goto after_autoconf; my $_wait = $o->wait_message(N("Auto configuration"), N("Please wait, detecting and configuring devices...")); #- automatic printer, timezone, network configs require install_steps_interactive; if (cat_('/proc/mounts') !~ /nfs/) { install_steps_interactive::configureNetwork($o); enable_service('network'); } enable_service('netfs'); install_steps_interactive::summaryBefore($o); modules::load_category('multimedia/sound'); enable_service('sound'); detect_devices::isLaptop() or enable_service('numlock'); after_autoconf: require timezone; timezone::write($o->{timezone}); $o->{useSupermount} = 1; fs::set_removable_mntpoints($o->{all_hds}); require fs::mount_options; fs::mount_options::set_all_default($o->{all_hds}, %$o, lang::fs_options($o->{locale})); $o->{modules_conf}->write; require mouse; mouse::write_conf($o, $o->{mouse}, 1); #- write xfree mouse conf detect_devices::install_addons(''); foreach my $step (@{$o->{orderedSteps_orig}}) { next if member($step, @{$o->{orderedSteps}}); while (my $f = shift @{$o->{steps}{$step}{toBeDone} || []}) { log::l("doing remaining toBeDone for undone step $step"); eval { &$f() }; $o->ask_warn(N("Error"), [ N("An error occurred, but I don't know how to handle it nicely. Continue at your own risk."). formatError($@) || $@ ]) if $@; } } run_program::run('killall', 'Xorg'); output_p("$::prefix/etc/rpm/macros", "%_install_langs all\n"); # workaround init reading inittab before any.pm alters it: if ($::o->{autologin}) { run_program::run('chkconfig', 'dm', 'on'); run_program::run('telinit', 'Q'); } # prevent dm service to fail to startup because of /tmp/.font-unix's permissions: run_program::run('service', 'xfs', 'stop'); c::_exit(0); } sub automatic_xconf { my ($o) = @_; log::l('automatic XFree configuration'); any::devfssymlinkf($o->{mouse}, 'mouse'); local $o->{mouse}{device} = 'mouse'; require Xconfig::default; require class_discard; $o->{raw_X} = Xconfig::default::configure(class_discard->new, { KEYBOARD => 'uk' }, $o->{mouse}); #- using uk instead of us for now to have less warnings require Xconfig::main; Xconfig::main::configure_everything_auto_install($o->{raw_X}, class_discard->new, {}, { allowNVIDIA_rpms => sub { [] }, allowATI_rpms => sub { [] }, allowFB => $o->{allowFB} }); modules::load_category('various/agpgart'); my $file = '/etc/X11/XF86Config'; $file = "$file-4" if -e "$file-4"; my ($Driver) = cat_($file) =~ /Section "Device".*Driver\s*"(.*?)"/s; if ($Driver eq 'nvidia') { modules::load('nvidia'); } my $lib = 'libGL.so.1'; symlinkf_short(-e "/usr/lib/$lib.$Driver" ? "/usr/lib/$lib.$Driver" : "/usr/X11R6/lib/$lib", "/etc/X11/$lib"); } sub handleI18NClp {} 1;