File: rx_deb

package info (click to toggle)
vfu 4.06-3
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 2,088 kB
  • ctags: 2,184
  • sloc: cpp: 14,482; ansic: 4,091; perl: 581; makefile: 540; sh: 57
file content (106 lines) | stat: -rwxr-xr-x 2,932 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!/usr/bin/perl
#############################################################################
#
# rx_* dispatcher and handlers for VFU File Manager
# (c) Vladi Belperchinov-Shabanski "Cade" 2002 
# <cade@biscom.net> <cade.datamax.bg> http://cade.webbg.com
# $Id: rx_deb,v 1.4 2002/11/07 23:22:21 cade Exp $
#
# usage:
#   rx_* l archive directory   # list archive directory 
#   rx_* v archive             # list entire archive
#   rx_* x archive files...    # extract one file
#   rx_* x archive @listfile   # extract list of files
#
#############################################################################
use strict;

my $cmd = lc shift @ARGV;
my $archive = shift @ARGV;
my $cache = "$archive.data.tar.gz.rx.cache";
$cache =~ s/^(.+)\/([^\/]+)$/$2/;

if ( $cmd eq "l" || $cmd eq "v" || $cmd eq "x" )
   {
   if( ! -e "/tmp/$cache" )
     {
     # cache not found--fill it
     system( "ar p \"$archive\" data.tar.gz > \"/tmp/$cache\"" );
     chmod oct(600), "/tmp/$cache"; # a bit late but still... :)
     }
   else
     {
     utime time(), time(), "/tmp/$cache"; # update last modification time of the cache
     }  
  
  chdir( "/tmp" );
  system( "/usr/lib/vfu/rx_tar", $cmd, $cache, @ARGV );
  }
else
  {
  die $0 . ": wrong command.\n";
  }

=pod
if ( $command eq "v" )
   {
   $dir = shift @ARGV;
   if ( $dir ) { $dir .= "/" unless $dir =~ /\/$/; }

   if ( $dir eq "DATA/" )
     {
     open( i, "ar p $archive data.tar.gz | gzip -dc | tar tvf - |");
     while(<i>)
       {
       chop;
       s/\s+->\s+\S+$//;
       if (/^(.[\-rwxsStT]{9})\s+\S+\s+(\d+)\s+(\d\d\d\d)-(\d\d)-(\d\d) (\d\d):(\d\d)\s+(\S+[^\/])$/)
         {
         print "NAME:$8\nSIZE:$2\nMODE:$1\nTIME:$3$4$5$6$7\n\n";
         }
       elsif (/^(.[\-rwxsStT]{9})\s+\S+\s+(\d+)\s+(\d\d\d\d)-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)\s+(\S+[^\/])$/)
         {
         print "NAME:$9\nSIZE:$2\nMODE:$1\nTIME:$3$4$5$6$7\n\n";
         }
       }
     close( i );
     }
   else
     {
     # these are standard ones
     print "NAME:control\n\nNAME:debian-binary\n\nNAME:DATA/\n\n";
     # FIXME: here should take ar list and get files' sizes etc...
     }
   } # view command ends here
elsif ( $command eq "x" )
   {
   if ( $ARGV[0] eq "control" )
      {
      system( "ar p $archive control.tar.gz | gzip -d | tar xvf - control" );
      }
    elsif ( $ARGV[0] eq "debian-binary" )
      {
      system( "ar p $archive debian-binary > debian-binary" );
      }
    else
      {
      if ( $ARGV[0] =~ /^\@(.+)$/ )
        {
        $listfile = $1;
        }
      else
        {
        $listfile = "/tmp/rx_tar.list." . $$;
        open( o, ">$listfile" );
        while( $_ = shift @ARGV )
          {
          s/^DATA\///;
          print o "$_\n";
          }
        close( o );
        }
      system( "mkdir -p DATA; cd DATA; ar p $archive data.tar.gz | gzip -d | tar xvf - -T $listfile" );
      unlink $listfile;
      }
   }
=cut