]>
cygwin.com Git - cygwin-apps/setup.git/blob - archive_tar_file.cc
dbf84d73fce7df93c31d1dd05f4da9b4d2dcc9ee
2 * Copyright (c) 2001, Robert Collins
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * A copy of the GNU General Public License can be found at
12 * Written by Robert Collins <rbtcollins@hotmail.com>
16 /* An individual stream from a tar archive. */
19 static const char *cvsid
= "\n%%% $Id$\n";
25 #include "zlib/zlib.h"
26 #include "io_stream.h"
29 #include "archive_tar.h"
34 archive_tar_file::archive_tar_file (tar_state
& newstate
):state (newstate
)
38 archive_tar_file::~archive_tar_file ()
40 state
.header_read
= 0;
45 ssize_t
archive_tar_file::read (void *buffer
, size_t len
)
47 /* how many bytes do we want to give the user */
49 want
= std::min (len
, state
.file_length
- state
.file_offset
);
50 /* how many do we need to read after that to line up the file pointer */
52 roundup
= (512 - (want
% 512)) % 512;
56 got
= state
.parent
->read (buffer
, want
);
60 got2
= state
.parent
->read (throwaway
, roundup
);
61 if (got
== want
&& got2
== roundup
)
63 state
.file_offset
+= got
;
68 /* unexpected EOF or read error in the tar parent stream */
69 /* the user can query the parent for the error */
77 /* provide data to (double duh!) */
78 ssize_t
archive_tar_file::write (const void *buffer
, size_t len
)
80 /* write not supported */
84 /* read data without removing it from the class's internal buffer */
85 ssize_t
archive_tar_file::peek (void *buffer
, size_t len
)
88 want
= std::min (len
, state
.file_length
- state
.file_offset
);
92 got
= state
.parent
->peek (buffer
, want
);
99 /* unexpected EOF or read error in the tar parent stream */
100 /* the user can query the parent for the error */
109 archive_tar_file::tell ()
111 return state
.file_offset
;
115 archive_tar_file::seek (long where
, io_stream_seek_t whence
)
117 /* nothing needs seeking here yet. Implement when needed
122 /* try guessing this one */
124 archive_tar_file::error ()
126 return state
.lasterr
;
130 archive_tar_file::get_mtime ()
133 sscanf (state
.tar_header
.mtime
, "%o", &mtime
);
This page took 0.0397 seconds and 5 git commands to generate.