Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 21 Jan 2001 20:49:30 -0800 (PST)
From:      <scottl@FreeBSD.org>
To:        freebsd-multimedia@freebsd.org
Subject:   Let's try this again
Message-ID:  <200101220449.f0M4nUh59958@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
Yeah, Outlook sucks, sorry about that.  Here are the pr0n DVD enabling patches
again.

Scott

diff -c xine-0.3.5/input/dvd_udf.c xine-0.3.5.new/input/dvd_udf.c
*** xine-0.3.5/input/dvd_udf.c	Fri Jan 12 16:38:15 2001
--- xine-0.3.5.new/input/dvd_udf.c	Sun Jan 21 18:33:07 2001
***************
*** 25,30 ****
--- 25,31 ----
   
  
  #include <stdio.h>
+ #include <stdlib.h>
  #include <unistd.h>
  #include <string.h>
  #include <fcntl.h>
***************
*** 275,284 ****
  
  int UDFMapICB (int fd, struct AD ICB, uint8_t *FileType, struct AD *File)
  {
!   uint8_t LogBlock[DVD_VIDEO_LB_LEN];
    uint32_t lbnum;
    uint16_t TagID;
  
    lbnum=partition.Start+ICB.Location;
  
    do {
--- 276,290 ----
  
  int UDFMapICB (int fd, struct AD ICB, uint8_t *FileType, struct AD *File)
  {
!   uint8_t *LogBlock;
    uint32_t lbnum;
    uint16_t TagID;
  
+   if ((LogBlock = (uint8_t*)malloc(DVD_VIDEO_LB_LEN)) == NULL) {
+     fprintf(stderr, "%s: malloc failed\n", __FUNCTION__);
+     return 0;
+   }
+ 
    lbnum=partition.Start+ICB.Location;
  
    do {
***************
*** 287,296 ****
--- 293,304 ----
  
      if (TagID==261) {
        UDFFileEntry(LogBlock,FileType,File);
+       free(LogBlock);
        return 1;
      };
    } while ((lbnum<=partition.Start+ICB.Location+(ICB.Length-1)/DVD_VIDEO_LB_LEN) && (TagID!=261));
  
+   free(LogBlock);
    return 0;
  }
  
***************
*** 303,315 ****
  
  int UDFScanDir (int fd, struct AD Dir, char *FileName, struct AD *FileICB)
  {
!   uint8_t    LogBlock[DVD_VIDEO_LB_LEN*30];
    uint32_t   lbnum, lb_dir_end, offset;
    uint16_t   TagID;
    uint8_t    filechar;
!   char       filename[MAX_FILE_LEN];
!   int        p;
    
  
    /*
     * read complete directory
--- 311,329 ----
  
  int UDFScanDir (int fd, struct AD Dir, char *FileName, struct AD *FileICB)
  {
!   uint8_t   *LogBlock;
    uint32_t   lbnum, lb_dir_end, offset;
    uint16_t   TagID;
    uint8_t    filechar;
!   char      *filename;
!   int        p, retval = 0;
    
+   LogBlock = (uint8_t*)malloc(DVD_VIDEO_LB_LEN * 30);
+   filename = (char*)malloc(MAX_FILE_LEN);
+   if ((LogBlock == NULL) || (filename == NULL)) {
+     fprintf(stderr, "%s: malloc failed\n", __FUNCTION__);
+     goto bail;
+   }
  
    /*
     * read complete directory
***************
*** 335,347 ****
  
      if (TagID==257) {
        p += UDFFileIdentifier(&LogBlock[p],&filechar,filename,FileICB);
!       if (!strcasecmp (FileName,filename))
! 	return 1;
      } else
  	  p=offset;
    }
  
!   return 0;
  }
  
  
--- 349,368 ----
  
      if (TagID==257) {
        p += UDFFileIdentifier(&LogBlock[p],&filechar,filename,FileICB);
!       if (!strcasecmp (FileName,filename)) {
!         retval = 1;
! 	goto bail;
!       }
      } else
  	  p=offset;
    }
  
!   retval = 0;
! 
! bail:
!   free(LogBlock);
!   free(filename);
!   return retval;
  }
  
  
***************
*** 354,365 ****
  
  int UDFFindPartition (int fd, int partnum, struct Partition *part)
  {
!   uint8_t LogBlock[DVD_VIDEO_LB_LEN],Anchor[DVD_VIDEO_LB_LEN];
    uint32_t lbnum,MVDS_location,MVDS_length;
    uint16_t TagID;
    uint32_t lastsector;
!   int i,terminate,volvalid;
  
  
    /* find anchor */
    lastsector=0;
--- 375,392 ----
  
  int UDFFindPartition (int fd, int partnum, struct Partition *part)
  {
!   uint8_t *LogBlock,*Anchor;
    uint32_t lbnum,MVDS_location,MVDS_length;
    uint16_t TagID;
    uint32_t lastsector;
!   int i,terminate,volvalid,retval = 0;
  
+   LogBlock = (uint8_t*)malloc(DVD_VIDEO_LB_LEN);
+   Anchor = (uint8_t*)malloc(DVD_VIDEO_LB_LEN);
+   if ((LogBlock == NULL) || (Anchor == NULL)) {
+     fprintf(stderr, "%s: malloc failed\n", __FUNCTION__);
+     goto bail;
+   }
  
    /* find anchor */
    lastsector=0;
***************
*** 373,386 ****
        TagID=0;
      
      if (TagID!=2) { /* not an anchor? */
!       if (terminate) return 0;	/* final try failed */
        if (lastsector) {		/* we already found the last sector    */
  	lbnum=lastsector;	/* try #3, alternative backup anchor   */
  	terminate=1;		/* but thats just about enough, then!  */
        } else {
  	/* TODO: find last sector of the disc (this is optional)       */
  	if (lastsector) lbnum=lastsector-256; /* try #2, backup anchor */
! 	else return 0;          /* unable to find last sector          */
        }
      } else break;               /* it is an anchor! continue...        */
    }
--- 400,413 ----
        TagID=0;
      
      if (TagID!=2) { /* not an anchor? */
!       if (terminate) goto bail;	/* final try failed */
        if (lastsector) {		/* we already found the last sector    */
  	lbnum=lastsector;	/* try #3, alternative backup anchor   */
  	terminate=1;		/* but thats just about enough, then!  */
        } else {
  	/* TODO: find last sector of the disc (this is optional)       */
  	if (lastsector) lbnum=lastsector-256; /* try #2, backup anchor */
! 	else goto bail;          /* unable to find last sector          */
        }
      } else break;               /* it is an anchor! continue...        */
    }
***************
*** 413,419 ****
      if ((!part->valid) || (!volvalid)) UDFExtentAD(&Anchor[24],&MVDS_length,&MVDS_location);  /* backup volume descriptor */
    } while (i-- && ((!part->valid) || (!volvalid)));
    
!   return (part->valid);  /* we only care for the partition, not the volume */
  }
  
  
--- 440,451 ----
      if ((!part->valid) || (!volvalid)) UDFExtentAD(&Anchor[24],&MVDS_length,&MVDS_location);  /* backup volume descriptor */
    } while (i-- && ((!part->valid) || (!volvalid)));
    
!   retval = part->valid;  /* we only care for the partition, not the volume */
! 
! bail:
!   free(LogBlock);
!   free(Anchor);
!   return retval;
  }
  
  
***************
*** 426,447 ****
  
  uint32_t UDFFindFile (int fd, char *filename, off_t *size)
  {
!   uint8_t LogBlock[DVD_VIDEO_LB_LEN];
    uint8_t filetype;
!   uint32_t lbnum;
    uint16_t TagID;
    struct AD RootICB,File,ICB;
!   char tokenline[MAX_FILE_LEN] = "";
    char *token;
    off_t lb_number;
- 
    int Partition=0;  /* this is the standard location for DVD Video */
    
!   strcat (tokenline,filename);
    
    /* Find partition */
    if (!UDFFindPartition(fd, Partition,&partition))
!     return 0;
    
    /* Find root dir ICB */
    lbnum=partition.Start;
--- 458,486 ----
  
  uint32_t UDFFindFile (int fd, char *filename, off_t *size)
  {
!   uint8_t *LogBlock;
    uint8_t filetype;
!   uint32_t lbnum, retval = 0;
    uint16_t TagID;
    struct AD RootICB,File,ICB;
!   char *tokenline;
    char *token;
    off_t lb_number;
    int Partition=0;  /* this is the standard location for DVD Video */
+ 
+   LogBlock = (uint8_t*)malloc(DVD_VIDEO_LB_LEN);
+   tokenline = (char*)malloc(MAX_FILE_LEN);
+   if ((LogBlock == NULL) || (tokenline == NULL)) {
+     fprintf(stderr, "%s: malloc failed\n", __FUNCTION__);
+     goto bail;
+   }
+   memset(tokenline, 0, MAX_FILE_LEN);
    
!   strncat (tokenline,filename,MAX_FILE_LEN);
    
    /* Find partition */
    if (!UDFFindPartition(fd, Partition,&partition))
!     goto bail;
    
    /* Find root dir ICB */
    lbnum=partition.Start;
***************
*** 456,478 ****
        UDFAD(&LogBlock[400],&RootICB,UDFADlong);
    } while ((lbnum<partition.Start+partition.Length) && (TagID!=8) && (TagID!=256));
    if (TagID!=256)
!     return 0;
    if (RootICB.Partition!=Partition)
!     return 0;
    
    /* Find root dir */
    if (!UDFMapICB(fd, RootICB,&filetype,&File))
!     return 0;
    if (filetype!=4)		/* root dir should be dir */
!     return 0;
    
    /* Tokenize filepath */
    token=strtok(tokenline,"/");
    while (token) {
      if (!UDFScanDir(fd, File,token,&ICB))
!       return 0;
      if (!UDFMapICB(fd, ICB,&filetype,&File))
!       return 0;
      token=strtok(NULL,"/");
    }
    
--- 495,517 ----
        UDFAD(&LogBlock[400],&RootICB,UDFADlong);
    } while ((lbnum<partition.Start+partition.Length) && (TagID!=8) && (TagID!=256));
    if (TagID!=256)
!     goto bail;
    if (RootICB.Partition!=Partition)
!     goto bail;
    
    /* Find root dir */
    if (!UDFMapICB(fd, RootICB,&filetype,&File))
!     goto bail;
    if (filetype!=4)		/* root dir should be dir */
!     goto bail;
    
    /* Tokenize filepath */
    token=strtok(tokenline,"/");
    while (token) {
      if (!UDFScanDir(fd, File,token,&ICB))
!       goto bail;
      if (!UDFMapICB(fd, ICB,&filetype,&File))
!       goto bail;
      token=strtok(NULL,"/");
    }
    
***************
*** 480,486 ****
  
    lb_number = partition.Start+File.Location ;
  
!   return lb_number;
  }
  
  
--- 519,530 ----
  
    lb_number = partition.Start+File.Location ;
  
!   retval = lb_number;
! 
! bail:
!   free(LogBlock);
!   free(tokenline);
!   return retval;
  }
  
  
***************
*** 489,516 ****
   */
  
  void UDFListDir(int fd, char *dirname, int nMaxFiles, char **file_list, int *nFiles) {
!   uint8_t    LogBlock[30*DVD_VIDEO_LB_LEN];
    uint32_t   lbnum;
    uint16_t   TagID;
    struct AD  RootICB,Dir,ICB;
!   char       tokenline[MAX_FILE_LEN];
    char      *token, *ntoken;
    uint8_t    filetype;
!   char       filename[MAX_FILE_LEN];
    int        p;
    uint8_t    filechar;
    char      *dest;
    int        Partition=0;  /* this is the standard location for DVD Video */
    
    *nFiles = 0;
    tokenline[0]='\0';
!   strcat(tokenline,dirname);
  
    /* Find partition */
    if (!UDFFindPartition(fd, Partition,&partition)) {
      /* no partition found (no disc ??) */
      *nFiles = -1;
!     return;
    }
  
    /* Find root dir ICB */
--- 533,568 ----
   */
  
  void UDFListDir(int fd, char *dirname, int nMaxFiles, char **file_list, int *nFiles) {
!   uint8_t   *LogBlock;
    uint32_t   lbnum;
    uint16_t   TagID;
    struct AD  RootICB,Dir,ICB;
!   char      *tokenline;
    char      *token, *ntoken;
    uint8_t    filetype;
!   char      *filename;
    int        p;
    uint8_t    filechar;
    char      *dest;
    int        Partition=0;  /* this is the standard location for DVD Video */
    
+   LogBlock = (uint8_t*)malloc(DVD_VIDEO_LB_LEN * 30);
+   tokenline = (char*)malloc(MAX_FILE_LEN);
+   filename = (char*)malloc(MAX_FILE_LEN);
+   if ((LogBlock == NULL) || (tokenline == NULL) || (filename == NULL)) {
+     fprintf(stderr, "%s: malloc failed\n", __FUNCTION__);
+     goto bail;
+   }
+ 
    *nFiles = 0;
    tokenline[0]='\0';
!   strncat(tokenline,dirname,MAX_FILE_LEN);
  
    /* Find partition */
    if (!UDFFindPartition(fd, Partition,&partition)) {
      /* no partition found (no disc ??) */
      *nFiles = -1;
!     goto bail;
    }
  
    /* Find root dir ICB */
***************
*** 528,542 ****
  	   && (TagID!=8) && (TagID!=256));
  
    if (TagID!=256) 
!     return ;
    if (RootICB.Partition!=Partition) 
!     return ;
    
    /* Find root dir */
    if (!UDFMapICB(fd, RootICB,&filetype,&Dir)) 
!     return ;
    if (filetype!=4) 
!     return ;  /* root dir should be dir */
  
    
  
--- 580,594 ----
  	   && (TagID!=8) && (TagID!=256));
  
    if (TagID!=256) 
!     goto bail;
    if (RootICB.Partition!=Partition) 
!     goto bail;
    
    /* Find root dir */
    if (!UDFMapICB(fd, RootICB,&filetype,&Dir)) 
!     goto bail;
    if (filetype!=4) 
!     goto bail;  /* root dir should be dir */
  
    
  
***************
*** 546,554 ****
    while (token != NULL) {
  
      if (!UDFScanDir(fd, Dir,token,&ICB)) 
!       return ;
      if (!UDFMapICB(fd, ICB,&filetype,&Dir)) 
!       return ;
  
      if (ntoken == NULL) {
        uint32_t lb_dir_end, offset;
--- 598,606 ----
    while (token != NULL) {
  
      if (!UDFScanDir(fd, Dir,token,&ICB)) 
!       goto bail;
      if (!UDFMapICB(fd, ICB,&filetype,&Dir)) 
!       goto bail;
  
      if (ntoken == NULL) {
        uint32_t lb_dir_end, offset;
***************
*** 582,592 ****
  	  if (strcmp (filename,"")) {
  
  	    dest = file_list[*nFiles];
! 	    strcpy (dest,filename);
  	    (*nFiles)++;
  	    
  	    if ((*nFiles)>=nMaxFiles)
! 	      return;
  	    
  	  }
  
--- 634,644 ----
  	  if (strcmp (filename,"")) {
  
  	    dest = file_list[*nFiles];
! 	    strncpy (dest,filename,256);
  	    (*nFiles)++;
  	    
  	    if ((*nFiles)>=nMaxFiles)
! 	      goto bail;
  	    
  	  }
  
***************
*** 600,604 ****
--- 652,662 ----
      token=ntoken;
      ntoken=strtok(NULL,"/");
    }
+ 
+ bail:
+   free(LogBlock);
+   free(tokenline);
+   free(filename);
+   return;
  }
  


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-multimedia" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200101220449.f0M4nUh59958>