Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1191)

Unified Diff: src/platform/update_engine/utils.h

Issue 465067: Missed new files in last commit
Patch Set: Created 11 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/platform/update_engine/update_metadata.proto ('k') | src/platform/update_engine/utils.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/platform/update_engine/utils.h
diff --git a/src/platform/update_engine/utils.h b/src/platform/update_engine/utils.h
new file mode 100644
index 0000000000000000000000000000000000000000..e4757832894b728ed01007f8eb09c5bb4b3052c0
--- /dev/null
+++ b/src/platform/update_engine/utils.h
@@ -0,0 +1,184 @@
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_UTILS_H__
+#define CHROMEOS_PLATFORM_UPDATE_ENGINE_UTILS_H__
+
+#include <set>
+#include <string>
+#include <vector>
+#include "update_engine/action.h"
+#include "update_engine/action_processor.h"
+
+namespace chromeos_update_engine {
+
+namespace utils {
+
+// Returns the entire contents of the file at path. Returns true on success.
+bool ReadFile(const std::string& path, std::vector<char>* out);
+bool ReadFileToString(const std::string& path, std::string* out);
+
+std::string ErrnoNumberAsString(int err);
+
+// Strips duplicate slashes, and optionally removes all trailing slashes.
+// Does not compact /./ or /../.
+std::string NormalizePath(const std::string& path, bool strip_trailing_slash);
+
+// Returns true if the file exists for sure. Returns false if it doesn't exist,
+// or an error occurs.
+bool FileExists(const char* path);
+
+// The last 6 chars of path must be XXXXXX. They will be randomly changed
+// and a non-existent path will be returned. Intentionally makes a copy
+// of the string passed in.
+// NEVER CALL THIS FUNCTION UNLESS YOU ARE SURE
+// THAT YOUR PROCESS WILL BE THE ONLY THING WRITING FILES IN THIS DIRECTORY.
+std::string TempFilename(string path);
+
+// Deletes a directory and all its contents synchronously. Returns true
+// on success. This may be called with a regular file--it will just unlink it.
+// This WILL cross filesystem boundaries.
+bool RecursiveUnlinkDir(const std::string& path);
+
+// Synchronously mount or unmount a filesystem. Return true on success.
+// Mounts as ext3 with default options.
+bool MountFilesystem(const string& device, const string& mountpoint);
+bool UnmountFilesystem(const string& mountpoint);
+
+// Log a string in hex to LOG(INFO). Useful for debugging.
+void HexDumpArray(const unsigned char* const arr, const size_t length);
+inline void HexDumpString(const std::string& str) {
+ HexDumpArray(reinterpret_cast<const unsigned char*>(str.data()), str.size());
+}
+inline void HexDumpVector(const std::vector<char>& vect) {
+ HexDumpArray(reinterpret_cast<const unsigned char*>(&vect[0]), vect.size());
+}
+
+extern const string kStatefulPartition;
+
+bool StringHasSuffix(const std::string& str, const std::string& suffix);
+bool StringHasPrefix(const std::string& str, const std::string& prefix);
+
+template<typename KeyType, typename ValueType>
+bool MapContainsKey(const std::map<KeyType, ValueType>& m, const KeyType& k) {
+ return m.find(k) != m.end();
+}
+
+template<typename ValueType>
+std::set<ValueType> SetWithValue(const ValueType& value) {
+ std::set<ValueType> ret;
+ ret.insert(value);
+ return ret;
+}
+
+// Returns the currently booted device. "/dev/sda1", for example.
+// This will not interpret LABEL= or UUID=. You'll need to use findfs
+// or something with equivalent funcionality to interpret those.
+const std::string BootDevice();
+
+} // namespace utils
+
+// Class to unmount FS when object goes out of scope
+class ScopedFilesystemUnmounter {
+ public:
+ explicit ScopedFilesystemUnmounter(const std::string& mountpoint)
+ : mountpoint_(mountpoint) {}
+ ~ScopedFilesystemUnmounter() {
+ utils::UnmountFilesystem(mountpoint_);
+ }
+ private:
+ const std::string mountpoint_;
+};
+
+// Utility class to close a file descriptor
+class ScopedFdCloser {
+ public:
+ explicit ScopedFdCloser(int* fd) : fd_(fd), should_close_(true) {}
+ void set_should_close(bool should_close) { should_close_ = should_close; }
+ ~ScopedFdCloser() {
+ if (!should_close_)
+ return;
+ if (fd_ && (*fd_ >= 0)) {
+ close(*fd_);
+ *fd_ = -1;
+ }
+ }
+ private:
+ int* fd_;
+ bool should_close_;
+};
+
+// A little object to call ActionComplete on the ActionProcessor when
+// it's destructed.
+class ScopedActionCompleter {
+ public:
+ explicit ScopedActionCompleter(ActionProcessor* processor,
+ AbstractAction* action)
+ : processor_(processor),
+ action_(action),
+ success_(false),
+ should_complete_(true) {}
+ ~ScopedActionCompleter() {
+ if (should_complete_)
+ processor_->ActionComplete(action_, success_);
+ }
+ void set_success(bool success) {
+ success_ = success;
+ }
+ void set_should_complete(bool should_complete) {
+ should_complete_ = should_complete;
+ }
+ private:
+ ActionProcessor* processor_;
+ AbstractAction* action_;
+ bool success_;
+ bool should_complete_;
+ DISALLOW_COPY_AND_ASSIGN(ScopedActionCompleter);
+};
+
+} // namespace chromeos_update_engine
+
+#define TEST_AND_RETURN_FALSE_ERRNO(_x) \
+ do { \
+ bool _success = (_x); \
+ if (!_success) { \
+ std::string _msg = \
+ chromeos_update_engine::utils::ErrnoNumberAsString(errno); \
+ LOG(ERROR) << #_x " failed: " << _msg; \
+ return false; \
+ } \
+ } while (0)
+
+#define TEST_AND_RETURN_FALSE(_x) \
+ do { \
+ bool _success = (_x); \
+ if (!_success) { \
+ LOG(ERROR) << #_x " failed."; \
+ return false; \
+ } \
+ } while (0)
+
+#define TEST_AND_RETURN_ERRNO(_x) \
+ do { \
+ bool _success = (_x); \
+ if (!_success) { \
+ std::string _msg = \
+ chromeos_update_engine::utils::ErrnoNumberAsString(errno); \
+ LOG(ERROR) << #_x " failed: " << _msg; \
+ return; \
+ } \
+ } while (0)
+
+#define TEST_AND_RETURN(_x) \
+ do { \
+ bool _success = (_x); \
+ if (!_success) { \
+ LOG(ERROR) << #_x " failed."; \
+ return; \
+ } \
+ } while (0)
+
+
+
+#endif // CHROMEOS_PLATFORM_UPDATE_ENGINE_UTILS_H__
« no previous file with comments | « src/platform/update_engine/update_metadata.proto ('k') | src/platform/update_engine/utils.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698