vasyslog.c

説明を見る。
00001 /*
00002  *  TOPPERS Software
00003  *      Toyohashi Open Platform for Embedded Real-Time Systems
00004  * 
00005  *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
00006  *                              Toyohashi Univ. of Technology, JAPAN
00007  *  Copyright (C) 2004-2008 by Embedded and Real-Time Systems Laboratory
00008  *              Graduate School of Information Science, Nagoya Univ., JAPAN
00009  * 
00010  *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
00011  *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
00012  *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
00013  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
00014  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
00015  *      スコード中に含まれていること.
00016  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
00017  *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
00018  *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
00019  *      の無保証規定を掲載すること.
00020  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
00021  *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
00022  *      と.
00023  *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
00024  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
00025  *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
00026  *        報告すること.
00027  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
00028  *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
00029  *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
00030  *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
00031  *      免責すること.
00032  * 
00033  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
00034  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
00035  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
00036  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
00037  *  の責任を負わない.
00038  * 
00039  *  @(#) $Id: vasyslog.c 755 2008-03-07 17:42:37Z hiro $
00040  */
00041 
00042 /*
00043  *      可変数引数のシステムログライブラリ
00044  */
00045 
00046 #include <t_stddef.h>
00047 #include <t_syslog.h>
00048 #include <stdarg.h>
00049 
00050 void
00051 syslog(uint_t prio, const char *format, ...)
00052 {
00053     SYSLOG  syslog;
00054     va_list ap;
00055     uint_t  i;
00056     char    c;
00057     bool_t  lflag;
00058 
00059     syslog.logtype = LOG_TYPE_COMMENT;
00060     syslog.loginfo[0] = (intptr_t) format;
00061     i = 1U;
00062     va_start(ap, format);
00063 
00064     while ((c = *format++) != '\0' && i < TMAX_LOGINFO) {
00065         if (c != '%') {
00066             continue;
00067         }
00068 
00069         lflag = false;
00070         c = *format++;
00071         while ('0' <= c && c <= '9') {
00072             c = *format++;
00073         }
00074         if (c == 'l') {
00075             lflag = true;
00076             c = *format++;
00077         }
00078         switch (c) {
00079         case 'd':
00080             syslog.loginfo[i++] = lflag ? (intptr_t) va_arg(ap, long_t)
00081                                         : (intptr_t) va_arg(ap, int_t);
00082             break;
00083         case 'u':
00084         case 'x':
00085         case 'X':
00086             syslog.loginfo[i++] = lflag ? (intptr_t) va_arg(ap, ulong_t)
00087                                         : (intptr_t) va_arg(ap, uint_t);
00088             break;
00089         case 'p':
00090             syslog.loginfo[i++] = (intptr_t) va_arg(ap, void *);
00091             break;
00092         case 'c':
00093             syslog.loginfo[i++] = (intptr_t) va_arg(ap, int);
00094             break;
00095         case 's':
00096             syslog.loginfo[i++] = (intptr_t) va_arg(ap, const char *);
00097             break;
00098         case '\0':
00099             format--;
00100             break;
00101         default:
00102             break;
00103         }
00104     }
00105     va_end(ap);
00106     (void) syslog_wri_log(prio, &syslog);
00107 }

Copyright © 2008 by Kijineko Inc.

ホームページ制作