Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4679a396 authored by Elliott Hughes's avatar Elliott Hughes
Browse files

adb: rationalize fatal/error logging.

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
parent 7a08c896
Loading
Loading
Loading
Loading
+1 −34
Original line number Diff line number Diff line
@@ -73,39 +73,6 @@ std::string adb_version() {
        android::base::GetExecutablePath().c_str());
}

void fatal(const char *fmt, ...) {
    va_list ap;
    va_start(ap, fmt);
    char buf[1024];
    vsnprintf(buf, sizeof(buf), fmt, ap);

#if ADB_HOST
    fprintf(stderr, "error: %s\n", buf);
#else
    LOG(ERROR) << "error: " << buf;
#endif

    va_end(ap);
    abort();
}

void fatal_errno(const char* fmt, ...) {
    int err = errno;
    va_list ap;
    va_start(ap, fmt);
    char buf[1024];
    vsnprintf(buf, sizeof(buf), fmt, ap);

#if ADB_HOST
    fprintf(stderr, "error: %s: %s\n", buf, strerror(err));
#else
    LOG(ERROR) << "error: " << buf << ": " << strerror(err);
#endif

    va_end(ap);
    abort();
}

uint32_t calculate_apacket_checksum(const apacket* p) {
    uint32_t sum = 0;
    for (size_t i = 0; i < p->msg.data_length; ++i) {
@@ -118,7 +85,7 @@ apacket* get_apacket(void)
{
    apacket* p = new apacket();
    if (p == nullptr) {
      fatal("failed to allocate an apacket");
        LOG(FATAL) << "failed to allocate an apacket";
    }

    memset(&p->msg, 0, sizeof(p->msg));
+0 −3
Original line number Diff line number Diff line
@@ -124,9 +124,6 @@ inline bool ConnectionStateIsOnline(ConnectionState state) {

void print_packet(const char* label, apacket* p);

void fatal(const char* fmt, ...) __attribute__((noreturn, format(__printf__, 1, 2)));
void fatal_errno(const char* fmt, ...) __attribute__((noreturn, format(__printf__, 1, 2)));

void handle_packet(apacket* p, atransport* t);

int launch_server(const std::string& socket_spec);
+5 −17
Original line number Diff line number Diff line
@@ -57,11 +57,11 @@ static constexpr char kNullFileName[] = "/dev/null";
void close_stdin() {
    int fd = unix_open(kNullFileName, O_RDONLY);
    if (fd == -1) {
        fatal_errno("failed to open %s", kNullFileName);
        PLOG(FATAL) << "failed to open " << kNullFileName;
    }

    if (TEMP_FAILURE_RETRY(dup2(fd, STDIN_FILENO)) == -1) {
        fatal_errno("failed to redirect stdin to %s", kNullFileName);
        PLOG(FATAL) << "failed to redirect stdin to " << kNullFileName;
    }
    unix_close(fd);
}
@@ -316,18 +316,6 @@ std::string adb_get_android_dir_path() {
    return android_dir;
}

int syntax_error(const char* fmt, ...) {
    fprintf(stderr, "adb: usage: ");

    va_list ap;
    va_start(ap, fmt);
    vfprintf(stderr, fmt, ap);
    va_end(ap);

    fprintf(stderr, "\n");
    return 1;
}

std::string GetLogFilePath() {
#if defined(_WIN32)
    const char log_name[] = "adb.log";
@@ -337,13 +325,13 @@ std::string GetLogFilePath() {
    DWORD nchars = GetTempPathW(arraysize(temp_path), temp_path);
    if (nchars >= arraysize(temp_path) || nchars == 0) {
        // If string truncation or some other error.
        fatal("cannot retrieve temporary file path: %s\n",
              android::base::SystemErrorCodeToString(GetLastError()).c_str());
        LOG(FATAL) << "cannot retrieve temporary file path: "
                   << android::base::SystemErrorCodeToString(GetLastError());
    }

    std::string temp_path_utf8;
    if (!android::base::WideToUTF8(temp_path, &temp_path_utf8)) {
        fatal_errno("cannot convert temporary file path from UTF-16 to UTF-8");
        PLOG(FATAL) << "cannot convert temporary file path from UTF-16 to UTF-8";
    }

    return temp_path_utf8 + log_name;
+0 −2
Original line number Diff line number Diff line
@@ -26,8 +26,6 @@

#include "adb.h"

int syntax_error(const char*, ...) __attribute__((__format__(__printf__, 1, 2)));

void close_stdin();

bool getcwd(std::string* cwd);
+4 −4
Original line number Diff line number Diff line
@@ -134,7 +134,7 @@ static int install_app_streamed(int argc, const char** argv, bool use_fastdeploy
    // The last argument must be the APK file
    const char* file = argv[argc - 1];
    if (!android::base::EndsWithIgnoreCase(file, ".apk")) {
        return syntax_error("filename doesn't end .apk: %s", file);
        error(1, 0, "filename doesn't end .apk: %s", file);
    }

    if (use_fastdeploy == true) {
@@ -224,7 +224,7 @@ static int install_app_legacy(int argc, const char** argv, bool use_fastdeploy,
        }
    }

    if (last_apk == -1) return syntax_error("need APK file on command line");
    if (last_apk == -1) error(1, 0, "need APK file on command line");

    int result = -1;
    std::vector<const char*> apk_file = {argv[last_apk]};
@@ -311,7 +311,7 @@ int install_app(int argc, const char** argv) {
    }

    if (installMode == INSTALL_STREAM && _use_legacy_install() == true) {
        return syntax_error("Attempting to use streaming install on unsupported deivce.");
        error(1, 0, "Attempting to use streaming install on unsupported device");
    }

    if (use_fastdeploy == true && is_reinstall == false) {
@@ -370,7 +370,7 @@ int install_multiple_app(int argc, const char** argv) {
        }
    }

    if (first_apk == -1) return syntax_error("need APK file on command line");
    if (first_apk == -1) error(1, 0, "need APK file on command line");

    std::string install_cmd;
    if (_use_legacy_install()) {
Loading