Changeset 1996aee7 in rtems


Ignore:
Timestamp:
Feb 7, 2005, 1:25:14 PM (15 years ago)
Author:
Ralf Corsepius <ralf.corsepius@…>
Branches:
4.10, 4.11, 4.8, 4.9, master
Children:
017ec60
Parents:
9d0e65ed
Message:

2005-02-07 Ralf Corsepius <ralf.corsepius@…>

  • libfs/src/imfs/imfs.h, libfs/src/imfs/imfs_load_tar.c, libmisc/untar/untar.c, libmisc/untar/untar.h: Various generalizations and fixes.
Location:
cpukit
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • cpukit/ChangeLog

    r9d0e65ed r1996aee7  
     12005-02-07      Ralf Corsepius <ralf.corsepius@rtems.org>
     2
     3        * libfs/src/imfs/imfs.h, libfs/src/imfs/imfs_load_tar.c,
     4        libmisc/untar/untar.c, libmisc/untar/untar.h:
     5        Various generalizations and fixes.
     6
    172005-02-07      Ralf Corsepius <ralf.corsepius@rtems.org>
    28
  • cpukit/libfs/src/imfs/imfs.h

    r9d0e65ed r1996aee7  
    8585  (IMFS_MEMFILE_BYTES_PER_BLOCK / sizeof(void *))
    8686
    87 typedef unsigned char * block_p;
     87typedef char * block_p;
    8888typedef block_p *block_ptr;
    8989
     
    269269
    270270int rtems_tarfs_load(
    271    char          *mountpoint,
    272    unsigned char *addr,
    273    unsigned long length
     271   char         *mountpoint,
     272   char         *tar_image,
     273   size_t        tar_size
    274274);
    275275
  • cpukit/libfs/src/imfs/imfs_load_tar.c

    r9d0e65ed r1996aee7  
    2525#include <rtems/chain.h>
    2626#include <rtems/imfs.h>
    27 
     27#include <rtems/untar.h>
    2828
    2929/**************************************************************************
     
    5757 *************************************************************************/
    5858
    59 #define LF_OLDNORMAL  '\0'     /* Normal disk file, Unix compatible */
    60 #define LF_NORMAL     '0'      /* Normal disk file                  */
    61 #define LF_LINK       '1'      /* Link to previously dumped file    */
    62 #define LF_SYMLINK    '2'      /* Symbolic link                     */
    63 #define LF_CHR        '3'      /* Character special file            */
    64 #define LF_BLK        '4'      /* Block special file                */
    65 #define LF_DIR        '5'      /* Directory                         */
    66 #define LF_FIFO       '6'      /* FIFO special file                 */
    67 #define LF_CONFIG     '7'      /* Contiguous file                   */
    68 
    6959#define MAX_NAME_FIELD_SIZE      99
    7060
    7161#define MIN(a,b)   ((a)>(b)?(b):(a))
    72 
    73 static unsigned long octal2ulong(char *octascii, int len);
    74 static int compute_tar_header_checksum(char *bufr);
    7562
    7663/**************************************************************************
     
    8774int
    8875rtems_tarfs_load(char *mountpoint,
    89                  unsigned char *tar_image,
    90                  unsigned long tar_size)
     76                 char *tar_image,
     77                 size_t tar_size)
    9178{
    9279   rtems_filesystem_location_info_t root_loc;
    9380   rtems_filesystem_location_info_t loc;
    94    char            *hdr_ptr;
     81   const char     *hdr_ptr;
    9582   char            filename[100];
    9683   char            full_filename[256];
     
    133120
    134121      linkflag   = hdr_ptr[156];
    135       file_mode  = octal2ulong(&hdr_ptr[100], 8);
    136       file_size  = octal2ulong(&hdr_ptr[124], 12);
    137       hdr_chksum = (int)octal2ulong(&hdr_ptr[148], 8);
     122      file_mode  = _rtems_octal2ulong(&hdr_ptr[100], 8);
     123      file_size  = _rtems_octal2ulong(&hdr_ptr[124], 12);
     124      hdr_chksum = _rtems_octal2ulong(&hdr_ptr[148], 8);
    138125
    139       if (compute_tar_header_checksum(hdr_ptr) != hdr_chksum)
     126      if (_rtems_tar_header_checksum(hdr_ptr) != hdr_chksum)
    140127         break;
    141128
     
    146133       * - For files, create a file node with special tarfs properties.
    147134       *****************************************************************/
    148       if (linkflag == LF_DIR)
     135      if (linkflag == DIRTYPE)
    149136      {
    150137         strcpy(full_filename, mountpoint);
     
    157144       * Create a LINEAR_FILE node if no user write permission.
    158145       *****************************************************************/
    159       else if ((linkflag == LF_NORMAL) &&
     146      else if ((linkflag == REGTYPE) &&
    160147               ((file_mode & 0200) == 0000))
    161148      {
     
    179166       * Create a regular MEMORY_FILE if write permission exists.
    180167       *****************************************************************/
    181       else if ((linkflag == LF_NORMAL) &&
     168      else if ((linkflag == REGTYPE) &&
    182169               ((file_mode & 0200) == 0200))
    183170      {
     
    211198}
    212199
    213 /**************************************************************************
    214  * This converts octal ASCII number representations into an
    215  * unsigned long.  Only support 32-bit numbers for now.
    216  *************************************************************************/
    217 static unsigned long
    218 octal2ulong(char *octascii, int len)
    219 {
    220    int           i;
    221    unsigned long num;
    222    unsigned long mult;
    223 
    224    num = 0;
    225    mult = 1;
    226    for (i=len-1; i>=0; i--)
    227    {
    228       if (octascii[i] < '0')
    229          continue;
    230       if (octascii[i] > '9')
    231          continue;
    232 
    233       num  += mult*((unsigned long)(octascii[i] - '0'));
    234       mult *= 8;
    235    }
    236    return(num);
    237 }
    238 
    239 
    240 /************************************************************************
    241  * Compute the TAR checksum and check with the value in
    242  * the archive.  The checksum is computed over the entire
    243  * header, but the checksum field is substituted with blanks.
    244  ************************************************************************/
    245 static int
    246 compute_tar_header_checksum(char *bufr)
    247 {
    248    int  i, sum;
    249 
    250 
    251    sum = 0;
    252    for (i=0; i<512; i++)
    253    {
    254       if ((i >= 148) && (i < 156))
    255          sum += 0xff & ' ';
    256       else
    257          sum += 0xff & bufr[i];
    258    }
    259    return(sum);
    260 }
  • cpukit/libmisc/untar/untar.c

    r9d0e65ed r1996aee7  
    2424#include <sys/stat.h>
    2525#include <fcntl.h>
    26 #include "untar.h"
     26#include <rtems/untar.h>
    2727
    2828
     
    5757 *************************************************************************/
    5858
    59 #define LF_OLDNORMAL  '\0'     /* Normal disk file, Unix compatible */
    60 #define LF_NORMAL     '0'      /* Normal disk file                  */
    61 #define LF_LINK       '1'      /* Link to previously dumped file    */
    62 #define LF_SYMLINK    '2'      /* Symbolic link                     */
    63 #define LF_CHR        '3'      /* Character special file            */
    64 #define LF_BLK        '4'      /* Block special file                */
    65 #define LF_DIR        '5'      /* Directory                         */
    66 #define LF_FIFO       '6'      /* FIFO special file                 */
    67 #define LF_CONFIG     '7'      /* Contiguous file                   */
    68 
    6959#define MAX_NAME_FIELD_SIZE      99
    7060
     
    7666 * unsigned long.  Only support 32-bit numbers for now.
    7767 *************************************************************************/
    78 static unsigned long
    79 octal2ulong(char *octascii, int len)
     68unsigned long
     69_rtems_octal2ulong(const char *octascii, size_t len)
    8070{
    81    int           i;
     71   size_t        i;
    8272   unsigned long num;
    8373   unsigned long mult;
     
    163153
    164154      linkflag   = bufr[156];
    165       file_size  = octal2ulong(&bufr[124], 12);
     155      file_size  = _rtems_octal2ulong(&bufr[124], 12);
    166156
    167157      /******************************************************************
     
    170160       * header, but the checksum field is substituted with blanks.
    171161       ******************************************************************/
    172       hdr_chksum = octal2ulong(&bufr[148], 8);
    173       sum = 0;
    174       for (i=0; i<512; i++)
    175       {
    176          if ((i >= 148) && (i < 156))
    177          {
    178             sum += 0xff & ' ';
    179          }
    180          else
    181          {
    182             sum += 0xff & bufr[i];
    183          }
    184       }
     162      hdr_chksum = _rtems_octal2ulong(&bufr[148], 8);
     163      sum = _rtems_tar_header_checksum(bufr);
     164
    185165      if (sum != hdr_chksum)
    186166      {
     
    194174       * do something with it.
    195175       *****************************************************************/
    196       if (linkflag == LF_SYMLINK)
     176      if (linkflag == SYMTYPE)
    197177      {
    198178         strncpy(linkname, &bufr[157], MAX_NAME_FIELD_SIZE);
     
    200180         symlink(linkname, fname);
    201181      }
    202       else if (linkflag == LF_NORMAL)
     182      else if (linkflag == REGTYPE)
    203183      {
    204184         nblocks = (((file_size) + 511) & ~511) / 512;
     
    232212         }
    233213      }
    234       else if (linkflag == LF_DIR)
     214      else if (linkflag == DIRTYPE)
    235215      {
    236216         mkdir(fname, S_IRWXU | S_IRWXG | S_IRWXO);
     
    310290
    311291      linkflag   = bufr[156];
    312       size       = octal2ulong(&bufr[124], 12);
     292      size       = _rtems_octal2ulong(&bufr[124], 12);
    313293
    314294      /******************************************************************
     
    317297       * header, but the checksum field is substituted with blanks.
    318298       ******************************************************************/
    319       hdr_chksum = (int)octal2ulong(&bufr[148], 8);
    320       sum = 0;
    321       for (i=0; i<512; i++)
    322       {
    323          if ((i >= 148) && (i < 156))
    324          {
    325             sum += 0xff & ' ';
    326          }
    327          else
    328          {
    329             sum += 0xff & bufr[i];
    330          }
    331       }
     299      hdr_chksum = _rtems_octal2ulong(&bufr[148], 8);
     300      sum = _rtems_tar_header_checksum(bufr);
     301
    332302      if (sum != hdr_chksum)
    333303      {
     
    340310       * do something with it.
    341311       *****************************************************************/
    342       if (linkflag == LF_SYMLINK)
     312      if (linkflag == SYMTYPE)
    343313      {
    344314         strncpy(linkname, &bufr[157], MAX_NAME_FIELD_SIZE);
     
    346316         symlink(linkname,fname);
    347317      }
    348       else if (linkflag == LF_NORMAL)
     318      else if (linkflag == REGTYPE)
    349319      {
    350320         int out_fd;
     
    374344         }
    375345      }
    376       else if (linkflag == LF_DIR)
     346      else if (linkflag == DIRTYPE)
    377347      {
    378348         mkdir(fname, S_IRWXU | S_IRWXG | S_IRWXO);
     
    384354   return(retval);
    385355}
     356
     357/************************************************************************
     358 * Compute the TAR checksum and check with the value in
     359 * the archive.  The checksum is computed over the entire
     360 * header, but the checksum field is substituted with blanks.
     361 ************************************************************************/
     362int
     363_rtems_tar_header_checksum(const char *bufr)
     364{
     365   int  i, sum;
     366
     367   sum = 0;
     368   for (i=0; i<512; i++)
     369   {
     370      if ((i >= 148) && (i < 156))
     371         sum += 0xff & ' ';
     372      else
     373         sum += 0xff & bufr[i];
     374   }
     375   return(sum);
     376}
  • cpukit/libmisc/untar/untar.h

    r9d0e65ed r1996aee7  
    1313
    1414#include <stddef.h>
     15#include <rtems/tar.h>
    1516
    1617#ifdef __cplusplus
     
    2728int Untar_FromFile(char *tar_name);
    2829
     30/**************************************************************************
     31 * This converts octal ASCII number representations into an
     32 * unsigned long.  Only support 32-bit numbers for now.
     33 *************************************************************************/
     34extern unsigned long
     35_rtems_octal2ulong(const char *octascii, size_t len);
     36
     37/************************************************************************
     38 * Compute the TAR checksum and check with the value in
     39 * the archive.  The checksum is computed over the entire
     40 * header, but the checksum field is substituted with blanks.
     41 ************************************************************************/
     42extern int
     43_rtems_tar_header_checksum(const char *bufr);
     44
    2945#ifdef __cplusplus
    3046}
Note: See TracChangeset for help on using the changeset viewer.