VirtualBox

source: vbox/trunk/src/VBox/Runtime/common/log/logformat.cpp@ 5666

Last change on this file since 5666 was 5666, checked in by vboxsync, 17 years ago

PFNSTRFORMAT should return size_t.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 3.4 KB
Line 
1/* $Id: logformat.cpp 5666 2007-11-11 04:25:51Z vboxsync $ */
2/** @file
3 * innotek Portable Runtime - Log Formatter.
4 */
5
6/*
7 * Copyright (C) 2006-2007 innotek GmbH
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License as published by the Free Software Foundation,
13 * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
14 * distribution. VirtualBox OSE is distributed in the hope that it will
15 * be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18
19/*******************************************************************************
20* Header Files *
21*******************************************************************************/
22#include <iprt/log.h>
23#include <iprt/string.h>
24#include <iprt/assert.h>
25#ifdef IN_RING3
26# include <iprt/thread.h>
27# include <iprt/err.h>
28#endif
29
30#include <iprt/stdarg.h>
31#include <iprt/string.h>
32
33
34/*******************************************************************************
35* Internal Functions *
36*******************************************************************************/
37static DECLCALLBACK(size_t) rtlogFormatStr(void *pvArg, PFNRTSTROUTPUT pfnOutput,
38 void *pvArgOutput, const char **ppszFormat,
39 va_list *pArgs, int cchWidth, int cchPrecision,
40 unsigned fFlags, char chArgSize);
41
42
43/**
44 * Partial vsprintf worker implementation.
45 *
46 * @returns number of bytes formatted.
47 * @param pfnOutput Output worker.
48 * Called in two ways. Normally with a string an it's length.
49 * For termination, it's called with NULL for string, 0 for length.
50 * @param pvArg Argument to output worker.
51 * @param pszFormat Format string.
52 * @param args Argument list.
53 */
54RTDECL(size_t) RTLogFormatV(PFNRTSTROUTPUT pfnOutput, void *pvArg, const char *pszFormat, va_list args)
55{
56 return RTStrFormatV(pfnOutput, pvArg, rtlogFormatStr, NULL, pszFormat, args);
57}
58
59
60/**
61 * Callback to format VBox formatting extentions.
62 * See @ref pg_rt_str_format_rt for a reference on the format types.
63 *
64 * @returns The number of bytes formatted.
65 * @param pvArg Formatter argument.
66 * @param pfnOutput Pointer to output function.
67 * @param pvArgOutput Argument for the output function.
68 * @param ppszFormat Pointer to the format string pointer. Advance this till the char
69 * after the format specifier.
70 * @param pArgs Pointer to the argument list. Use this to fetch the arguments.
71 * @param cchWidth Format Width. -1 if not specified.
72 * @param cchPrecision Format Precision. -1 if not specified.
73 * @param fFlags Flags (RTSTR_NTFS_*).
74 * @param chArgSize The argument size specifier, 'l' or 'L'.
75 */
76static DECLCALLBACK(size_t) rtlogFormatStr(void *pvArg, PFNRTSTROUTPUT pfnOutput, void *pvArgOutput,
77 const char **ppszFormat, va_list *pArgs, int cchWidth,
78 int cchPrecision, unsigned fFlags, char chArgSize)
79{
80 char ch = *(*ppszFormat)++;
81
82 AssertMsgFailed(("Invalid logger format type '%%%c%.10s'!\n", ch, *ppszFormat)); NOREF(ch);
83
84 return 0;
85}
86
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette