mirror of
https://github.com/VincentWei/MiniGUI.git
synced 2026-09-28 16:17:09 +08:00
163 lines
3.9 KiB
C
163 lines
3.9 KiB
C
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// 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 <http://www.gnu.org/licenses/>.
|
|
*
|
|
* 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
|
|
* <http://www.minigui.com/blog/minigui-licensing-policy/>.
|
|
*/
|
|
/*
|
|
** 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 <stdarg.h> /* ANSI C header file */
|
|
#include <errno.h> /* for definition of errno */
|
|
|
|
#include "common.h"
|
|
|
|
#ifdef _MGRM_PROCESSES
|
|
|
|
#include <syslog.h>
|
|
|
|
#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
|
|
|