1 diff --git a/configure.ac b/configure.ac
2 index e5ee5c4..b381093 100644
5 @@ -161,25 +166,61 @@ AC_SUBST(THREAD_LIBS)
6 AC_SUBST(THREAD_CFLAGS)
8 dnl ---------------------------------------------
11 dnl ---------------------------------------------
14 - CFLAGS="-idirafter \$(top_srcdir)/msvc/include $CFLAGS"
15 - LDFLAGS="-no-undefined $LDFLAGS"
18 - LDFLAGS="-no-undefined $LDFLAGS"
21 - AC_CHECK_LIB(c, dlopen,
23 - AC_CHECK_LIB(dl, dlopen,
24 - DYNAMIC_LD_LIBS="-ldl",
25 - AC_MSG_ERROR(dynamic linker needed)))
26 - AC_SUBST(DYNAMIC_LD_LIBS)
29 +AC_ARG_WITH( [libdvdcss],
30 + [ --with-libdvdcss[=PATH] force linking against libdvdcss],
31 + [if test x"$withval" != xno; then
34 + if test x"$withval" != xyes; then
35 + dvdcss_path=$withval
38 +if test x"$link_dvdcss" != xyes; then
40 + AC_CHECK_FUNC( dlopen,
42 + AC_CHECK_LIB( dl, dlopen,
44 + AC_MSG_ERROR(You need libdl (dlopen))
48 +dnl link with libdvdcss
49 + if test -z "$dvdcss_path"; then
50 + AC_CHECK_LIB(dvdcss, dvdcss_interface_2,
51 + [ CSS_LIBS=-ldvdcss ],
52 + AC_MSG_ERROR(You need libdvdcss.so.2 or later)
54 + AC_CHECK_HEADERS(dvdcss/dvdcss.h,
56 + AC_MSG_ERROR(You need libdvdcss (dvdcss.h))
59 + saved_CFLAGS=$CFLAGS
60 + CFLAGS="$CFLAGS -L$dvdcss_path/lib"
61 + AC_CHECK_LIB(dvdcss, dvdcss_interface_2,
62 + [ CSS_LIBS="-L$dvdcss_path/lib -R$dvdcss_path/lib -ldvdcss"
63 + CSS_CFLAGS=-I$dvdcss_path/include ],
64 + AC_MSG_ERROR(You need libdvdcss.so.2 or later)
66 + CFLAGS=$saved_CFLAGS
67 + dnl -w added to shutup GCC3.1's cpp warning about -I/usr/local
68 + saved_CPPFLAGS=$CPPFLAGS
69 + CPPFLAGS="-w $CPPFLAGS -I$dvdcss_path/include"
70 + AC_CHECK_HEADERS(dvdcss/dvdcss.h,
72 + AC_MSG_ERROR(You need libdvdcss (dvdcss.h))
74 + CPPFLAGS=$saved_CPPFLAGS
83 dnl ---------------------------------------------
85 diff --git a/examples/Makefile.am b/examples/Makefile.am
86 index 3cfda2f..3015dd5 100644
87 --- a/examples/Makefile.am
88 +++ b/examples/Makefile.am
89 @@ -8,7 +8,7 @@ noinst_PROGRAMS = menus
91 menus_SOURCES = menus.c
92 menus_LDFLAGS = -L$(top_srcdir)/src/
93 -menus_LDADD = $(DVDNAV_LIB)
94 +menus_LDADD = $(DVDNAV_LIB) $(CSS_LIBS)
97 @cd $(top_builddir)/src/ && $(MAKE) libdvdnav.la
98 diff --git a/src/libdvdread/dvd_input.c b/src/libdvdread/dvd_input.c
99 index d55aac7..63b416f 100644
100 --- a/src/libdvdread/dvd_input.c
101 +++ b/src/libdvdread/dvd_input.c
103 #include "dvd_reader.h"
104 #include "dvd_input.h"
107 +# define lseek _lseeki64
109 +# define off_t int64_t
112 /* The function pointers that is the exported interface of this file. */
113 dvd_input_t (*dvdinput_open) (const char *);
114 diff --git a/src/vm/vm.c b/src/vm/vm.c
115 index 53bef88..db855c7 100644
118 @@ -134,24 +134,25 @@ static void vm_print_current_domain_state(vm_t *vm) {
122 +#include <libdvdread/dvd_input.h>
124 static void dvd_read_name(char *name, const char *device) {
125 /* Because we are compiling with _FILE_OFFSET_BITS=64
126 * all off_t are 64bit.
130 + dvd_input_t fd; int i;
131 uint8_t data[DVD_VIDEO_LB_LEN];
134 - fd = open(device, O_RDONLY);
135 + fd = dvdinput_open(device);
137 - off = lseek( fd, 32 * (off_t) DVD_VIDEO_LB_LEN, SEEK_SET );
138 - if( off == ( 32 * (off_t) DVD_VIDEO_LB_LEN ) ) {
139 - off = read( fd, data, DVD_VIDEO_LB_LEN );
141 - if (off == ( (off_t) DVD_VIDEO_LB_LEN )) {
142 + off = dvdinput_seek( fd, 16 );
144 + off = dvdinput_read( fd, data, 1, DVDINPUT_NOFLAGS );
146 fprintf(MSG_OUT, "libdvdnav: DVD Title: ");
147 - for(i=25; i < 73; i++ ) {
148 + for(i=40; i < 73; i++ ) {
149 if((data[i] == 0)) break;
150 if((data[i] > 32) && (data[i] < 127)) {
151 fprintf(MSG_OUT, "%c", data[i]);
152 @@ -159,10 +160,12 @@ static void dvd_read_name(char *name, const char *device) {
153 fprintf(MSG_OUT, " ");
156 - strncpy(name, (char*) &data[25], 48);
158 + strncpy(name, (char*) &data[40], 32);
160 + while( (i >= 0) && (name[i] <= ' ')) --i;
162 fprintf(MSG_OUT, "\nlibdvdnav: DVD Serial Number: ");
163 - for(i=73; i < 89; i++ ) {
164 + for(i=813; i < 829; i++ ) {
165 if((data[i] == 0)) break;
166 if((data[i] > 32) && (data[i] < 127)) {
167 fprintf(MSG_OUT, "%c", data[i]);
168 @@ -186,7 +189,7 @@ static void dvd_read_name(char *name, const char *device) {
170 fprintf(MSG_OUT, "libdvdnav: Can't seek to block %u\n", 32 );
173 + dvdinput_close(fd);
175 fprintf(MSG_OUT, "NAME OPEN FAILED\n");