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

Commit ba443831 authored by Elliott Hughes's avatar Elliott Hughes Committed by Gerrit Code Review
Browse files

Merge "Revert "Enable multiple consoles""

parents 922e151b efc72751
Loading
Loading
Loading
Loading
+32 −16
Original line number Diff line number Diff line
@@ -74,7 +74,8 @@ static int property_triggers_enabled = 0;

static char qemu[32];

std::vector<std::string> console_names;
int have_console;
std::string console_name = "/dev/console";
static time_t process_needs_restart;

const char *ENV[32];
@@ -297,23 +298,38 @@ static int keychord_init_action(const std::vector<std::string>& args)

static int console_init_action(const std::vector<std::string>& args)
{
    std::vector<std::string> consoles;
    std::string c_prop = property_get("ro.boot.console");
    if (c_prop.empty()) {
        // Property is missing, so check the system console by default.
        consoles.emplace_back(DEFAULT_CONSOLE);
    } else {
        consoles = android::base::Split(c_prop, ":");
    std::string console = property_get("ro.boot.console");
    if (!console.empty()) {
        console_name = "/dev/" + console;
    }

    for (const auto& c : consoles) {
        std::string console = "/dev/" + c;
        int fd = open(console.c_str(), O_RDWR | O_CLOEXEC);
        if (fd != -1) {
            console_names.emplace_back(c);
    int fd = open(console_name.c_str(), O_RDWR | O_CLOEXEC);
    if (fd >= 0)
        have_console = 1;
    close(fd);

    fd = open("/dev/tty0", O_WRONLY | O_CLOEXEC);
    if (fd >= 0) {
        const char *msg;
            msg = "\n"
        "\n"
        "\n"
        "\n"
        "\n"
        "\n"
        "\n"  // console is 40 cols x 30 lines
        "\n"
        "\n"
        "\n"
        "\n"
        "\n"
        "\n"
        "\n"
        "             A N D R O I D ";
        write(fd, msg, strlen(msg));
        close(fd);
    }
    }

    return 0;
}

+2 −3
Original line number Diff line number Diff line
@@ -18,17 +18,16 @@
#define _INIT_INIT_H

#include <string>
#include <vector>

class Action;
class Service;

#define COMMAND_RETRY_TIMEOUT 5
#define DEFAULT_CONSOLE "console"

extern const char *ENV[32];
extern bool waiting_for_exec;
extern std::vector<std::string> console_names;
extern int have_console;
extern std::string console_name;
extern struct selabel_handle *sehandle;
extern struct selabel_handle *sehandle_prop;

+0 −5
Original line number Diff line number Diff line
@@ -115,11 +115,6 @@ Options
Options are modifiers to services.  They affect how and when init
runs the service.

console [<console>]
  This service needs a console. The optional second parameter chooses a
  specific console instead of the default "/dev/console". The leading "/dev/"
  should be omitted, so "/dev/tty0" would be specified as just "console tty0".

critical
  This is a device-critical service. If it exits more than four times in
  four minutes, the device will reboot into recovery mode.
+5 −8
Original line number Diff line number Diff line
@@ -172,7 +172,6 @@ bool Service::HandleClass(const std::vector<std::string>& args, std::string* err

bool Service::HandleConsole(const std::vector<std::string>& args, std::string* err) {
    flags_ |= SVC_CONSOLE;
    console_ = args.size() > 1 ? args[1] : DEFAULT_CONSOLE;
    return true;
}

@@ -283,7 +282,7 @@ Service::OptionHandlerMap::Map& Service::OptionHandlerMap::map() const {
    constexpr std::size_t kMax = std::numeric_limits<std::size_t>::max();
    static const Map option_handlers = {
        {"class",       {1,     1,    &Service::HandleClass}},
        {"console",     {0,     1,    &Service::HandleConsole}},
        {"console",     {0,     0,    &Service::HandleConsole}},
        {"critical",    {0,     0,    &Service::HandleCritical}},
        {"disabled",    {0,     0,    &Service::HandleDisabled}},
        {"group",       {1,     NR_SVC_SUPP_GIDS + 1, &Service::HandleGroup}},
@@ -330,7 +329,7 @@ bool Service::Start(const std::vector<std::string>& dynamic_args) {
    }

    bool needs_console = (flags_ & SVC_CONSOLE);
    if (needs_console && console_names.empty()) {
    if (needs_console && !have_console) {
        ERROR("service '%s' requires console\n", name_.c_str());
        flags_ |= SVC_DISABLED;
        return false;
@@ -607,12 +606,10 @@ void Service::ZapStdio() const {
}

void Service::OpenConsole() const {
    int fd = -1;
    if (std::find(console_names.begin(), console_names.end(), console_) != console_names.end()) {
        std::string c_path = "/dev/" + console_;
        fd = open(c_path.c_str(), O_RDWR);
    int fd;
    if ((fd = open(console_name.c_str(), O_RDWR)) < 0) {
        fd = open("/dev/null", O_RDWR);
    }
    if (fd == -1) fd = open("/dev/null", O_RDWR);
    ioctl(fd, TIOCSCTTY, 0);
    dup2(fd, 0);
    dup2(fd, 1);
+0 −1
Original line number Diff line number Diff line
@@ -129,7 +129,6 @@ private:

    std::string name_;
    std::string classname_;
    std::string console_;

    unsigned flags_;
    pid_t pid_;