Index: base/file.h |
diff --git a/base/file.h b/base/file.h |
deleted file mode 100644 |
index ca266ef7adcee26a3da0eba84549942d472495ee..0000000000000000000000000000000000000000 |
--- a/base/file.h |
+++ /dev/null |
@@ -1,249 +0,0 @@ |
-// Copyright 2003-2009 Google Inc. |
-// |
-// Licensed under the Apache License, Version 2.0 (the "License"); |
-// you may not use this file except in compliance with the License. |
-// You may obtain a copy of the License at |
-// |
-// http://www.apache.org/licenses/LICENSE-2.0 |
-// |
-// Unless required by applicable law or agreed to in writing, software |
-// distributed under the License is distributed on an "AS IS" BASIS, |
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-// See the License for the specific language governing permissions and |
-// limitations under the License. |
-// ======================================================================== |
-// File handling routines |
-// |
-// encryption is not currently active |
-// |
-#ifndef OMAHA_BASE_FILE_H_ |
-#define OMAHA_BASE_FILE_H_ |
- |
-#include <windows.h> |
-#include <vector> |
-#include "base/basictypes.h" |
-#include "omaha/base/scoped_any.h" |
-#include "omaha/base/store_watcher.h" |
- |
-namespace omaha { |
- |
-class File { |
- public: |
- |
- File(); |
- ~File(); |
- |
- HRESULT Open(const TCHAR* file_name, bool write, bool async); |
- HRESULT OpenShareMode(const TCHAR* file_name, |
- bool write, |
- bool async, |
- DWORD share_mode); |
- |
- HRESULT Close(); |
- |
- static bool Exists(const TCHAR* file_name); |
- static bool IsDirectory(const TCHAR *file_name); |
- static HRESULT GetWildcards(const TCHAR* dir, const TCHAR* wildcard, |
- std::vector<CString>* matching_paths); |
- // returns S_OK on successful removal or if not existing |
- static HRESULT Remove(const TCHAR* file_name); |
- // CopyWildcards doesn't work recursively |
- static HRESULT CopyWildcards(const TCHAR* from_dir, const TCHAR* to_dir, |
- const TCHAR* wildcard, |
- bool replace_existing_files); |
- static HRESULT CopyTree(const TCHAR* from_dir, const TCHAR* to_dir, |
- bool replace_existing_files); |
- // to_dir need not exist |
- static HRESULT Copy(const TCHAR* from, const TCHAR* to, |
- bool replace_existing_file); |
- static HRESULT Move(const TCHAR* from, const TCHAR* to, |
- bool replace_existing_file); |
- // DeleteAfterReboot tries to delete the files by either moving them to |
- // the TEMP directory and deleting them on reboot, or if that fails, by |
- // trying to delete them in-place on reboot |
- static HRESULT DeleteAfterReboot(const TCHAR* from); |
- static HRESULT MoveAfterReboot(const TCHAR* from, const TCHAR* to); |
- // Remove any moves pending a reboot from the PendingFileRenameOperations |
- // in the registry. |
- // The prefix_match boolean controls whether we do an exact match on |
- // in_directory, or remove all entries with the in_directory prefix. |
- static HRESULT RemoveFromMovesPendingReboot(const TCHAR* in_directory, |
- bool prefix_match); |
- // Did the user try to uninstall a previous install of the same version, |
- // and we couldn't clean up without a reboot? |
- // We check if there are any moves pending a reboot from the |
- // PendingFileRenameOperations in the registry. |
- // The prefix_match boolean controls whether we do an exact match on |
- // in_directory, or check all entries with the in_directory prefix. |
- static bool AreMovesPendingReboot(const TCHAR* in_directory, |
- bool prefix_match); |
- |
- // The GetFileTime function retrieves the date and time that a file was |
- // created, last accessed, and last modified. The parameters 'created', |
- // 'accessed', 'modified' can be null if the caller does not require that |
- // information. All times are utc |
- // (http://support.microsoft.com/default.aspx?scid=kb;%5BLN%5D;158588) |
- // To compare FILETIME values, use CompareFileTime API. |
- static HRESULT GetFileTime(const TCHAR* file_name, FILETIME* created, |
- FILETIME* accessed, FILETIME* modified); |
- |
- // Sets the file time |
- static HRESULT SetFileTime(const TCHAR* file_name, |
- const FILETIME* created, |
- const FILETIME* accessed, |
- const FILETIME* modified); |
- |
- // sync flushes any pending writes to disk |
- HRESULT Sync(); |
- // static HRESULT SyncAllFiles(); |
- |
- HRESULT SeekToBegin(); |
- HRESULT SeekFromBegin(uint32 n); |
- |
- HRESULT ReadFromStartOfFile(const uint32 max_len, byte *buf, |
- uint32 *bytes_read); |
- HRESULT ReadLineAnsi(uint32 max_len, char *line, uint32 *len); |
- |
- // read len bytes, reading 0 bytes is invalid |
- HRESULT Read(const uint32 len, byte *buf, uint32 *bytes_read); |
- // read len bytes starting at position n, reading 0 bytes is invalid |
- HRESULT ReadAt(const uint32 offset, byte *buf, const uint32 len, |
- const uint32 async_id, uint32 *bytes_read); |
- |
- // write len bytes, writing 0 bytes is invalid |
- HRESULT Write(const byte *buf, const uint32 len, uint32 *bytes_written); |
- // write len bytes, writing 0 bytes is invalid |
- HRESULT WriteAt(const uint32 offset, const byte *buf, const uint32 len, |
- const uint32 async_id, uint32 *bytes_written); |
- |
- // write buffer n times |
- HRESULT WriteN(const byte *buf, const uint32 len, const uint32 n, |
- uint32 *bytes_written); |
- |
- // zeros section of file |
- HRESULT ClearAt(const uint32 offset, const uint32 len, |
- uint32 *bytes_written); |
- |
- // set length of file |
- // if new length is greater than current length, new data is undefined |
- // unless zero_data == true in which case the new data is zeroed. |
- HRESULT SetLength(const uint32 n, bool zero_data); |
- HRESULT ExtendInBlocks(const uint32 block_size, uint32 size_needed, |
- uint32 *new_size, bool clear_new_space); |
- HRESULT GetLength(uint32 *len); |
- |
- // Sets the last write time to the current time |
- HRESULT Touch(); |
- |
- // all the data storage classes contain these functions |
- // we implemenent them here for consistency |
- // e.g., so we can do object->GetSizeOnDisk independent of the object type |
- HRESULT GetSizeOnDisk(uint64 *size_on_disk); |
- HRESULT GetReloadDiskSpaceNeeded(uint64 *bytes_needed); |
- HRESULT Reload(uint32 *number_errors); |
- HRESULT Verify(uint32 *number_errors); |
- HRESULT Dump(); |
- |
- // Gets the size of a file, without opening it [the regular GetFileSize |
- // requires a file handle, which conflicts if the file is already opened |
- // and locked] |
- static HRESULT GetFileSizeUnopen(const TCHAR * filename, |
- uint32 * out_size); |
- |
- // Optimized function that gets the last write time and size |
- static HRESULT GetLastWriteTimeAndSize(const TCHAR* file_path, |
- SYSTEMTIME* out_time, |
- unsigned int* out_size); |
- |
- // Returns true if the two files are binary-identical. |
- static bool AreFilesIdentical(const TCHAR* filename1, |
- const TCHAR* filename2); |
- |
- private: |
- // See if we have any moves pending a reboot. Return SUCCESS if we do |
- // not encounter errors (not finding a move is not an error). We need to |
- // also check the value of *found_ptr for whether we actually found a move. |
- // On return, *value_multisz_ptr is the value within |
- // "PendingFileRenameOperations", but with any moves for in_directory |
- // removed from it. |
- // The prefix_match boolean controls whether we do an exact match on |
- // in_directory, or remove all entries with the in_directory prefix. |
- // NOTE: If the only values found were our own keys, the whole |
- // PendingFileRenameOperations MULTISZ needs to be deleted. This is |
- // signified by a returned *value_size_chars_ptr of 0. |
- static HRESULT GetPendingRenamesValueMinusDir(const TCHAR* in_directory, |
- bool prefix_match, TCHAR** value_multisz_ptr, DWORD* value_size_chars_ptr, |
- bool* found_ptr); |
- |
- HANDLE handle_; |
- CString file_name_; |
- bool read_only_; |
- bool sync_write_done_; |
- uint32 pos_; |
- uint32 encryption_seed_; |
- uint32 sequence_id_; |
- enum EncryptionTypes encryption_; |
- |
- static const int kMaxFileSize = kint32max; |
- |
- DISALLOW_EVIL_CONSTRUCTORS(File); |
-}; |
- |
-// File lock |
-class FileLock { |
- public: |
- // Default constructor |
- FileLock(); |
- |
- // Destructor |
- ~FileLock(); |
- |
- // Lock a single file |
- HRESULT Lock(const TCHAR* file); |
- |
- // Lock multiple files (atomic) |
- HRESULT Lock(const std::vector<CString>& files); |
- |
- // Unlock all |
- HRESULT Unlock(); |
- |
- private: |
- std::vector<HANDLE> handles_; |
- |
- DISALLOW_EVIL_CONSTRUCTORS(FileLock); |
-}; |
- |
- |
-// Does the common things necessary for watching |
-// changes in a directory. If there are file change or other watchers, |
-// there could be a common interface for the three methods to decouple |
-// the code that is doing the watching from the code that owns the store. |
-class FileWatcher : public StoreWatcher { |
- public: |
- // path_name: the directory to watch |
- // watch_subtree: watch all subdirectory changes or |
- // only immediate child values |
- // notify_filter: See the documentation for FindFirstChangeNotification |
- FileWatcher(const TCHAR* path_name, bool watch_subtree, DWORD notify_filter); |
- |
- // Called to create/reset the event that gets signaled |
- // any time the store changes. Access the created |
- // event using change_event(). |
- virtual HRESULT EnsureEventSetup(); |
- |
- // Get the event that is signaled on store changes. |
- virtual HANDLE change_event() const; |
- |
- private: |
- scoped_hfind_change_notification change_event_; |
- CString path_name_; |
- bool watch_subtree_; |
- DWORD notify_filter_; |
- |
- DISALLOW_EVIL_CONSTRUCTORS(FileWatcher); |
-}; |
- |
-} // namespace omaha |
- |
-#endif // OMAHA_BASE_FILE_H_ |
- |