4679a39610
Let's use LOG(FATAL)/PLOG(FATAL) for actual fatal stuff. Add a Windows error(3) and move folks who didn't really mean "abort" fatal over to it. Also get rid of syntax_error which wasn't adding a lot of value, and most of the places it was adding "usage: " didn't seem entirely appropriate anyway. In particular, we seemed to have confused fastdeploy.cpp into aborting in most user error cases, and none of the reviewers noticed. Clearly we'd all lost track of far too many options. (I've also cleaned up a few random instances of fprintf(3) + exit(2).) Bug: N/A Test: manual Change-Id: I3e8440848a24e30d928de9eded505916bc324786
96 lines
2.5 KiB
C++
96 lines
2.5 KiB
C++
/*
|
|
* Copyright (C) 2015 The Android Open Source Project
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
#ifndef _ADB_UTILS_H_
|
|
#define _ADB_UTILS_H_
|
|
|
|
#include <condition_variable>
|
|
#include <mutex>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include <android-base/macros.h>
|
|
|
|
#include "adb.h"
|
|
|
|
void close_stdin();
|
|
|
|
bool getcwd(std::string* cwd);
|
|
bool directory_exists(const std::string& path);
|
|
|
|
// Return the user's home directory.
|
|
std::string adb_get_homedir_path();
|
|
|
|
// Return the adb user directory.
|
|
std::string adb_get_android_dir_path();
|
|
|
|
bool mkdirs(const std::string& path);
|
|
|
|
std::string escape_arg(const std::string& s);
|
|
|
|
std::string dump_hex(const void* ptr, size_t byte_count);
|
|
std::string dump_header(const amessage* msg);
|
|
std::string dump_packet(const char* name, const char* func, const apacket* p);
|
|
|
|
std::string perror_str(const char* msg);
|
|
|
|
bool set_file_block_mode(int fd, bool block);
|
|
|
|
extern int adb_close(int fd);
|
|
|
|
// Given forward/reverse targets, returns true if they look sane. If an error is found, fills
|
|
// |error| and returns false.
|
|
// Currently this only checks "tcp:" targets. Additional checking could be added for other targets
|
|
// if needed.
|
|
bool forward_targets_are_valid(const std::string& source, const std::string& dest,
|
|
std::string* error);
|
|
|
|
// A thread-safe blocking queue.
|
|
template <typename T>
|
|
class BlockingQueue {
|
|
std::mutex mutex;
|
|
std::condition_variable cv;
|
|
std::vector<T> queue;
|
|
|
|
public:
|
|
void Push(const T& t) {
|
|
{
|
|
std::unique_lock<std::mutex> lock(mutex);
|
|
queue.push_back(t);
|
|
}
|
|
cv.notify_one();
|
|
}
|
|
|
|
template <typename Fn>
|
|
void PopAll(Fn fn) {
|
|
std::vector<T> popped;
|
|
|
|
{
|
|
std::unique_lock<std::mutex> lock(mutex);
|
|
cv.wait(lock, [this]() { return !queue.empty(); });
|
|
popped = std::move(queue);
|
|
queue.clear();
|
|
}
|
|
|
|
for (const T& t : popped) {
|
|
fn(t);
|
|
}
|
|
}
|
|
};
|
|
|
|
std::string GetLogFilePath();
|
|
|
|
#endif
|