From: Julian Seward Date: Sat, 27 Apr 2002 02:28:19 +0000 (+0000) Subject: CDROM ioctls. (Lionel Ulmer) X-Git-Tag: svn/VALGRIND_1_0_3~288 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=26207e6d5a9560cf64ecbe4e53c360ab0ec219fb;p=thirdparty%2Fvalgrind.git CDROM ioctls. (Lionel Ulmer) git-svn-id: svn://svn.valgrind.org/valgrind/trunk@163 --- diff --git a/coregrind/vg_unsafe.h b/coregrind/vg_unsafe.h index 6e362ad230..bbc417d98f 100644 --- a/coregrind/vg_unsafe.h +++ b/coregrind/vg_unsafe.h @@ -54,7 +54,7 @@ #include /* for the SG_* ioctls */ #include /* for struct sched_param */ #include /* for struct __sysctl_args */ - +#include /* for cd-rom ioctls */ #define __USE_LARGEFILE64 #include /* for struct stat */ diff --git a/vg_syscall_mem.c b/vg_syscall_mem.c index 931dec5add..f3b7052f8a 100644 --- a/vg_syscall_mem.c +++ b/vg_syscall_mem.c @@ -1718,7 +1718,44 @@ void VG_(perform_assumed_nonblocking_syscall) ( ThreadId tid ) if(!VG_(is_kerror) && res == 0) make_readable(arg3, sizeof(unsigned long)); break; - + + /* CD ROM stuff (??) */ + case CDROMSUBCHNL: + must_be_readable(tst, "ioctl(CDROMSUBCHNL (cdsc_format, char))", + (int) &(((struct cdrom_subchnl *) arg3)->cdsc_format), + sizeof(((struct cdrom_subchnl *) arg3)->cdsc_format)); + must_be_writable(tst, "ioctl(CDROMSUBCHNL)", arg3, + sizeof(struct cdrom_subchnl)); + KERNEL_DO_SYSCALL(tid,res); + if (!VG_(is_kerror)(res) && res == 0) + make_readable (arg3, sizeof(struct cdrom_subchnl)); + break; + case CDROMREADTOCHDR: + must_be_writable(tst, "ioctl(CDROMREADTOCHDR)", arg3, + sizeof(struct cdrom_tochdr)); + KERNEL_DO_SYSCALL(tid,res); + if (!VG_(is_kerror)(res) && res == 0) + make_readable (arg3, sizeof(struct cdrom_tochdr)); + break; + case CDROMREADTOCENTRY: + must_be_readable(tst, "ioctl(CDROMREADTOCENTRY (cdte_format, char))", + (int) &(((struct cdrom_tocentry *) arg3)->cdte_format), + sizeof(((struct cdrom_tocentry *) arg3)->cdte_format)); + must_be_readable(tst, "ioctl(CDROMREADTOCENTRY (cdte_track, char))", + (int) &(((struct cdrom_tocentry *) arg3)->cdte_track), + sizeof(((struct cdrom_tocentry *) arg3)->cdte_track)); + must_be_writable(tst, "ioctl(CDROMREADTOCENTRY)", arg3, + sizeof(struct cdrom_tocentry)); + KERNEL_DO_SYSCALL(tid,res); + if (!VG_(is_kerror)(res) && res == 0) + make_readable (arg3, sizeof(struct cdrom_tochdr)); + break; + case CDROMPLAYMSF: + must_be_readable(tst, "ioctl(CDROMPLAYMSF)", arg3, + sizeof(struct cdrom_msf)); + KERNEL_DO_SYSCALL(tid,res); + break; + /* We don't have any specific information on it, so try to do something reasonable based on direction and size bits. The encoding scheme is described in diff --git a/vg_unsafe.h b/vg_unsafe.h index 6e362ad230..bbc417d98f 100644 --- a/vg_unsafe.h +++ b/vg_unsafe.h @@ -54,7 +54,7 @@ #include /* for the SG_* ioctls */ #include /* for struct sched_param */ #include /* for struct __sysctl_args */ - +#include /* for cd-rom ioctls */ #define __USE_LARGEFILE64 #include /* for struct stat */