📄 mpr.c
字号:
/** * @file mpr.c * @brief Mpr initialization * @overview * @remarks Most routines in this file are not thread-safe. It is the callers * responsibility to perform all thread synchronization. *//* * @copy default * * Copyright (c) Mbedthis Software LLC, 2003-2006. All Rights Reserved. * * This software is distributed under commercial and open source licenses. * You may use the GPL open source license described below or you may acquire * a commercial license from Mbedthis Software. You agree to be fully bound * by the terms of either license. Consult the LICENSE.TXT distributed with * this software for full details. * * This software is open source; 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. See the GNU General Public License for more * details at: http://www.mbedthis.com/downloads/gplLicense.html * * This program is distributed WITHOUT ANY WARRANTY; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * This GPL license does NOT permit incorporating this software into * proprietary programs. If you are unable to comply with the GPL, you must * acquire a commercial license to use this software. Commercial licenses * for this software and support services are available from Mbedthis * Software at http://www.mbedthis.com * * @end *//********************************** Includes **********************************//* * We need to use the underlying str(cpy) routines to implement our safe * alternatives */#if !DOXYGEN#define UNSAFE_FUNCTIONS_OK 1#endif#include "mpr.h"/******************************************************************************//* * Initialize the MPR. Create the top level memory context. This routine is * the first call an MPR application must do. If using MprServices, the * creation of an Mpr object will call this routine. */MprApp *mprInit(MprAllocCback cback){ return mprInitEx(cback, 0);}/******************************************************************************//* * Add a shell parameter then do the regular init */MprApp *mprInitEx(MprAllocCback cback, void *shell){ MprApp *app; app = (MprApp*) mprAllocInit(cback); mprAssert(app); if (app == 0) { return 0; } app->name = mprStrdup(app, BLD_PRODUCT); app->title = mprStrdup(app, BLD_NAME); app->version = mprStrdup(app, BLD_VERSION); mprSetShell(app, shell); app->table = mprCreateSymbolTable(app, 0); if (mprStartFileServices(app) < 0) { mprAllocTerm(app); return 0; }#if BLD_FEATURE_MULTITHREAD mprInitThreads(app);#endif /* * See if any of the preceeding allocations failed */ if (mprGetAllocErrors(app) > 0) { mprAllocTerm(app); return 0; } /* * Mark all blocks allocated so far as required. They will then be * omitted from leak reports. */ mprSetRequiredAlloc(app, 1); return app;}/******************************************************************************//* * Terminate the MPR. If doStats is true, then output a memory allocation * report. */void mprTerm(MprApp *app, bool doStats){#if BLD_FEATURE_ALLOC_STATS if (doStats) { mprPrintAllocReport(app, 1, "MPR Memory Allocation Report"); }#endif#if BLD_FEATURE_MULTITHREAD mprTermThreads(app);#endif mprStopFileServices(app);#if BLD_DEBUG mprValidateAllocTree(app);#endif mprAllocTerm(app);}/******************************************************************************/bool mprIsExiting(MprCtx ctx){ MprApp *app; app = mprGetApp(ctx); if (app == 0) { return 1; } return app->flags & MPR_APP_EXITING;}/******************************************************************************/int mprHasAllocError(MprCtx ctx){ MprApp *app; app = mprGetApp(ctx); if (app == 0) { return 1; } return app->flags & MPR_APP_ALLOC_ERROR;}/******************************************************************************/void mprSignalExit(MprCtx ctx){ MprApp *app; app = mprGetApp(ctx); app->flags |= MPR_APP_EXITING;}/******************************************************************************/void mprSignalAllocError(MprCtx ctx){ MprApp *app; app = mprGetApp(ctx); app->flags |= MPR_APP_ALLOC_ERROR;}/******************************************************************************/int mprSetAppName(MprCtx ctx, const char *name, const char *title, const char *version){ MprApp *app; app = mprGetApp(ctx); if (name) { mprFree(app->name); if ((app->name = mprStrdup(ctx, name)) == 0) { return MPR_ERR_CANT_ALLOCATE; } } if (title) { mprFree(app->title); if ((app->title = mprStrdup(ctx, title)) == 0) { return MPR_ERR_CANT_ALLOCATE; } } if (version) { mprFree(app->version); if ((app->version = mprStrdup(ctx, version)) == 0) { return MPR_ERR_CANT_ALLOCATE; } } return 0;}/******************************************************************************/const char *mprGetAppName(MprCtx ctx){ MprApp *app; app = mprGetApp(ctx); return app->name;}/******************************************************************************/const char *mprGetAppTitle(MprCtx ctx){ MprApp *app; app = mprGetApp(ctx); return app->title;}/******************************************************************************/const char *mprGetAppVersion(MprCtx ctx){ MprApp *app; app = mprGetApp(ctx); return app->version;}/******************************************************************************/int mprSetKeyValue(MprCtx ctx, const char *key, void *ptr){ MprApp *app; app = mprGetApp(ctx); if (mprInsertSymbol(app->table, key, ptr) == 0) { return MPR_ERR_CANT_WRITE; } return 0;}/******************************************************************************/int mprRemoveKeyValue(MprCtx ctx, const char *key){ MprApp *app; app = mprGetApp(ctx); return mprRemoveSymbol(app->table, key);}/******************************************************************************/void *mprGetKeyValue(MprCtx ctx, const char *key){ MprApp *app; app = mprGetApp(ctx); return mprLookupSymbol(app->table, key);}/******************************************************************************/bool mprGetDebugMode(MprCtx ctx){ return mprGetApp(ctx)->debugMode;}/******************************************************************************/void mprSetDebugMode(MprCtx ctx, bool on){ mprGetApp(ctx)->debugMode = on;}/******************************************************************************/void mprSetLogHandler(MprCtx ctx, MprLogHandler handler){ mprGetApp(ctx)->logHandler = handler;}/******************************************************************************/MprLogHandler mprGetLogHandler(MprCtx ctx){ return mprGetApp(ctx)->logHandler;}#if UNUSED/******************************************************************************/void mprSetMprInstance(MprCtx ctx, void *mprInstance){ mprGetApp(ctx)->mprInstance = mprInstance;}/******************************************************************************/void *mprGetMprInstance(MprCtx ctx){ return mprGetApp(ctx)->mprInstance;}#endif/******************************************************************************/const char *mprCopyright(){ return "Copyright (c) Mbedthis Software LLC, 2003-2006. All Rights Reserved.";}/******************************************************************************//* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim:tw=78 * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -