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

Commit 2ebe95ff authored by Tom Cherry's avatar Tom Cherry Committed by Gerrit Code Review
Browse files

Merge "liblog: cleanup opaque type usage"

parents c5282e4c 828db1a9
Loading
Loading
Loading
Loading
+12 −36
Original line number Original line Diff line number Diff line
@@ -47,9 +47,6 @@ struct android_log_context_internal {
  uint8_t storage[LOGGER_ENTRY_MAX_PAYLOAD];
  uint8_t storage[LOGGER_ENTRY_MAX_PAYLOAD];
};
};


// TODO(tomcherry): real C++ structs.
typedef struct android_log_context_internal android_log_context_internal;

static void init_context(android_log_context_internal* context, uint32_t tag) {
static void init_context(android_log_context_internal* context, uint32_t tag) {
  context->tag = tag;
  context->tag = tag;
  context->read_write_flag = kAndroidLoggerWrite;
  context->read_write_flag = kAndroidLoggerWrite;
@@ -110,11 +107,9 @@ int android_log_destroy(android_log_context* ctx) {
  return 0;
  return 0;
}
}


int android_log_reset(android_log_context ctx) {
int android_log_reset(android_log_context context) {
  android_log_context_internal* context;
  uint32_t tag;
  uint32_t tag;


  context = (android_log_context_internal*)ctx;
  if (!context || (kAndroidLoggerWrite != context->read_write_flag)) {
  if (!context || (kAndroidLoggerWrite != context->read_write_flag)) {
    return -EBADF;
    return -EBADF;
  }
  }
@@ -126,10 +121,7 @@ int android_log_reset(android_log_context ctx) {
  return 0;
  return 0;
}
}


int android_log_parser_reset(android_log_context ctx, const char* msg, size_t len) {
int android_log_parser_reset(android_log_context context, const char* msg, size_t len) {
  android_log_context_internal* context;

  context = (android_log_context_internal*)ctx;
  if (!context || (kAndroidLoggerRead != context->read_write_flag)) {
  if (!context || (kAndroidLoggerRead != context->read_write_flag)) {
    return -EBADF;
    return -EBADF;
  }
  }
@@ -140,10 +132,7 @@ int android_log_parser_reset(android_log_context ctx, const char* msg, size_t le
  return 0;
  return 0;
}
}


int android_log_write_list_begin(android_log_context ctx) {
int android_log_write_list_begin(android_log_context context) {
  android_log_context_internal* context;

  context = (android_log_context_internal*)ctx;
  if (!context || (kAndroidLoggerWrite != context->read_write_flag)) {
  if (!context || (kAndroidLoggerWrite != context->read_write_flag)) {
    return -EBADF;
    return -EBADF;
  }
  }
@@ -174,8 +163,7 @@ int android_log_write_list_begin(android_log_context ctx) {
  return 0;
  return 0;
}
}


int android_log_write_int32(android_log_context ctx, int32_t value) {
int android_log_write_int32(android_log_context context, int32_t value) {
  android_log_context_internal* context = (android_log_context_internal*)ctx;
  if (!context || (kAndroidLoggerWrite != context->read_write_flag)) {
  if (!context || (kAndroidLoggerWrite != context->read_write_flag)) {
    return -EBADF;
    return -EBADF;
  }
  }
@@ -195,8 +183,7 @@ int android_log_write_int32(android_log_context ctx, int32_t value) {
  return 0;
  return 0;
}
}


int android_log_write_int64(android_log_context ctx, int64_t value) {
int android_log_write_int64(android_log_context context, int64_t value) {
  android_log_context_internal* context = (android_log_context_internal*)ctx;
  if (!context || (kAndroidLoggerWrite != context->read_write_flag)) {
  if (!context || (kAndroidLoggerWrite != context->read_write_flag)) {
    return -EBADF;
    return -EBADF;
  }
  }
@@ -216,8 +203,7 @@ int android_log_write_int64(android_log_context ctx, int64_t value) {
  return 0;
  return 0;
}
}


int android_log_write_string8_len(android_log_context ctx, const char* value, size_t maxlen) {
int android_log_write_string8_len(android_log_context context, const char* value, size_t maxlen) {
  android_log_context_internal* context = (android_log_context_internal*)ctx;
  if (!context || (kAndroidLoggerWrite != context->read_write_flag)) {
  if (!context || (kAndroidLoggerWrite != context->read_write_flag)) {
    return -EBADF;
    return -EBADF;
  }
  }
@@ -252,8 +238,7 @@ int android_log_write_string8(android_log_context ctx, const char* value) {
  return android_log_write_string8_len(ctx, value, MAX_EVENT_PAYLOAD);
  return android_log_write_string8_len(ctx, value, MAX_EVENT_PAYLOAD);
}
}


int android_log_write_float32(android_log_context ctx, float value) {
int android_log_write_float32(android_log_context context, float value) {
  android_log_context_internal* context = (android_log_context_internal*)ctx;
  if (!context || (kAndroidLoggerWrite != context->read_write_flag)) {
  if (!context || (kAndroidLoggerWrite != context->read_write_flag)) {
    return -EBADF;
    return -EBADF;
  }
  }
@@ -273,10 +258,7 @@ int android_log_write_float32(android_log_context ctx, float value) {
  return 0;
  return 0;
}
}


int android_log_write_list_end(android_log_context ctx) {
int android_log_write_list_end(android_log_context context) {
  android_log_context_internal* context;

  context = (android_log_context_internal*)ctx;
  if (!context || (kAndroidLoggerWrite != context->read_write_flag)) {
  if (!context || (kAndroidLoggerWrite != context->read_write_flag)) {
    return -EBADF;
    return -EBADF;
  }
  }
@@ -303,8 +285,7 @@ int android_log_write_list_end(android_log_context ctx) {
/*
/*
 * Logs the list of elements to the event log.
 * Logs the list of elements to the event log.
 */
 */
int android_log_write_list(android_log_context ctx, log_id_t id) {
int android_log_write_list(android_log_context context, log_id_t id) {
  android_log_context_internal* context;
  const char* msg;
  const char* msg;
  ssize_t len;
  ssize_t len;


@@ -312,7 +293,6 @@ int android_log_write_list(android_log_context ctx, log_id_t id) {
    return -EINVAL;
    return -EINVAL;
  }
  }


  context = (android_log_context_internal*)ctx;
  if (!context || (kAndroidLoggerWrite != context->read_write_flag)) {
  if (!context || (kAndroidLoggerWrite != context->read_write_flag)) {
    return -EBADF;
    return -EBADF;
  }
  }
@@ -337,12 +317,10 @@ int android_log_write_list(android_log_context ctx, log_id_t id) {
                                     : __android_log_security_bwrite(context->tag, msg, len));
                                     : __android_log_security_bwrite(context->tag, msg, len));
}
}


int android_log_write_list_buffer(android_log_context ctx, const char** buffer) {
int android_log_write_list_buffer(android_log_context context, const char** buffer) {
  android_log_context_internal* context;
  const char* msg;
  const char* msg;
  ssize_t len;
  ssize_t len;


  context = (android_log_context_internal*)ctx;
  if (!context || (kAndroidLoggerWrite != context->read_write_flag)) {
  if (!context || (kAndroidLoggerWrite != context->read_write_flag)) {
    return -EBADF;
    return -EBADF;
  }
  }
@@ -375,12 +353,10 @@ int android_log_write_list_buffer(android_log_context ctx, const char** buffer)
 * this and continues to call this function, the behavior is undefined
 * this and continues to call this function, the behavior is undefined
 * (although it won't crash).
 * (although it won't crash).
 */
 */
static android_log_list_element android_log_read_next_internal(android_log_context ctx, int peek) {
static android_log_list_element android_log_read_next_internal(android_log_context context,
                                                               int peek) {
  android_log_list_element elem;
  android_log_list_element elem;
  unsigned pos;
  unsigned pos;
  android_log_context_internal* context;

  context = (android_log_context_internal*)ctx;


  memset(&elem, 0, sizeof(elem));
  memset(&elem, 0, sizeof(elem));


+45 −60
Original line number Original line Diff line number Diff line
@@ -39,47 +39,43 @@
#include "logd_reader.h"
#include "logd_reader.h"
#include "logger.h"
#include "logger.h"


static int logdAvailable(log_id_t LogId);
static int LogdAvailable(log_id_t LogId);
static int logdVersion(struct android_log_logger* logger,
static int LogdVersion(struct logger* logger, struct android_log_transport_context* transp);
static int LogdRead(struct logger_list* logger_list, struct android_log_transport_context* transp,
                    struct log_msg* log_msg);
static int LogdPoll(struct logger_list* logger_list, struct android_log_transport_context* transp);
static void LogdClose(struct logger_list* logger_list,
                      struct android_log_transport_context* transp);
                      struct android_log_transport_context* transp);
static int logdRead(struct android_log_logger_list* logger_list,
static int LogdClear(struct logger* logger, struct android_log_transport_context* transp);
                    struct android_log_transport_context* transp, struct log_msg* log_msg);
static ssize_t LogdSetSize(struct logger* logger, struct android_log_transport_context* transp,
static int logdPoll(struct android_log_logger_list* logger_list,
                           size_t size);
static ssize_t LogdGetSize(struct logger* logger, struct android_log_transport_context* transp);
static ssize_t LogdGetReadableSize(struct logger* logger,
                                   struct android_log_transport_context* transp);
                                   struct android_log_transport_context* transp);
static void logdClose(struct android_log_logger_list* logger_list,
static ssize_t LogdGetPrune(struct logger_list* logger,
                      struct android_log_transport_context* transp);
static int logdClear(struct android_log_logger* logger,
                     struct android_log_transport_context* transp);
static ssize_t logdSetSize(struct android_log_logger* logger,
                           struct android_log_transport_context* transp, size_t size);
static ssize_t logdGetSize(struct android_log_logger* logger,
                           struct android_log_transport_context* transp);
static ssize_t logdGetReadableSize(struct android_log_logger* logger,
                                   struct android_log_transport_context* transp);
static ssize_t logdGetPrune(struct android_log_logger_list* logger,
                            struct android_log_transport_context* transp, char* buf, size_t len);
                            struct android_log_transport_context* transp, char* buf, size_t len);
static ssize_t logdSetPrune(struct android_log_logger_list* logger,
static ssize_t LogdSetPrune(struct logger_list* logger,
                            struct android_log_transport_context* transp, char* buf, size_t len);
                            struct android_log_transport_context* transp, char* buf, size_t len);
static ssize_t logdGetStats(struct android_log_logger_list* logger,
static ssize_t LogdGetStats(struct logger_list* logger,
                            struct android_log_transport_context* transp, char* buf, size_t len);
                            struct android_log_transport_context* transp, char* buf, size_t len);


struct android_log_transport_read logdLoggerRead = {
struct android_log_transport_read logdLoggerRead = {
    .name = "logd",
    .name = "logd",
    .available = logdAvailable,
    .available = LogdAvailable,
    .version = logdVersion,
    .version = LogdVersion,
    .close = logdClose,
    .close = LogdClose,
    .read = logdRead,
    .read = LogdRead,
    .poll = logdPoll,
    .poll = LogdPoll,
    .clear = logdClear,
    .clear = LogdClear,
    .setSize = logdSetSize,
    .setSize = LogdSetSize,
    .getSize = logdGetSize,
    .getSize = LogdGetSize,
    .getReadableSize = logdGetReadableSize,
    .getReadableSize = LogdGetReadableSize,
    .getPrune = logdGetPrune,
    .getPrune = LogdGetPrune,
    .setPrune = logdSetPrune,
    .setPrune = LogdSetPrune,
    .getStats = logdGetStats,
    .getStats = LogdGetStats,
};
};


static int logdAvailable(log_id_t logId) {
static int LogdAvailable(log_id_t logId) {
  if (logId >= LOG_ID_MAX) {
  if (logId >= LOG_ID_MAX) {
    return -EINVAL;
    return -EINVAL;
  }
  }
@@ -120,8 +116,7 @@ static int socket_local_client(const std::string& name, int type) {
}
}


/* worker for sending the command to the logger */
/* worker for sending the command to the logger */
static ssize_t send_log_msg(struct android_log_logger* logger, const char* msg, char* buf,
static ssize_t send_log_msg(struct logger* logger, const char* msg, char* buf, size_t buf_size) {
                            size_t buf_size) {
  ssize_t ret;
  ssize_t ret;
  size_t len;
  size_t len;
  char* cp;
  char* cp;
@@ -202,16 +197,14 @@ static int check_log_success(char* buf, ssize_t ret) {
  return 0;
  return 0;
}
}


static int logdClear(struct android_log_logger* logger,
static int LogdClear(struct logger* logger, struct android_log_transport_context*) {
                     struct android_log_transport_context* transp __unused) {
  char buf[512];
  char buf[512];


  return check_log_success(buf, send_log_msg(logger, "clear %d", buf, sizeof(buf)));
  return check_log_success(buf, send_log_msg(logger, "clear %d", buf, sizeof(buf)));
}
}


/* returns the total size of the log's ring buffer */
/* returns the total size of the log's ring buffer */
static ssize_t logdGetSize(struct android_log_logger* logger,
static ssize_t LogdGetSize(struct logger* logger, struct android_log_transport_context*) {
                           struct android_log_transport_context* transp __unused) {
  char buf[512];
  char buf[512];


  ssize_t ret = send_log_msg(logger, "getLogSize %d", buf, sizeof(buf));
  ssize_t ret = send_log_msg(logger, "getLogSize %d", buf, sizeof(buf));
@@ -226,8 +219,8 @@ static ssize_t logdGetSize(struct android_log_logger* logger,
  return atol(buf);
  return atol(buf);
}
}


static ssize_t logdSetSize(struct android_log_logger* logger,
static ssize_t LogdSetSize(struct logger* logger, struct android_log_transport_context*,
                           struct android_log_transport_context* transp __unused, size_t size) {
                           size_t size) {
  char buf[512];
  char buf[512];


  snprintf(buf, sizeof(buf), "setLogSize %d %zu", logger->logId, size);
  snprintf(buf, sizeof(buf), "setLogSize %d %zu", logger->logId, size);
@@ -239,8 +232,7 @@ static ssize_t logdSetSize(struct android_log_logger* logger,
 * returns the readable size of the log's ring buffer (that is, amount of the
 * returns the readable size of the log's ring buffer (that is, amount of the
 * log consumed)
 * log consumed)
 */
 */
static ssize_t logdGetReadableSize(struct android_log_logger* logger,
static ssize_t LogdGetReadableSize(struct logger* logger, struct android_log_transport_context*) {
                                   struct android_log_transport_context* transp __unused) {
  char buf[512];
  char buf[512];


  ssize_t ret = send_log_msg(logger, "getLogSizeUsed %d", buf, sizeof(buf));
  ssize_t ret = send_log_msg(logger, "getLogSizeUsed %d", buf, sizeof(buf));
@@ -258,8 +250,7 @@ static ssize_t logdGetReadableSize(struct android_log_logger* logger,
/*
/*
 * returns the logger version
 * returns the logger version
 */
 */
static int logdVersion(struct android_log_logger* logger __unused,
static int LogdVersion(struct logger*, struct android_log_transport_context*) {
                       struct android_log_transport_context* transp __unused) {
  uid_t uid = __android_log_uid();
  uid_t uid = __android_log_uid();
  return ((uid != AID_ROOT) && (uid != AID_LOG) && (uid != AID_SYSTEM)) ? 3 : 4;
  return ((uid != AID_ROOT) && (uid != AID_LOG) && (uid != AID_SYSTEM)) ? 3 : 4;
}
}
@@ -267,10 +258,9 @@ static int logdVersion(struct android_log_logger* logger __unused,
/*
/*
 * returns statistics
 * returns statistics
 */
 */
static ssize_t logdGetStats(struct android_log_logger_list* logger_list,
static ssize_t LogdGetStats(struct logger_list* logger_list, struct android_log_transport_context*,
                            struct android_log_transport_context* transp __unused, char* buf,
                            char* buf, size_t len) {
                            size_t len) {
  struct logger* logger;
  struct android_log_logger* logger;
  char* cp = buf;
  char* cp = buf;
  size_t remaining = len;
  size_t remaining = len;
  size_t n;
  size_t n;
@@ -294,14 +284,12 @@ static ssize_t logdGetStats(struct android_log_logger_list* logger_list,
  return send_log_msg(NULL, NULL, buf, len);
  return send_log_msg(NULL, NULL, buf, len);
}
}


static ssize_t logdGetPrune(struct android_log_logger_list* logger_list __unused,
static ssize_t LogdGetPrune(struct logger_list*, struct android_log_transport_context*, char* buf,
                            struct android_log_transport_context* transp __unused, char* buf,
                            size_t len) {
                            size_t len) {
  return send_log_msg(NULL, "getPruneList", buf, len);
  return send_log_msg(NULL, "getPruneList", buf, len);
}
}


static ssize_t logdSetPrune(struct android_log_logger_list* logger_list __unused,
static ssize_t LogdSetPrune(struct logger_list*, struct android_log_transport_context*, char* buf,
                            struct android_log_transport_context* transp __unused, char* buf,
                            size_t len) {
                            size_t len) {
  const char cmd[] = "setPruneList ";
  const char cmd[] = "setPruneList ";
  const size_t cmdlen = sizeof(cmd) - 1;
  const size_t cmdlen = sizeof(cmd) - 1;
@@ -316,9 +304,8 @@ static ssize_t logdSetPrune(struct android_log_logger_list* logger_list __unused
  return check_log_success(buf, send_log_msg(NULL, NULL, buf, len));
  return check_log_success(buf, send_log_msg(NULL, NULL, buf, len));
}
}


static int logdOpen(struct android_log_logger_list* logger_list,
static int logdOpen(struct logger_list* logger_list, struct android_log_transport_context* transp) {
                    struct android_log_transport_context* transp) {
  struct logger* logger;
  struct android_log_logger* logger;
  char buffer[256], *cp, c;
  char buffer[256], *cp, c;
  int ret, remaining, sock;
  int ret, remaining, sock;


@@ -404,8 +391,8 @@ static int logdOpen(struct android_log_logger_list* logger_list,
}
}


/* Read from the selected logs */
/* Read from the selected logs */
static int logdRead(struct android_log_logger_list* logger_list,
static int LogdRead(struct logger_list* logger_list, struct android_log_transport_context* transp,
                    struct android_log_transport_context* transp, struct log_msg* log_msg) {
                    struct log_msg* log_msg) {
  int ret = logdOpen(logger_list, transp);
  int ret = logdOpen(logger_list, transp);
  if (ret < 0) {
  if (ret < 0) {
    return ret;
    return ret;
@@ -425,8 +412,7 @@ static int logdRead(struct android_log_logger_list* logger_list,
  return ret;
  return ret;
}
}


static int logdPoll(struct android_log_logger_list* logger_list,
static int LogdPoll(struct logger_list* logger_list, struct android_log_transport_context* transp) {
                    struct android_log_transport_context* transp) {
  struct pollfd p;
  struct pollfd p;


  int ret = logdOpen(logger_list, transp);
  int ret = logdOpen(logger_list, transp);
@@ -448,8 +434,7 @@ static int logdPoll(struct android_log_logger_list* logger_list,
}
}


/* Close all the logs */
/* Close all the logs */
static void logdClose(struct android_log_logger_list* logger_list __unused,
static void LogdClose(struct logger_list*, struct android_log_transport_context* transp) {
                      struct android_log_transport_context* transp) {
  int sock = atomic_exchange(&transp->context.sock, -1);
  int sock = atomic_exchange(&transp->context.sock, -1);
  if (sock > 0) {
  if (sock > 0) {
    close(sock);
    close(sock);
+25 −40
Original line number Original line Diff line number Diff line
@@ -46,49 +46,37 @@ struct android_log_transport_write {
               size_t nr);
               size_t nr);
};
};


struct android_log_logger_list;
struct android_log_transport_context;
struct android_log_transport_context;
struct android_log_logger;


struct android_log_transport_read {
struct android_log_transport_read {
  const char* name; /* human name to describe the transport */
  const char* name; /* human name to describe the transport */


  /* Does not cause resources to be taken */
  /* Does not cause resources to be taken */
  int (*available)(log_id_t logId);
  int (*available)(log_id_t logId);
  int (*version)(struct android_log_logger* logger,
  int (*version)(struct logger* logger, struct android_log_transport_context* transp);
                 struct android_log_transport_context* transp);
  /* Release resources taken by the following interfaces */
  /* Release resources taken by the following interfaces */
  void (*close)(struct android_log_logger_list* logger_list,
  void (*close)(struct logger_list* logger_list, struct android_log_transport_context* transp);
                struct android_log_transport_context* transp);
  /*
  /*
   * Expect all to instantiate open automagically on any call,
   * Expect all to instantiate open automagically on any call,
   * so we do not have an explicit open call.
   * so we do not have an explicit open call.
   */
   */
  int (*read)(struct android_log_logger_list* logger_list,
  int (*read)(struct logger_list* logger_list, struct android_log_transport_context* transp,
              struct android_log_transport_context* transp,
              struct log_msg* log_msg);
              struct log_msg* log_msg);
  /* Must only be called if not ANDROID_LOG_NONBLOCK (blocking) */
  /* Must only be called if not ANDROID_LOG_NONBLOCK (blocking) */
  int (*poll)(struct android_log_logger_list* logger_list,
  int (*poll)(struct logger_list* logger_list, struct android_log_transport_context* transp);
              struct android_log_transport_context* transp);


  int (*clear)(struct logger* logger, struct android_log_transport_context* transp);
  int (*clear)(struct android_log_logger* logger,
  ssize_t (*setSize)(struct logger* logger, struct android_log_transport_context* transp,
               struct android_log_transport_context* transp);
                     size_t size);
  ssize_t (*setSize)(struct android_log_logger* logger,
  ssize_t (*getSize)(struct logger* logger, struct android_log_transport_context* transp);
                     struct android_log_transport_context* transp, size_t size);
  ssize_t (*getReadableSize)(struct logger* logger, struct android_log_transport_context* transp);
  ssize_t (*getSize)(struct android_log_logger* logger,

                     struct android_log_transport_context* transp);
  ssize_t (*getPrune)(struct logger_list* logger_list, struct android_log_transport_context* transp,
  ssize_t (*getReadableSize)(struct android_log_logger* logger,
                      char* buf, size_t len);
                             struct android_log_transport_context* transp);
  ssize_t (*setPrune)(struct logger_list* logger_list, struct android_log_transport_context* transp,

                      char* buf, size_t len);
  ssize_t (*getPrune)(struct android_log_logger_list* logger_list,
  ssize_t (*getStats)(struct logger_list* logger_list, struct android_log_transport_context* transp,
                      struct android_log_transport_context* transp, char* buf,
                      char* buf, size_t len);
                      size_t len);
  ssize_t (*setPrune)(struct android_log_logger_list* logger_list,
                      struct android_log_transport_context* transp, char* buf,
                      size_t len);
  ssize_t (*getStats)(struct android_log_logger_list* logger_list,
                      struct android_log_transport_context* transp, char* buf,
                      size_t len);
};
};


struct android_log_transport_context {
struct android_log_transport_context {
@@ -98,7 +86,7 @@ struct android_log_transport_context {
  unsigned logMask;      /* mask of requested log buffers */
  unsigned logMask;      /* mask of requested log buffers */
};
};


struct android_log_logger_list {
struct logger_list {
  struct listnode logger;
  struct listnode logger;
  android_log_transport_context transport_context;
  android_log_transport_context transport_context;
  bool transport_initialized;
  bool transport_initialized;
@@ -108,22 +96,19 @@ struct android_log_logger_list {
  pid_t pid;
  pid_t pid;
};
};


struct android_log_logger {
struct logger {
  struct listnode node;
  struct listnode node;
  struct android_log_logger_list* parent;
  struct logger_list* parent;


  log_id_t logId;
  log_id_t logId;
};
};


/* assumes caller has structures read-locked, single threaded, or fenced */
/* assumes caller has structures read-locked, single threaded, or fenced */
#define logger_for_each(logp, logger_list)                                      \
#define logger_for_each(logp, logger_list)                                      \
  for ((logp) = node_to_item((logger_list)->logger.next,            \
  for ((logp) = node_to_item((logger_list)->logger.next, struct logger, node);  \
                             struct android_log_logger, node);      \
       ((logp) != node_to_item(&(logger_list)->logger, struct logger, node)) && \
       ((logp) != node_to_item(&(logger_list)->logger,              \
                               struct android_log_logger, node)) && \
       ((logp)->parent == (logger_list));                                       \
       ((logp)->parent == (logger_list));                                       \
       (logp) =                                                     \
       (logp) = node_to_item((logp)->node.next, struct logger, node))
           node_to_item((logp)->node.next, struct android_log_logger, node))


/* OS specific dribs and drabs */
/* OS specific dribs and drabs */


+65 −81

File changed.

Preview size limit exceeded, changes collapsed.

+20 −25
Original line number Original line Diff line number Diff line
@@ -26,24 +26,22 @@


#include "logger.h"
#include "logger.h"


static int pmsgAvailable(log_id_t logId);
static int PmsgAvailable(log_id_t logId);
static int pmsgVersion(struct android_log_logger* logger,
static int PmsgVersion(struct logger* logger, struct android_log_transport_context* transp);
                       struct android_log_transport_context* transp);
static int PmsgRead(struct logger_list* logger_list, struct android_log_transport_context* transp,
static int pmsgRead(struct android_log_logger_list* logger_list,
                    struct log_msg* log_msg);
                    struct android_log_transport_context* transp, struct log_msg* log_msg);
static void PmsgClose(struct logger_list* logger_list,
static void pmsgClose(struct android_log_logger_list* logger_list,
                      struct android_log_transport_context* transp);
static int pmsgClear(struct android_log_logger* logger,
                      struct android_log_transport_context* transp);
                      struct android_log_transport_context* transp);
static int PmsgClear(struct logger* logger, struct android_log_transport_context* transp);


struct android_log_transport_read pmsgLoggerRead = {
struct android_log_transport_read pmsgLoggerRead = {
    .name = "pmsg",
    .name = "pmsg",
    .available = pmsgAvailable,
    .available = PmsgAvailable,
    .version = pmsgVersion,
    .version = PmsgVersion,
    .close = pmsgClose,
    .close = PmsgClose,
    .read = pmsgRead,
    .read = PmsgRead,
    .poll = NULL,
    .poll = NULL,
    .clear = pmsgClear,
    .clear = PmsgClear,
    .setSize = NULL,
    .setSize = NULL,
    .getSize = NULL,
    .getSize = NULL,
    .getReadableSize = NULL,
    .getReadableSize = NULL,
@@ -52,7 +50,7 @@ struct android_log_transport_read pmsgLoggerRead = {
    .getStats = NULL,
    .getStats = NULL,
};
};


static int pmsgAvailable(log_id_t logId) {
static int PmsgAvailable(log_id_t logId) {
  if (logId > LOG_ID_SECURITY) {
  if (logId > LOG_ID_SECURITY) {
    return -EINVAL;
    return -EINVAL;
  }
  }
@@ -62,21 +60,19 @@ static int pmsgAvailable(log_id_t logId) {
  return -EBADF;
  return -EBADF;
}
}


static int pmsgClear(struct android_log_logger* logger __unused,
static int PmsgClear(struct logger*, struct android_log_transport_context*) {
                     struct android_log_transport_context* transp __unused) {
  return unlink("/sys/fs/pstore/pmsg-ramoops-0");
  return unlink("/sys/fs/pstore/pmsg-ramoops-0");
}
}


/*
/*
 * returns the logger version
 * returns the logger version
 */
 */
static int pmsgVersion(struct android_log_logger* logger __unused,
static int PmsgVersion(struct logger*, struct android_log_transport_context*) {
                       struct android_log_transport_context* transp __unused) {
  return 4;
  return 4;
}
}


static int pmsgRead(struct android_log_logger_list* logger_list,
static int PmsgRead(struct logger_list* logger_list, struct android_log_transport_context* transp,
                    struct android_log_transport_context* transp, struct log_msg* log_msg) {
                    struct log_msg* log_msg) {
  ssize_t ret;
  ssize_t ret;
  off_t current, next;
  off_t current, next;
  struct __attribute__((__packed__)) {
  struct __attribute__((__packed__)) {
@@ -192,8 +188,7 @@ static int pmsgRead(struct android_log_logger_list* logger_list,
  }
  }
}
}


static void pmsgClose(struct android_log_logger_list* logger_list __unused,
static void PmsgClose(struct logger_list*, struct android_log_transport_context* transp) {
                      struct android_log_transport_context* transp) {
  int fd = atomic_exchange(&transp->context.fd, 0);
  int fd = atomic_exchange(&transp->context.fd, 0);
  if (fd > 0) {
  if (fd > 0) {
    close(fd);
    close(fd);
@@ -211,7 +206,7 @@ static void* realloc_or_free(void* ptr, size_t new_size) {
ssize_t __android_log_pmsg_file_read(log_id_t logId, char prio, const char* prefix,
ssize_t __android_log_pmsg_file_read(log_id_t logId, char prio, const char* prefix,
                                     __android_log_pmsg_file_read_fn fn, void* arg) {
                                     __android_log_pmsg_file_read_fn fn, void* arg) {
  ssize_t ret;
  ssize_t ret;
  struct android_log_logger_list logger_list;
  struct logger_list logger_list;
  struct android_log_transport_context transp;
  struct android_log_transport_context transp;
  struct content {
  struct content {
    struct listnode node;
    struct listnode node;
@@ -268,7 +263,7 @@ ssize_t __android_log_pmsg_file_read(log_id_t logId, char prio, const char* pref


  /* Read the file content */
  /* Read the file content */
  log_msg log_msg;
  log_msg log_msg;
  while (pmsgRead(&logger_list, &transp, &log_msg) > 0) {
  while (PmsgRead(&logger_list, &transp, &log_msg) > 0) {
    const char* cp;
    const char* cp;
    size_t hdr_size = log_msg.entry.hdr_size;
    size_t hdr_size = log_msg.entry.hdr_size;


@@ -426,7 +421,7 @@ ssize_t __android_log_pmsg_file_read(log_id_t logId, char prio, const char* pref
    }
    }
    list_add_head(node, &content->node);
    list_add_head(node, &content->node);
  }
  }
  pmsgClose(&logger_list, &transp);
  PmsgClose(&logger_list, &transp);


  /* Progress through all the collected files */
  /* Progress through all the collected files */
  list_for_each_safe(node, n, &name_list) {
  list_for_each_safe(node, n, &name_list) {