| // Copyright (c) 2014 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chromiumos-wide-profiling/scoped_temp_path.h" |
| |
| #include <errno.h> |
| #include <unistd.h> |
| |
| #include <cstdio> |
| #include <cstdlib> |
| |
| #include "base/logging.h" |
| |
| // Temporary paths follow this format, with the X's replaced by letters or |
| // digits. This cannot be defined as a const variable because mkstemp() and |
| // mkdtemp() requires an initialized but variable string as an argument. |
| #define TEMP_PATH_STRING "/tmp/quipper.XXXXXX" |
| |
| namespace quipper { |
| |
| ScopedTempFile::ScopedTempFile() { |
| char filename[] = TEMP_PATH_STRING; |
| int fd = mkstemp(filename); |
| if (fd == -1) |
| return; |
| close(fd); |
| path_ = filename; |
| } |
| |
| ScopedTempDir::ScopedTempDir() { |
| char dirname[] = TEMP_PATH_STRING; |
| const char* name = mkdtemp(dirname); |
| if (!name) |
| return; |
| path_ = string(name) + "/"; |
| } |
| |
| ScopedTempPath::~ScopedTempPath() { |
| if (!path_.empty() && remove(path_.c_str())) |
| LOG(ERROR) << "Error while removing " << path_ << ", errno: " << errno; |
| } |
| |
| } // namespace quipper |