/////////////////////////////////////////////////////////////////////////////// // // IMPORTANT NOTICE // // The following open source license statement does not apply to any // entity in the Exception List published by FMSoft. // // For more information, please visit: // // https://www.fmsoft.cn/exception-list // ////////////////////////////////////////////////////////////////////////////// /* * This file is part of MiniGUI, a mature cross-platform windowing * and Graphics User Interface (GUI) support system for embedded systems * and smart IoT devices. * * Copyright (C) 2002~2018, Beijing FMSoft Technologies Co., Ltd. * Copyright (C) 1998~2002, WEI Yongming * * 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 3 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, see . * * Or, * * As this program is a library, any link to this program must follow * GNU General Public License version 3 (GPLv3). If you cannot accept * GPLv3, you need to be licensed from FMSoft. * * If you have got a commercial license of this program, please use it * under the terms and conditions of the commercial license. * * For more information about the commercial license, please refer to * . */ /* ** errorlog.c: Error routines for programs that can run as a daemon. ** ** Some code come from APUE by Richard Stevens. ** ** Current maintainer: Wei Yongming. ** Create date: 2000.12.31 */ #include /* ANSI C header file */ #include /* for definition of errno */ #include "common.h" #ifdef _MGRM_PROCESSES #include #ifdef _DEBUG #include "ourhdr.h" static void log_doit(int, int, const char *, va_list ap); static int debug = 0; /* caller must define and set this: nonzero if interactive, zero if daemon */ /* Initialize syslog(), if running as daemon. */ void log_open(const char *ident, int option, int facility) { if (debug == 0) openlog(ident, option, facility); } /* Nonfatal error related to a system call. * Print a message with the system's errno value and return. */ void log_ret(const char *fmt, ...) { va_list ap; va_start(ap, fmt); log_doit(1, LOG_ERR, fmt, ap); va_end(ap); return; } /* Fatal error related to a system call. * Print a message and terminate. */ void log_sys(const char *fmt, ...) { va_list ap; va_start(ap, fmt); log_doit(1, LOG_ERR, fmt, ap); va_end(ap); exit(2); } /* Nonfatal error unrelated to a system call. * Print a message and return. */ void log_msg(const char *fmt, ...) { va_list ap; va_start(ap, fmt); log_doit(0, LOG_ERR, fmt, ap); va_end(ap); return; } /* Fatal error unrelated to a system call. * Print a message and terminate. */ void log_quit(const char *fmt, ...) { va_list ap; va_start(ap, fmt); log_doit(0, LOG_ERR, fmt, ap); va_end(ap); exit(2); } /* Print a message and return to caller. * Caller specifies "errnoflag" and "priority". */ static void log_doit(int errnoflag, int priority, const char *fmt, va_list ap) { int errno_save; char buf[MAXLINE]; errno_save = errno; /* value caller might want printed */ vsprintf(buf, fmt, ap); if (errnoflag) sprintf(buf+strlen(buf), ": %s", strerror(errno_save)); strcat(buf, "\n"); if (debug) { fflush(stdout); fputs(buf, stderr); fflush(stderr); } else syslog(priority, buf); return; } #endif /* _DEBUG */ #endif