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

Commit 8ec2d8fe authored by Mark Salyzyn's avatar Mark Salyzyn Committed by Gerrit Code Review
Browse files

Merge "logd: klogd and Mediatek part deux"

parents 659f5ade 47dba71f
Loading
Loading
Loading
Loading
+21 −7
Original line number Diff line number Diff line
@@ -388,6 +388,16 @@ static int convertKernelPrioToAndroidPrio(int pri) {
    return ANDROID_LOG_INFO;
}

static const char *strnrchr(const char *s, size_t len, char c) {
  const char *save = NULL;
  for (;len; ++s, len--) {
    if (*s == c) {
      save = s;
    }
  }
  return save;
}

//
// log a message into the kernel log buffer
//
@@ -584,11 +594,11 @@ int LogKlog::log(const char *buf) {
    //   eg: [143:healthd]healthd -> [143:healthd]
    size_t taglen = etag - tag;
    // Mediatek-special printk induced stutter
    char *np = strrchr(tag, ']');
    if (np && (++np < etag)) {
        size_t s = etag - np;
        if (((s + s) < taglen) && !strncmp(np, np - 1 - s, s)) {
            taglen = np - tag;
    const char *mp = strnrchr(tag, ']', taglen);
    if (mp && (++mp < etag)) {
        size_t s = etag - mp;
        if (((s + s) < taglen) && !memcmp(mp, mp - 1 - s, s)) {
            taglen = mp - tag;
        }
    }
    // skip leading space
@@ -606,15 +616,19 @@ int LogKlog::log(const char *buf) {
        b = 1;
    }
    size_t n = 1 + taglen + 1 + b + 1;
    int rc = n;
    if ((taglen > n) || (b > n)) { // Can not happen ...
        rc = -EINVAL;
        return rc;
    }

    // Allocate a buffer to hold the interpreted log message
    int rc = n;
    char *newstr = reinterpret_cast<char *>(malloc(n));
    if (!newstr) {
        rc = -ENOMEM;
        return rc;
    }
    np = newstr;
    char *np = newstr;

    // Convert priority into single-byte Android logger priority
    *np = convertKernelPrioToAndroidPrio(pri);