home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / CMDS / file.lzh / istar.c < prev    next >
Text File  |  1995-04-27  |  1KB  |  56 lines

  1. /***************************************
  2.  * istar.c                             *
  3.  ***************************************
  4.  * determine if a passed buffer is a   *
  5.  * valid tar format. Will return 0 if  *
  6.  * not, 1 if old tar, 2 if POSIX tar.  *
  7.  ***************************************
  8.  * original code: Scott McGee 12/08/93 *
  9.  **************************************/
  10.  
  11.  /***********************************************************************
  12.  revision history:
  13.  
  14.  who when     what
  15.  ------------------------------------------------------------------------
  16.  sam 04/04/95 added size parameter to checkMagic()
  17.  ***********************************************************************/
  18.  
  19. #include <file.h>
  20.  
  21.  
  22. int istar(buf, size)
  23.   char *buf;
  24.   int  size;
  25. {
  26.     char *ptr = buf;
  27.     char *end;
  28.     long chksum = 0x0;
  29.     long recsum;
  30.     int  i;
  31.  
  32.     if(size < TAR_MAGIC_OFFSET)
  33.         return(NOT_TAR);
  34.  
  35.     if(strncmp(buf+TAR_MAGIC_OFFSET, TAR_MAGIC, TAR_MAGIC_SIZE) == 0)
  36.         return(POSIX_TAR);
  37.  
  38.     recsum = strtoul(buf+TAR_CHKSUM_OFFSET, &end, 8);
  39.       for(i=0;i<TAR_REC_SIZE;i++){
  40.         chksum = chksum + (0xff & *ptr);
  41.         ptr++;
  42.     }
  43.  
  44.     for(i=0;i<TAR_CHKSUM_OFFSET;i++){
  45.         chksum = chksum - (0xff & (buf+TAR_CHKSUM_OFFSET)[i]);
  46.     }
  47.  
  48.     chksum = chksum + ' '*TAR_CHKSUM_SIZE;
  49.  
  50.     if((chksum != recsum) && ((chksum + 0x20) != recsum))
  51.         return(NOT_TAR);
  52.  
  53.     return(OLD_TAR);
  54. }
  55.  
  56.