123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- // Copyright 2015 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.
- #include "chromecast/base/error_codes.h"
- #include <errno.h>
- #include <fcntl.h>
- #include <string>
- #include "base/files/file_util.h"
- #include "base/logging.h"
- #include "base/strings/string_number_conversions.h"
- #include "chromecast/base/path_utils.h"
- namespace chromecast {
- namespace {
- const char kInitialErrorFile[] = "initial_error";
- base::FilePath GetInitialErrorFilePath() {
- return GetHomePathASCII(kInitialErrorFile);
- }
- } // namespace
- ErrorCode GetInitialErrorCode() {
- std::string initial_error_code_str;
- if (!base::ReadFileToString(GetInitialErrorFilePath(),
- &initial_error_code_str)) {
- return NO_ERROR;
- }
- int initial_error_code = 0;
- if (base::StringToInt(initial_error_code_str, &initial_error_code) &&
- initial_error_code >= NO_ERROR && initial_error_code <= ERROR_UNKNOWN) {
- DVLOG(1) << "Initial error from " << GetInitialErrorFilePath().value()
- << ": " << initial_error_code;
- return static_cast<ErrorCode>(initial_error_code);
- }
- LOG(ERROR) << "Unknown initial error code: " << initial_error_code_str;
- return NO_ERROR;
- }
- bool SetInitialErrorCode(ErrorCode initial_error_code) {
- // Note: Do not use Chromium IO methods in this function. When cast_shell
- // crashes, this function can be called by any thread.
- const std::string error_file_path = GetInitialErrorFilePath().value();
- if (initial_error_code > NO_ERROR && initial_error_code <= ERROR_UNKNOWN) {
- const std::string initial_error_code_str(
- base::NumberToString(initial_error_code));
- int fd = creat(error_file_path.c_str(), 0640);
- if (fd < 0) {
- PLOG(ERROR) << "Could not open error code file";
- return false;
- }
- int written =
- write(fd, initial_error_code_str.data(), initial_error_code_str.size());
- if (written != static_cast<int>(initial_error_code_str.size())) {
- PLOG(ERROR) << "Could not write error code to file: written=" << written
- << ", expected=" << initial_error_code_str.size();
- close(fd);
- return false;
- }
- close(fd);
- return true;
- }
- // Remove initial error file if no error.
- if (unlink(error_file_path.c_str()) == 0 || errno == ENOENT)
- return true;
- PLOG(ERROR) << "Failed to remove error file";
- return false;
- }
- } // namespace chromecast
|