亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? log.c

?? Open DMT Client C Source code
?? C
字號(hào):
// ----------------------------------------------------------------------------// Copyright 2006-2007, Martin D. Flynn// 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.// You may obtain a copy of the License at// // http://www.apache.org/licenses/LICENSE-2.0// // Unless required by applicable law or agreed to in writing, software// distributed under the License is distributed on an "AS IS" BASIS,// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.// See the License for the specific language governing permissions and// limitations under the License.//// ----------------------------------------------------------------------------// Description://  Debug/Info logging.// ---// Change History://  2006/01/04  Martin D. Flynn//     -Initial release//  2006/07/28  Martin D. Flynn//     -Added temporary suspend feature (typically for debug purposes only)// ----------------------------------------------------------------------------#include <stdio.h>#include <stdlib.h>#include <stdarg.h>#include <string.h>#include <ctype.h>#include "tools/stdtypes.h"#include "tools/utctools.h"#include "tools/strtools.h"#include "tools/buffer.h"#include "tools/io.h"#include "server/log.h"// ----------------------------------------------------------------------------#define USE_STRING_BUFFER#define SUPPORT_SUSPEND#define SUSPEND_BUFFER_SIZE         7000L#define MAX_LOG_STRING_SIZE         1000  // unlikely it will ever be this large// ----------------------------------------------------------------------------/* extract the source file name from the full path (ie. from '__FILE__') */const char *logSrcFile(const char *fn){    if (fn && *fn) {        int fnLen = strlen(fn), fi = fnLen - 1, fLen = 0;        const char *f = (char*)fn, *fp = (char*)0;        for (; fi >= 0; fi--) {            if (fn[fi] == '.') { fp = &fn[fi]; }            if ((fn[fi] == '/') || (fn[fi] == '\\')) {                 f = &fn[fi + 1];                fLen = fp? (fp - f) : (fnLen - (fi + 1));                break;            }        }        // 'f'    - points to the beginning of the source file name        // 'fp'   - points to the (first) '.' before the extension        // 'fLen' - is the length of the source file name without the extension        return f; // just return the source file pointer    } else {        return fn;    }}// ----------------------------------------------------------------------------/* maintain debug mode */static utBool _isDebugMode = utFalse;utBool isDebugMode() { return _isDebugMode; }void setDebugMode(utBool mode) { _isDebugMode = mode; }// ----------------------------------------------------------------------------// allow temporary suspension of logging// (this is generally used for debugging purposes and probably should not be// included in a production system)#if defined(USE_STRING_BUFFER) && defined(SUPPORT_SUSPEND)/* suspend support */static utBool logSuspended = utFalse;static CircleBuffer_t *suspendCB = (CircleBuffer_t*)0;void logSetSuspend(utBool suspend){    if (suspend) {        if (!logSuspended) {            if (!suspendCB) { suspendCB = bufferCreate(SUSPEND_BUFFER_SIZE); }            bufferClear(suspendCB);            logSuspended = utTrue;        }    } else {        if (logSuspended) {            logSuspended = utFalse;            char b[MAX_LOG_STRING_SIZE];            while (bufferGetLength(suspendCB) > 0L) {                bufferGetString(suspendCB, b, sizeof(b));                fprintf(stdout, "%s", b);            }            ioFlushStream(stdout);        }    }}#endif// ----------------------------------------------------------------------------static void _logVMsg(const UInt8 *ftn, int line, const char *type, const char *fmt, va_list ap){    // This function may not be thread-safe.  It is possible that log messages from      // separate threads could be interleaved.    FILE *output = stdout;#if defined(USE_STRING_BUFFER)    char strBuf[MAX_LOG_STRING_SIZE], *sb = strBuf;    int sbLen = sizeof(strBuf);#endif        /* function:line */    if (ftn) {        // print function:line (attempt to remove any prefixing path)        const char *p = ftn, *s = ftn;        for (;*s;s++) { if ((*s=='/')||(*s=='\\')) { p=s+1; } }#if defined(USE_STRING_BUFFER)        snprintf(sb, sbLen, "[%s:%d] ", p, line); {int n=strlen(sb);sb+=n;sbLen-=n;}#else        fprintf(output, "[%s:%d] ", p, line);#endif    }        /* message header */    if (type) {#if defined(USE_STRING_BUFFER)        snprintf(sb, sbLen, "%s", type); {int n=strlen(sb);sb+=n;sbLen-=n;}#else        fprintf(output, "%s", type);#endif    }        /* print the message */#if defined(USE_STRING_BUFFER)    vsnprintf(sb, sbLen, fmt, ap); {int n=strlen(sb);sb+=n;sbLen-=n;}#else    vprintf(fmt, ap);#endif    /* trailing newline */    if (fmt[strlen(fmt)-1] != '\n') {#if defined(USE_STRING_BUFFER)        snprintf(sb, sbLen, "\n"); {int n=strlen(sb);sb+=n;sbLen-=n;}#else        fprintf(output, "\n");#endif    }    #if defined(USE_STRING_BUFFER)    /* print string */#if defined(SUPPORT_SUSPEND)    if (logSuspended) {        bufferPutString(suspendCB, strBuf);        return;    }#endif    fprintf(output, "%s", strBuf);  // check returned error codes?#endif        /* flush output */    ioFlushStream(output);}// ----------------------------------------------------------------------------void logDebug_(const UInt8 *ftn, int line, const char *fmt, ...){    if (isDebugMode()) {        va_list ap;        va_start(ap, fmt);        _logVMsg(ftn, line, "DEBUG: ", fmt, ap);        va_end(ap);    }}void logInfo_(const UInt8 *ftn, int line, const char *fmt, ...){    va_list ap;    va_start(ap, fmt);    _logVMsg(ftn, line, "INFO: ", fmt, ap);    va_end(ap);}void logWarning_(const UInt8 *ftn, int line, const char *fmt, ...){    va_list ap;    va_start(ap, fmt);    _logVMsg(ftn, line, "WARN: ", fmt, ap);    va_end(ap);}void logError_(const UInt8 *ftn, int line, const char *fmt, ...){    va_list ap;    va_start(ap, fmt);    _logVMsg(ftn, line, "ERROR: ", fmt, ap);    va_end(ap);}void logCritical_(const UInt8 *ftn, int line, const char *fmt, ...){    va_list ap;    va_start(ap, fmt);    _logVMsg(ftn, line, "CRITICAL: ", fmt, ap);    va_end(ap);}// ----------------------------------------------------------------------------

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产福利91精品一区二区三区| 欧美草草影院在线视频| 制服.丝袜.亚洲.另类.中文| 久久久久久免费网| 亚洲电影你懂得| 99精品欧美一区二区三区小说| 欧美一区国产二区| 亚洲香蕉伊在人在线观| 成人高清av在线| 精品成人免费观看| 视频一区视频二区中文| 91成人国产精品| 自拍偷自拍亚洲精品播放| 国产伦精品一区二区三区视频青涩| 欧洲一区二区三区在线| 成人免费在线播放视频| 国产精品自拍三区| 精品久久久久久综合日本欧美| 视频一区二区三区入口| 欧美日韩在线播| 一区二区久久久久| 91成人国产精品| 亚洲精品成人在线| 91伊人久久大香线蕉| 国产精品美女久久久久久久| 国产ts人妖一区二区| 久久婷婷国产综合精品青草| 久久国产精品区| 精品国产伦一区二区三区免费| 美女一区二区三区在线观看| 日韩欧美激情四射| 韩国女主播成人在线| 精品久久一区二区三区| 国产精品一级黄| 中文字幕乱码日本亚洲一区二区| 国产成人av福利| 中文字幕中文乱码欧美一区二区| av午夜一区麻豆| 亚洲一区二区三区美女| 91精品婷婷国产综合久久性色| 男男视频亚洲欧美| 久久久午夜精品理论片中文字幕| 成人美女在线视频| 亚洲色图另类专区| 911国产精品| 国产尤物一区二区在线| 国产精品久99| 欧美在线短视频| 麻豆成人在线观看| 国产欧美va欧美不卡在线| 91美女片黄在线| 蜜桃久久精品一区二区| 国产欧美视频一区二区三区| 91美女视频网站| 另类中文字幕网| 国产精品久久久久aaaa| 精品视频在线看| 国内精品久久久久影院一蜜桃| 中文字幕视频一区| 日韩午夜在线影院| 99v久久综合狠狠综合久久| 午夜伊人狠狠久久| 国产亚洲精品超碰| 欧美性生交片4| 国产精品一级黄| 石原莉奈在线亚洲三区| 中文一区一区三区高中清不卡| 欧美精品aⅴ在线视频| 国产乱色国产精品免费视频| 亚洲综合图片区| 国产色综合久久| 欧美日韩中文字幕一区| 成人黄色av电影| 免费视频最近日韩| 亚洲精品日日夜夜| 久久综合99re88久久爱| 欧美日韩精品一区二区三区蜜桃 | 99精品欧美一区二区三区综合在线| 亚洲欧美激情插| 精品国产乱码久久| 欧美日韩国产系列| 不卡的看片网站| 国产精品中文欧美| 免费久久精品视频| 亚洲高清免费观看| 亚洲视频免费看| 日本一区二区三区国色天香| 91麻豆精品国产91| 欧美色图12p| 91在线国产福利| 国产成人aaa| 精品无人码麻豆乱码1区2区| 偷窥国产亚洲免费视频| 亚洲精品免费看| 国产精品超碰97尤物18| 国产日本欧美一区二区| 精品国产伦理网| 日韩美女一区二区三区四区| 欧美日韩成人综合天天影院| 91免费看`日韩一区二区| 成av人片一区二区| 国产成人av电影在线观看| 久久99久久精品| 免费成人美女在线观看| 偷拍自拍另类欧美| 亚洲第一电影网| 亚洲成a人片在线不卡一二三区| 国产精品毛片久久久久久 | 91麻豆精品国产91久久久久久久久| 色综合婷婷久久| 色婷婷精品大在线视频 | 国产69精品一区二区亚洲孕妇| 美女久久久精品| 美女任你摸久久| 另类小说综合欧美亚洲| 国产真实乱偷精品视频免| 黑人精品欧美一区二区蜜桃| 国产在线不卡一区| 国产91露脸合集magnet | 亚洲国产精品成人综合| 国产精品萝li| 亚洲精品综合在线| 亚洲国产成人av网| 日韩av午夜在线观看| 美女一区二区久久| 国产河南妇女毛片精品久久久 | 亚洲国产精品二十页| 中文字幕一区在线观看视频| 中文字幕在线不卡| 亚洲国产中文字幕在线视频综合| 亚洲国产一区视频| 奇米色一区二区| 风间由美中文字幕在线看视频国产欧美 | 成人福利视频在线| 色激情天天射综合网| 欧美日韩精品欧美日韩精品一| 欧美一区二区三区视频在线| 日韩免费福利电影在线观看| 久久久久99精品一区| 亚洲视频你懂的| 奇米一区二区三区av| 国产v综合v亚洲欧| 欧美色综合影院| 久久影院视频免费| 1000部国产精品成人观看| 亚洲一区二区三区四区在线免费观看| 日韩精品五月天| 成人av在线电影| 欧美一区永久视频免费观看| 久久精品一区八戒影视| 一区二区三区高清在线| 国产一区在线观看麻豆| av不卡免费在线观看| 欧美一区二区视频网站| 国产精品乱人伦| 美女精品一区二区| 日本精品一区二区三区高清| 日韩精品一区二区三区视频播放 | 欧美aⅴ一区二区三区视频| 成人综合在线观看| 欧美日本一区二区在线观看| 国产亚洲成aⅴ人片在线观看| 亚洲高清免费在线| 成人免费视频一区二区| 欧美一区二区三区性视频| 国产精品伦一区| 国产一区二区在线视频| 欧美日本韩国一区二区三区视频| 亚洲国产激情av| 久久国产精品区| 777久久久精品| 一区二区不卡在线视频 午夜欧美不卡在| 久久99精品视频| 欧美妇女性影城| 亚洲综合999| 色综合久久六月婷婷中文字幕| 久久久久久久久久久久久夜| 玖玖九九国产精品| 欧美日韩一区三区四区| 亚洲精品日韩一| 成人精品视频.| 国产精品素人一区二区| 国产乱人伦偷精品视频免下载| 欧美一区二区成人| 日韩成人一区二区三区在线观看| 色婷婷av一区二区三区gif| 国产精品污www在线观看| 国产91丝袜在线观看| 国产女人aaa级久久久级| 国产一区二区精品久久| 久久精品一区八戒影视| 国产成人在线影院| 国产免费成人在线视频| 国产成都精品91一区二区三| 欧美激情一二三区| av在线播放一区二区三区| 国产精品久久午夜夜伦鲁鲁| 福利一区在线观看| 亚洲三级在线免费| 欧洲日韩一区二区三区|