| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405 | 
							- /////////////////////////////////////////////////////////////////////////////
 
- // Name:        tarstrm.h
 
- // Purpose:     interface of wxTar* classes
 
- // Author:      wxWidgets team
 
- // Licence:     wxWindows licence
 
- /////////////////////////////////////////////////////////////////////////////
 
- /** wxTarEntry::GetTypeFlag() values */
 
- enum wxTarType
 
- {
 
-     wxTAR_REGTYPE   = '0',      //!< regular file
 
-     wxTAR_LNKTYPE   = '1',      //!< hard link
 
-     wxTAR_SYMTYPE   = '2',      //!< symbolic link
 
-     wxTAR_CHRTYPE   = '3',      //!< character special
 
-     wxTAR_BLKTYPE   = '4',      //!< block special
 
-     wxTAR_DIRTYPE   = '5',      //!< directory
 
-     wxTAR_FIFOTYPE  = '6',      //!< named pipe
 
-     wxTAR_CONTTYPE  = '7'       //!< contiguous file
 
- };
 
- /** Archive Formats (use wxTAR_PAX, it's backward compatible) used by wxTarEntry */
 
- enum wxTarFormat
 
- {
 
-     wxTAR_USTAR,                //!< POSIX.1-1990 tar format
 
-     wxTAR_PAX                   //!< POSIX.1-2001 tar format
 
- };
 
- /**
 
-     @class wxTarInputStream
 
-     Input stream for reading tar files.
 
-     wxTarInputStream::GetNextEntry() returns a wxTarEntry object containing the
 
-     meta-data for the next entry in the tar (and gives away ownership).
 
-     Reading from the wxTarInputStream then returns the entry's data.
 
-     wxTarInputStream::Eof() becomes @true after an attempt has been made to read
 
-     past the end of the entry's data.
 
-     When there are no more entries, wxTarInputStream::GetNextEntry() returns @NULL
 
-     and sets wxTarInputStream::Eof().
 
-     Tar entries are seekable if the parent stream is seekable. In practice this
 
-     usually means they are only seekable if the tar is stored as a local file and
 
-     is not compressed.
 
-     @library{wxbase}
 
-     @category{archive,streams}
 
-     @see @ref overview_archive_byname
 
- */
 
- class wxTarInputStream : public wxArchiveInputStream
 
- {
 
- public:
 
-     //@{
 
-     /**
 
-         Constructor. In a Unicode build the second parameter @a conv is
 
-         used to translate fields from the standard tar header into Unicode.
 
-         It has no effect on the stream's data. @a conv is only used for the standard
 
-         tar headers, any pax extended headers are always UTF-8 encoded.
 
-         If the parent stream is passed as a pointer then the new filter stream
 
-         takes ownership of it. If it is passed by reference then it does not.
 
-     */
 
-     wxTarInputStream(wxInputStream& stream,
 
-                      wxMBConv& conv = wxConvLocal);
 
-     wxTarInputStream(wxInputStream* stream,
 
-                      wxMBConv& conv = wxConvLocal);
 
-     //@}
 
-     /**
 
-         Closes the current entry.
 
-         On a non-seekable stream reads to the end of the current entry first.
 
-     */
 
-     bool CloseEntry();
 
-     /**
 
-         Closes the current entry if one is open, then reads the meta-data for
 
-         the next entry and returns it in a wxTarEntry object, giving away ownership.
 
-         The stream is then open and can be read.
 
-     */
 
-     wxTarEntry* GetNextEntry();
 
-     /**
 
-         Closes the current entry if one is open, then opens the entry specified
 
-         by the @a entry object.
 
-         @a entry should be from the same tar file, and the tar should be on a
 
-         seekable stream.
 
-     */
 
-     bool OpenEntry(wxTarEntry& entry);
 
- };
 
- /**
 
-     @class wxTarClassFactory
 
-     Class factory for the tar archive format.
 
-     See the base class for details.
 
-     @library{wxbase}
 
-     @category{archive,streams}
 
-     @see @ref overview_archive, @ref overview_archive_generic,
 
-          wxTarEntry, wxTarInputStream, wxTarOutputStream
 
- */
 
- class wxTarClassFactory : public wxArchiveClassFactory
 
- {
 
- public:
 
- };
 
- /**
 
-     @class wxTarOutputStream
 
-     Output stream for writing tar files.
 
-     wxTarOutputStream::PutNextEntry() is used to create a new entry in the output tar,
 
-     then the entry's data is written to the wxTarOutputStream.
 
-     Another call to wxTarOutputStream::PutNextEntry() closes the current entry
 
-     and begins the next.
 
-     @library{wxbase}
 
-     @category{streams}
 
-     @see @ref overview_archive, wxTarEntry, wxTarInputStream
 
- */
 
- class wxTarOutputStream : public wxArchiveOutputStream
 
- {
 
- public:
 
-     //@{
 
-     /**
 
-         If the parent stream is passed as a pointer then the new filter stream
 
-         takes ownership of it. If it is passed by reference then it does not.
 
-         In a Unicode build the third parameter @a conv is used to translate the
 
-         headers fields into an 8-bit encoding. It has no effect on the stream's data.
 
-         When the @a format is @e wxTAR_PAX, pax extended headers are generated
 
-         when any header field will not fit the standard tar header block or if it
 
-         uses any non-ascii characters.
 
-         Extended headers are stored as extra 'files' within the tar, and will be
 
-         extracted as such by any other tar program that does not understand them.
 
-         The @a conv parameter only affect the standard tar headers, the extended
 
-         headers are always UTF-8 encoded.
 
-         When the @a format is @e wxTAR_USTAR, no extended headers are generated,
 
-         and instead a warning message is logged if any header field overflows.
 
-     */
 
-     wxTarOutputStream(wxOutputStream& stream,
 
-                       wxTarFormat format = wxTAR_PAX,
 
-                       wxMBConv& conv = wxConvLocal);
 
-     wxTarOutputStream(wxOutputStream* stream,
 
-                       wxTarFormat format = wxTAR_PAX,
 
-                       wxMBConv& conv = wxConvLocal);
 
-     //@}
 
-     /**
 
-         The destructor calls Close() to finish writing the tar if it has
 
-         not been called already.
 
-     */
 
-     virtual ~wxTarOutputStream();
 
-     /**
 
-         Finishes writing the tar, returning @true if successful.
 
-         Called by the destructor if not called explicitly.
 
-     */
 
-     bool Close();
 
-     /**
 
-         Close the current entry.
 
-         It is called implicitly whenever another new entry is created with
 
-         CopyEntry() or PutNextEntry(), or when the tar is closed.
 
-     */
 
-     bool CloseEntry();
 
-     /**
 
-         See wxArchiveOutputStream::CopyArchiveMetaData().
 
-         For the tar format this function does nothing.
 
-     */
 
-     bool CopyArchiveMetaData(wxTarInputStream& s);
 
-     /**
 
-         Takes ownership of @a entry and uses it to create a new entry in the tar.
 
-         @a entry is then opened in @a inputStream and its contents copied to this stream.
 
-         For some other archive formats CopyEntry() is much more efficient than
 
-         transferring the data using Read() and Write() since it will copy them
 
-         without decompressing and recompressing them.
 
-         For tar however it makes no difference.
 
-         For tars on seekable streams, @a entry must be from the same tar file
 
-         as @a inputStream. For non-seekable streams, @a entry must also be the
 
-         last thing read from @a inputStream.
 
-     */
 
-     bool CopyEntry(wxTarEntry* entry, wxTarInputStream& inputStream);
 
-     //@{
 
-     /**
 
-         The tar is zero padded to round its size up to @e BlockingFactor * 512 bytes.
 
-         The blocking factor defaults to 10 for @e wxTAR_PAX and 20 for @e wxTAR_USTAR
 
-         (see wxTarOutputStream()), as specified in the POSIX standards.
 
-     */
 
-     int GetBlockingFactor() const;
 
-     void SetBlockingFactor(int factor);
 
-     //@}
 
-     /**
 
-         Create a new directory entry (see wxArchiveEntry::IsDir()) with the given
 
-         name and timestamp.
 
-         PutNextEntry() can also be used to create directory entries, by supplying
 
-         a name with a trailing path separator.
 
-     */
 
-     bool PutNextDirEntry(const wxString& name, const wxDateTime& dt = wxDateTime::Now());
 
-     /**
 
-         Takes ownership of entry and uses it to create a new entry in the tar.
 
-     */
 
-     bool PutNextEntry(wxTarEntry* entry);
 
-     /**
 
-         Create a new entry with the given name, timestamp and size.
 
-     */
 
-     bool PutNextEntry(const wxString& name, const wxDateTime& dt = wxDateTime::Now(),
 
-                       wxFileOffset size = wxInvalidOffset);
 
- };
 
- /**
 
-     @class wxTarEntry
 
-     Holds the meta-data for an entry in a tar.
 
-     @section tarentry_fields Field availability
 
-     The tar format stores all the meta-data for an entry ahead of its data,
 
-     therefore GetNextEntry() always returns a fully populated wxTarEntry object,
 
-     both when reading from seekable and non-seekable streams.
 
-     @library{wxbase}
 
-     @category{archive,streams}
 
-     @see @ref overview_archive, wxTarInputStream, wxTarOutputStream
 
- */
 
- class wxTarEntry : public wxArchiveEntry
 
- {
 
- public:
 
-     /**
 
-         Constructor.
 
-         The tar archive format stores the entry's size ahead of the entry's data.
 
-         Therefore when creating an archive on a non-seekable stream it is necessary
 
-         to supply the correct size when each entry is created.
 
-     */
 
-     wxTarEntry(const wxString& name = wxEmptyString,
 
-                const wxDateTime& dt = wxDateTime::Now(),
 
-                wxFileOffset size = wxInvalidOffset);
 
-     /**
 
-         Copy constructor.
 
-     */
 
-     wxTarEntry(const wxTarEntry& entry);
 
-     //@{
 
-     /**
 
-         Gets/sets the entry's access time stamp.
 
-         See also wxArchiveEntry::GetDateTime() and wxArchiveEntry::SetDateTime().
 
-     */
 
-     wxDateTime GetAccessTime() const;
 
-     void SetAccessTime(const wxDateTime& dt);
 
-     //@}
 
-     //@{
 
-     /**
 
-         The entry's creation time stamp.
 
-         See also wxArchiveEntry::GetDateTime() and wxArchiveEntry::SetDateTime().
 
-     */
 
-     wxDateTime GetCreateTime() const;
 
-     void SetCreateTime(const wxDateTime& dt);
 
-     //@}
 
-     //@{
 
-     /**
 
-         OS specific IDs defining a device; these are only meaningful when
 
-         wxTarEntry::GetTypeFlag() is @e wxTAR_CHRTYPE or @e wxTAR_BLKTYPE.
 
-     */
 
-     int GetDevMajor() const;
 
-     int GetDevMinor() const;
 
-     void SetDevMajor(int dev);
 
-     void SetDevMinor(int dev);
 
-     //@}
 
-     //@{
 
-     /**
 
-         The user ID and group ID that has permissions (see wxTarEntry::GetMode())
 
-         over this entry.
 
-         These values aren't usually useful unless the file will only be
 
-         restored to the same system it originated from.
 
-         wxTarEntry::GetGroupName() and wxTarEntry::GetUserName() can be used instead.
 
-     */
 
-     int GetGroupId() const;
 
-     int GetUserId() const;
 
-     void SetGroupId(int id);
 
-     void SetUserId(int id);
 
-     //@}
 
-     //@{
 
-     /**
 
-         The names of the user and group that has permissions (see wxTarEntry::GetMode())
 
-         over this entry. These are not present in very old tars.
 
-     */
 
-     wxString GetGroupName() const;
 
-     wxString GetUserName() const;
 
-     void SetGroupName(const wxString& group);
 
-     void SetUserName(const wxString& user);
 
-     //@}
 
-     //@{
 
-     /**
 
-         The filename of a previous entry in the tar that this entry is a link to.
 
-         Only meaningful when wxTarEntry::GetTypeFlag() is set to @e wxTAR_LNKTYPE
 
-         or @e wxTAR_SYMTYPE.
 
-     */
 
-     wxString GetLinkName() const;
 
-     void SetLinkName(const wxString& link);
 
-     //@}
 
-     //@{
 
-     /**
 
-         UNIX permission bits for this entry.
 
-         Giving read, write and execute permissions to the file's user and group
 
-         (see GetGroupName() and GetUserName()) and to others.
 
-         The integer is one or more ::wxPosixPermissions flags OR-combined.
 
-     */
 
-     int GetMode() const;
 
-     void SetMode(int mode);
 
-     //@}
 
-     //@{
 
-     /**
 
-         The size of the entry's data in bytes.
 
-         The tar archive format stores the entry's size ahead of the entry's data.
 
-         Therefore when creating an archive on a non-seekable stream it is necessary to
 
-         supply the correct size when each entry is created.
 
-         For seekable streams this is not necessary as wxTarOutputStream will attempt
 
-         to seek back and fix the entry's header when the entry is closed, though it is
 
-         still more efficient if the size is given beforehand.
 
-     */
 
-     void SetSize(wxFileOffset size);
 
-     wxFileOffset GetSize() const;
 
-     //@}
 
-     //@{
 
-     /**
 
-         Returns/Sets the type of the entry as a ::wxTarType value.
 
-         When creating archives use only one of ::wxTarType values.
 
-         When reading archives, GetTypeFlag() may return a value which does not
 
-         match any value of ::wxTarType; in this case the returned value should be
 
-         treated as @e wxTAR_REGTYPE.
 
-     */
 
-     int GetTypeFlag() const;
 
-     void SetTypeFlag(int type);
 
-     //@}
 
-     /**
 
-         Returns the entry's filename in the internal format used within the archive.
 
-         The name can include directory components, i.e. it can be a full path.
 
-         The names of directory entries are returned without any trailing path separator.
 
-         This gives a canonical name that can be used in comparisons.
 
-     */
 
-     wxString GetInternalName() const;
 
-     /**
 
-         A static member that translates a filename into the internal format used
 
-         within the archive.
 
-         If the third parameter is provided, the bool pointed to is set to indicate
 
-         whether the name looks like a directory name (i.e. has a trailing path separator).
 
-     */
 
-     static wxString GetInternalName(const wxString& name,
 
-                                     wxPathFormat format = wxPATH_NATIVE,
 
-                                     bool* pIsDir = NULL);
 
-     /**
 
-         Assignment operator.
 
-     */
 
-     wxTarEntry& operator operator=(const wxTarEntry& entry);
 
- };
 
 
  |