diff --git a/lib/Sys/Linux/Mount.pm b/lib/Sys/Linux/Mount.pm index 3efbaf6..d249d54 100644 --- a/lib/Sys/Linux/Mount.pm +++ b/lib/Sys/Linux/Mount.pm @@ -4,6 +4,9 @@ use strict; use warnings; require Exporter; our @ISA = qw/Exporter/; +require XSLoader; + +XSLoader::load(); my @mount_consts = qw/MS_RDONLY MS_NOSUID MS_NODEV MS_NOEXEC MS_SYNCHRONOUS MS_REMOUNT MS_MANDLOCK MS_DIRSYNC MS_NOATIME MS_NODIRATIME MS_BIND MS_MOVE MS_REC MS_SILENT MS_POSIXACL MS_UNBINDABLE MS_PRIVATE MS_SLAVE MS_SHARED MS_RELATIME MS_KERNMOUNT MS_I_VERSION MS_STRICTATIME MS_LAZYTIME MS_ACTIVE MS_NOUSER/; @@ -19,7 +22,7 @@ sub mount { my $options_str = join ',', map {"$_=".$options_hr->{$_}} keys %$options_hr; - my $ret = syscall(SYS_mount(), $source, $target, $filesystem//undef, $flags, $options_str); + my $ret = _mount_sys($source, $target, $filesystem//undef, $flags, $options_str); if ($ret != 0) { die "mount failed: $ret $!"; diff --git a/lib/Sys/Linux/Mount.xs b/lib/Sys/Linux/Mount.xs index 5f72111..7a8faa2 100644 --- a/lib/Sys/Linux/Mount.xs +++ b/lib/Sys/Linux/Mount.xs @@ -12,12 +12,11 @@ PROTOTYPES: ENABLE # XS comments begin with " #" to avoid them being interpreted as pre-processor # directives -int -_unshare_sys(source, target, filesystem, mount, data) +int _mount_sys(source, target, filesystem, mountflags, data) const char *source const char *target const char *filesystem unsigned long mountflags const char *data CODE: - return mount(source, target, filesystem, mount, (const void *) data); + RETVAL = mount(source, target, filesystem, mountflags, (const void *) data); diff --git a/lib/Sys/Linux/Unshare.pm b/lib/Sys/Linux/Unshare.pm index 983fb50..e4b56ae 100644 --- a/lib/Sys/Linux/Unshare.pm +++ b/lib/Sys/Linux/Unshare.pm @@ -24,8 +24,7 @@ sub unshare { local $! = 0; - ### FIXME XXX HACK FUCK YOU = 272 unshare syscall number on x86_64 - my $ret = syscall(SYS_unshare(), $flags); + my $ret = _unshare_sys($flags); if ($ret != 0) { die "unshare failed $ret $!"; diff --git a/lib/Sys/Linux/Unshare.xs b/lib/Sys/Linux/Unshare.xs index 61cd269..0be72ed 100644 --- a/lib/Sys/Linux/Unshare.xs +++ b/lib/Sys/Linux/Unshare.xs @@ -19,5 +19,5 @@ int _unshare_sys(flags) int flags CODE: - return unshare(flags); + RETVAL = unshare(flags);