Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 208691 | Differences between
and this patch

Collapse All | Expand All

(-)libdvdread-0.9.7.orig/dvdread/dvd_input.c (+4 lines)
Lines 376-381 Link Here
376
  }
376
  }
377
#endif /* HAVE_DVDCSS_DVDCSS_H */
377
#endif /* HAVE_DVDCSS_DVDCSS_H */
378
378
379
380
	fprintf(stderr, "libdvdread patched to play DVDs with DVD-Movie-Protect by Seby\n");
381
	fprintf(stderr, "With help from: http://tobias.rautenkranz.ch/libdvdread_ifo.html\n");
382
379
  dvdcss_library_init = 1;
383
  dvdcss_library_init = 1;
380
  
384
  
381
  if(dvdcss_library) {
385
  if(dvdcss_library) {
(-)libdvdread-0.9.7.orig/dvdread/dvd_udf.c (+77 lines)
Lines 39-44 Link Here
39
#include <sys/stat.h>
39
#include <sys/stat.h>
40
#include <unistd.h>
40
#include <unistd.h>
41
#include <errno.h>
41
#include <errno.h>
42
#ifndef __WIN32__
43
#include <fnmatch.h>
44
#endif
42
45
43
#if defined(HAVE_INTTYPES_H)
46
#if defined(HAVE_INTTYPES_H)
44
#include <inttypes.h>
47
#include <inttypes.h>
Lines 50-55 Link Here
50
#include "dvd_udf.h"
53
#include "dvd_udf.h"
51
#include "dvdread_internal.h"
54
#include "dvdread_internal.h"
52
55
56
#include "ifo_types.h"
57
#include "ifo_read.h"
58
53
#ifndef EMEDIUMTYPE
59
#ifndef EMEDIUMTYPE
54
#define EMEDIUMTYPE ENOENT
60
#define EMEDIUMTYPE ENOENT
55
#endif
61
#endif
Lines 965-970 Link Here
965
uint32_t UDFFindFile( dvd_reader_t *device, char *filename,
971
uint32_t UDFFindFile( dvd_reader_t *device, char *filename,
966
                      uint32_t *filesize )
972
                      uint32_t *filesize )
967
{
973
{
974
  uint32_t offset=0;
975
#ifndef __WIN32__
976
  if (!fnmatch("/VIDEO_TS/VTS_[0-9][0-9]_[0-9].???", filename, FNM_PATHNAME)) {
977
#else
978
  if (strlen("/VIDEO_TS/VTS_01_1.VOB") == strlen(filename)
979
      && !strncmp(filename, "/VIDEO_TS/VTS_", strlen("/VIDEO_TS/VTS_"))	) {
980
#endif
981
    size_t len = strlen(filename);
982
    char *extension = &filename[len-3];
983
    if (!strcmp(extension, "IFO") || !strcmp(extension, "VOB")) {
984
      int title = atoi(&filename[len-8]);
985
      int part = atoi(&filename[len-5]);
986
987
      ifo_handle_t *ifo_handle = ifoOpen(device, 0);
988
      if (0 == ifo_handle)
989
        return 0;
990
991
      if (title > ifo_handle->tt_srpt->nr_of_srpts) {
992
        ifoClose(ifo_handle);
993
        return 0;
994
995
      }
996
997
      uint32_t tmp_filesize;
998
      offset += UDFFindFile(device, "/VIDEO_TS/VIDEO_TS.IFO", &tmp_filesize);
999
1000
1001
      int i;
1002
      for (i=0; i<ifo_handle->tt_srpt->nr_of_srpts; i++)
1003
        if (title == ifo_handle->tt_srpt->title[i].title_set_nr)
1004
          break;
1005
1006
      if (i == ifo_handle->tt_srpt->nr_of_srpts) {
1007
        /* not found */
1008
        ifoClose(ifo_handle);
1009
        return 0;
1010
      }
1011
      offset += ifo_handle->tt_srpt->title[i].title_set_sector;
1012
1013
      ifoClose(ifo_handle);
1014
1015
      if (!strcmp(extension, "VOB")) {
1016
        ifo_handle = ifoOpen(device, title);
1017
        if (0 == ifo_handle)
1018
          return 0;
1019
1020
        switch(part) {
1021
          case 0:
1022
            if (0 == ifo_handle->vtsi_mat->vtsm_vobs)
1023
              return 0;
1024
            offset += ifo_handle->vtsi_mat->vtsm_vobs;
1025
            break;
1026
          case 1:
1027
            if (0 == ifo_handle->vtsi_mat->vtstt_vobs)
1028
              return 0;
1029
            offset += ifo_handle->vtsi_mat->vtstt_vobs;
1030
            break;
1031
          default: /* can't get other parts (also no need to) */
1032
            offset = 0;
1033
            break;
1034
        }
1035
1036
        ifoClose(ifo_handle);
1037
      }
1038
1039
    }
1040
1041
    *filesize = 1000000; /* File size unknown */
1042
    if (offset != 0)
1043
      return offset;
1044
  }
968
  uint8_t *LogBlock;
1045
  uint8_t *LogBlock;
969
  uint32_t lbnum;
1046
  uint32_t lbnum;
970
  uint16_t TagID;
1047
  uint16_t TagID;

Return to bug 208691