OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2009, Google Inc. | 2 * Copyright 2009, Google Inc. |
3 * All rights reserved. | 3 * All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
7 * met: | 7 * met: |
8 * | 8 * |
9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 29 matching lines...) Expand all Loading... |
40 // As a TarProcessor receives bytes, it calls the client | 40 // As a TarProcessor receives bytes, it calls the client |
41 // callback method ReceiveFileHeader() when each complete file header has been | 41 // callback method ReceiveFileHeader() when each complete file header has been |
42 // received. Then the client's ReceiveFileData() will be called (possibly | 42 // received. Then the client's ReceiveFileData() will be called (possibly |
43 // repeatedly) as the file's data is received. This is repeated until all of | 43 // repeatedly) as the file's data is received. This is repeated until all of |
44 // the files in the archive have been processed. | 44 // the files in the archive have been processed. |
45 | 45 |
46 #ifndef O3D_IMPORT_CROSS_TAR_PROCESSOR_H_ | 46 #ifndef O3D_IMPORT_CROSS_TAR_PROCESSOR_H_ |
47 #define O3D_IMPORT_CROSS_TAR_PROCESSOR_H_ | 47 #define O3D_IMPORT_CROSS_TAR_PROCESSOR_H_ |
48 | 48 |
49 #include "base/basictypes.h" | 49 #include "base/basictypes.h" |
| 50 #include "core/cross/types.h" |
50 #include "import/cross/memory_stream.h" | 51 #include "import/cross/memory_stream.h" |
51 #include "import/cross/archive_processor.h" | 52 #include "import/cross/archive_processor.h" |
52 | 53 |
53 namespace o3d { | 54 namespace o3d { |
54 | 55 |
55 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 56 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
56 class TarProcessor : public StreamProcessor { | 57 class TarProcessor : public StreamProcessor { |
57 public: | 58 public: |
58 explicit TarProcessor(ArchiveCallbackClient *callback_client) | 59 explicit TarProcessor(ArchiveCallbackClient *callback_client) |
59 : callback_client_(callback_client), | 60 : callback_client_(callback_client), |
60 header_bytes_read_(0), | 61 header_bytes_read_(0), |
| 62 getting_filename_(false), |
61 file_bytes_to_read_(0) {} | 63 file_bytes_to_read_(0) {} |
62 | 64 |
63 virtual ~TarProcessor() {} | 65 virtual ~TarProcessor() {} |
64 | 66 |
65 // Call to "push" bytes to be processed - the appropriate callback will get | 67 // Call to "push" bytes to be processed - the appropriate callback will get |
66 // called when we have enough data | 68 // called when we have enough data |
67 virtual int ProcessBytes(MemoryReadStream *stream, size_t n); | 69 virtual int ProcessBytes(MemoryReadStream *stream, size_t n); |
68 | 70 |
69 private: | 71 private: |
70 enum {TAR_HEADER_SIZE = 512}; | 72 enum {TAR_HEADER_SIZE = 512}; |
71 enum {TAR_BLOCK_SIZE = 512}; | 73 enum {TAR_BLOCK_SIZE = 512}; |
72 | 74 |
73 ArchiveCallbackClient *callback_client_; | 75 ArchiveCallbackClient *callback_client_; |
74 size_t header_bytes_read_; | 76 size_t header_bytes_read_; |
75 char header_[TAR_HEADER_SIZE]; | 77 char header_[TAR_HEADER_SIZE]; |
| 78 bool getting_filename_; |
| 79 String file_name_; |
76 | 80 |
77 // Initialized to total number of file bytes, | 81 // Initialized to total number of file bytes, |
78 // including zero padding up to block size | 82 // including zero padding up to block size |
79 // We read this many bytes to get to the next header | 83 // We read this many bytes to get to the next header |
80 size_t file_bytes_to_read_; | 84 size_t file_bytes_to_read_; |
81 | 85 |
82 // Initialized to the actual file size (not counting zero-padding) - keeps | 86 // Initialized to the actual file size (not counting zero-padding) - keeps |
83 // track of number of bytes the client needs to read for the current file | 87 // track of number of bytes the client needs to read for the current file |
84 size_t client_file_bytes_to_read_; | 88 size_t client_file_bytes_to_read_; |
85 | 89 |
86 DISALLOW_COPY_AND_ASSIGN(TarProcessor); | 90 DISALLOW_COPY_AND_ASSIGN(TarProcessor); |
87 }; | 91 }; |
88 | 92 |
89 } // namespace o3d | 93 } // namespace o3d |
90 | 94 |
91 #endif // O3D_IMPORT_CROSS_TAR_PROCESSOR_H_ | 95 #endif // O3D_IMPORT_CROSS_TAR_PROCESSOR_H_ |
OLD | NEW |