OSDN Git Service

Fix opening of a regular file (broken in r403).
[android-x86/external-exfat.git] / libexfat / log.c
index 60bd822..7e541aa 100644 (file)
@@ -1,14 +1,29 @@
 /*
- *  log.c
- *  exFAT file system implementation library.
- *
- *  Created by Andrew Nayenko on 02.09.09.
- *  This software is distributed under the GNU General Public License 
- *  version 3 or any later.
- */
+       log.c (02.09.09)
+       exFAT file system implementation library.
+
+       Free exFAT implementation.
+       Copyright (C) 2010-2013  Andrew Nayenko
+
+       This program is free software; you can redistribute it and/or modify
+       it under the terms of the GNU General Public License as published by
+       the Free Software Foundation, either version 2 of the License, or
+       (at your option) any later version.
+
+       This program is distributed in the hope that it will be useful,
+       but WITHOUT ANY WARRANTY; without even the implied warranty of
+       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+       GNU General Public License for more details.
+
+       You should have received a copy of the GNU General Public License along
+       with this program; if not, write to the Free Software Foundation, Inc.,
+       51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
 
 #include "exfat.h"
 #include <stdarg.h>
+#include <syslog.h>
+#include <unistd.h>
 
 int exfat_errors;
 
@@ -17,15 +32,22 @@ int exfat_errors;
  */
 void exfat_bug(const char* format, ...)
 {
-       va_list ap;
+       va_list ap, aq;
+
+       va_start(ap, format);
+       va_copy(aq, ap);
 
        fflush(stdout);
        fputs("BUG: ", stderr);
-       va_start(ap, format);
        vfprintf(stderr, format, ap);
        va_end(ap);
        fputs(".\n", stderr);
-       exit(1);
+
+       if (!isatty(STDERR_FILENO))
+               vsyslog(LOG_CRIT, format, aq);
+       va_end(aq);
+
+       abort();
 }
 
 /*
@@ -33,15 +55,21 @@ void exfat_bug(const char* format, ...)
  */
 void exfat_error(const char* format, ...)
 {
-       va_list ap;
+       va_list ap, aq;
 
        exfat_errors++;
+       va_start(ap, format);
+       va_copy(aq, ap);
+
        fflush(stdout);
        fputs("ERROR: ", stderr);
-       va_start(ap, format);
        vfprintf(stderr, format, ap);
        va_end(ap);
        fputs(".\n", stderr);
+
+       if (!isatty(STDERR_FILENO))
+               vsyslog(LOG_ERR, format, aq);
+       va_end(aq);
 }
 
 /*
@@ -50,14 +78,20 @@ void exfat_error(const char* format, ...)
  */
 void exfat_warn(const char* format, ...)
 {
-       va_list ap;
+       va_list ap, aq;
+
+       va_start(ap, format);
+       va_copy(aq, ap);
 
        fflush(stdout);
        fputs("WARN: ", stderr);
-       va_start(ap, format);
        vfprintf(stderr, format, ap);
        va_end(ap);
        fputs(".\n", stderr);
+
+       if (!isatty(STDERR_FILENO))
+               vsyslog(LOG_WARNING, format, aq);
+       va_end(aq);
 }
 
 /*