/*
- * Copyright (C) 2007 The Android Open Source Project
+ * Copyright (c) 2005-2008, The Android Open Source Project
+ * Copyright (c) 2009-2013, Samsung Electronics Co., Ltd. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
static int open_logfile (const char *pathname)
{
- return open(pathname, O_WRONLY | O_APPEND | O_CREAT, S_IRUSR | S_IWUSR);
+ return open(pathname, O_WRONLY | O_APPEND | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH);
}
static void rotate_logs()
g_out_byte_count += bytes_written;
- if (g_log_rotate_size_kbytes > 0 && (g_out_byte_count / 1024) >= g_log_rotate_size_kbytes)
- {
- rotate_logs();
+ if (g_log_rotate_size_kbytes > 0 && (g_out_byte_count / 1024) >= g_log_rotate_size_kbytes) {
+ if (g_nonblock) {
+ exit(0);
+ } else {
+ rotate_logs();
+ }
}
error:
exit(EXIT_FAILURE);
}
else if (!ret) {
+ free(entry);
fprintf(stderr, "read: Unexpected EOF!\n");
exit(EXIT_FAILURE);
}
-
+ else if (entry->entry.len != ret - sizeof(struct logger_entry)) {
+ free(entry);
+ fprintf(stderr, "read: unexpected length. Expected %d, got %d\n",
+ entry->entry.len, ret - sizeof(struct logger_entry));
+ exit(EXIT_FAILURE);
+ }
entry->entry.msg[entry->entry.len] = '\0';
enqueue(dev, entry);
static void setup_output()
{
- if (g_output_filename == NULL) {
- g_outfd = STDOUT_FILENO;
-
- } else {
- struct stat statbuf;
-
- g_outfd = open_logfile (g_output_filename);
+ if (g_output_filename == NULL) {
+ g_outfd = STDOUT_FILENO;
- if (g_outfd < 0) {
- perror ("couldn't open output file");
- exit(-1);
- }
+ } else {
+ struct stat statbuf;
- fstat(g_outfd, &statbuf);
+ g_outfd = open_logfile (g_output_filename);
- g_out_byte_count = statbuf.st_size;
- }
+ if (g_outfd < 0) {
+ perror ("couldn't open output file");
+ exit(-1);
+ }
+ if (fstat(g_outfd, &statbuf) == -1)
+ g_out_byte_count = 0;
+ else
+ g_out_byte_count = statbuf.st_size;
+ }
}
static int set_log_format(const char * formatString)
" -r [<kbytes>] Rotate log every kbytes. (16 if unspecified). Requires -f\n"
" -n <count> Sets max number of rotated logs to <count>, default 4\n"
" -v <format> Sets the log print format, where <format> is one of:\n\n"
- " brief process tag thread raw time threadtime long\n\n"
- " -c clear (flush) the entire log and exit\n"
+ " brief(by default) process tag thread raw time threadtime long\n\n"
+ " -c clear (flush) the entire log and exit, conflicts with '-g'\n"
" -d dump the log and then exit (don't block)\n"
" -t <count> print only the most recent <count> lines (implies -d)\n"
- " -g get the size of the log's ring buffer and exit\n"
+ " -g get the size of the log's ring buffer and exit, conflicts with '-c'\n"
" -b <buffer> request alternate ring buffer\n"
" ('main' (default), 'radio', 'system')");
" F Fatal\n"
" S Silent (supress all output)\n"
"\n'*' means '*:D' and <tag> by itself means <tag>:V\n"
- "If no filterspec is found, filter defaults to '*:I'\n"
- "\nIf not specified with -v, format is set defaults to \"brief\"\n\n");
-
-
-
+ "If no filterspec is found, filter defaults to '*:I'\n\n");
}
case 'b': {
char *buf;
- if (asprintf(&buf, LOG_FILE_DIR "/%s", optarg) == -1) {
+ if (asprintf(&buf, LOG_FILE_DIR "%s", optarg) == -1) {
asprintf(stderr,"Can't malloc LOG_FILE_DIR\n");
exit(-1);
}
dev = log_devices_new(buf);
- if (devices) {
- if (log_devices_add_to_tail(devices, dev)) {
- fprintf(stderr, "Open log device %s failed\n", buf);
- exit(-1);
- }
- } else {
- devices = dev;
- g_dev_count = 1;
- }
- }
+ if (dev == NULL) {
+ fprintf(stderr,"Can't add log device: %s\n", buf);
+ exit(-1);
+ }
+ if (devices) {
+ if (log_devices_add_to_tail(devices, dev)) {
+ fprintf(stderr, "Open log device %s failed\n", buf);
+ exit(-1);
+ }
+ } else {
+ devices = dev;
+ g_dev_count = 1;
+ }
+ }
break;
case 'f':
}
}
+ /* get log size conflicts with write mode */
+ if (getLogSize && mode != O_RDONLY) {
+ show_help(argv[0]);
+ exit(-1);
+ }
+
if (!devices) {
devices = log_devices_new("/dev/"LOGGER_LOG_MAIN);
if (devices == NULL) {
exit(-1);
}
}
-
if (0 == access("/dev/"LOGGER_LOG_APPS, accessmode)) {
if (log_devices_add_to_tail(devices, log_devices_new("/dev/"LOGGER_LOG_APPS))) {
fprintf(stderr,"Can't add log device: %s\n", LOGGER_LOG_APPS);
exit(-1);
}
}
+
/*
// only add this if it's available
int fd;