Magellan Linux

Diff of /trunk/mkinitrd-magellan/busybox/archival/libunarchive/get_header_tar_gz.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 815 by niro, Sat Sep 1 22:45:15 2007 UTC revision 816 by niro, Fri Apr 24 18:33:46 2009 UTC
# Line 3  Line 3 
3   * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.   * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
4   */   */
5    
 #include <stdlib.h>  
   
6  #include "libbb.h"  #include "libbb.h"
7  #include "unarchive.h"  #include "unarchive.h"
8    
9  char get_header_tar_gz(archive_handle_t *archive_handle)  char FAST_FUNC get_header_tar_gz(archive_handle_t *archive_handle)
10  {  {
11    #if BB_MMU
12   unsigned char magic[2];   unsigned char magic[2];
13    #endif
14    
15   /* Can't lseek over pipes */   /* Can't lseek over pipes */
16   archive_handle->seek = seek_by_read;   archive_handle->seek = seek_by_read;
17    
18     /* Check gzip magic only if open_transformer will invoke unpack_gz_stream (MMU case).
19     * Otherwise, it will invoke an external helper "gunzip -cf" (NOMMU case) which will
20     * need the header. */
21    #if BB_MMU
22   xread(archive_handle->src_fd, &magic, 2);   xread(archive_handle->src_fd, &magic, 2);
23     /* Can skip this check, but error message will be less clear */
24   if ((magic[0] != 0x1f) || (magic[1] != 0x8b)) {   if ((magic[0] != 0x1f) || (magic[1] != 0x8b)) {
25   bb_error_msg_and_die("invalid gzip magic");   bb_error_msg_and_die("invalid gzip magic");
26   }   }
27    #endif
28    
29   check_header_gzip(archive_handle->src_fd);   open_transformer(archive_handle->src_fd, unpack_gz_stream, "gunzip");
   
  archive_handle->src_fd = open_transformer(archive_handle->src_fd, inflate_gunzip);  
30   archive_handle->offset = 0;   archive_handle->offset = 0;
31   while (get_header_tar(archive_handle) == EXIT_SUCCESS) /**/;   while (get_header_tar(archive_handle) == EXIT_SUCCESS)
32     continue;
33    
34   /* Can only do one file at a time */   /* Can only do one file at a time */
35   return EXIT_FAILURE;   return EXIT_FAILURE;

Legend:
Removed from v.815  
changed lines
  Added in v.816