VirtualBox

Changeset 54580 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Mar 2, 2015 2:52:24 PM (10 years ago)
Author:
vboxsync
Message:

VBoxControl: Added a 'writelog' command (untested).

Location:
trunk/src/VBox/Additions/common/VBoxControl
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/common/VBoxControl/VBoxControl.cpp

    r54520 r54580  
    2222#include <iprt/cpp/autores.h>
    2323#include <iprt/buildconfig.h>
     24#include <iprt/getopt.h>
    2425#include <iprt/initterm.h>
    2526#include <iprt/mem.h>
     
    9192    WRITE_CORE_DUMP,
    9293#endif
     94    WRITE_LOG,
    9395    TAKE_SNAPSHOT,
    9496    SAVE_STATE,
     
    100102};
    101103
    102 static void usage(enum VBoxControlUsage eWhich = USAGE_ALL)
     104static RTEXITCODE usage(enum VBoxControlUsage eWhich = USAGE_ALL)
    103105{
    104106    RTPrintf("Usage:\n\n");
     
    148150        doUsage("", g_pszProgName, "writecoredump");
    149151#endif
     152    if (eWhich == WRITE_LOG || eWhich == USAGE_ALL)
     153        doUsage("", g_pszProgName, "writelog [--] <msg>");
    150154    if (eWhich == TAKE_SNAPSHOT || eWhich == USAGE_ALL)
    151155        doUsage("", g_pszProgName, "takesnapshot");
     
    160164    if (eWhich == VERSION   || eWhich == USAGE_ALL)
    161165        doUsage("", g_pszProgName, "version");
     166
     167    return RTEXITCODE_SUCCESS;
    162168}
    163169
    164170/** @} */
     171
     172
     173/**
     174 * Implementation of the '--version' option.
     175 *
     176 * @returns RTEXITCODE_SUCCESS
     177 */
     178static RTEXITCODE printVersion(void)
     179{
     180    RTPrintf("%sr%u\n", VBOX_VERSION_STRING, RTBldCfgRevision());
     181    return RTEXITCODE_SUCCESS;
     182}
     183
    165184
    166185/**
     
    173192static RTEXITCODE VBoxControlError(const char *pszFormat, ...)
    174193{
     194    /** @todo prefix with current command. */
    175195    va_list va;
    176196    va_start(va, pszFormat);
     
    182202
    183203/**
     204 * Displays a getopt error.
     205 *
     206 * @returns RTEXITCODE_FAILURE.
     207 * @param   ch          The RTGetOpt return value.
     208 * @param   pValueUnion The RTGetOpt return data.
     209 */
     210static RTEXITCODE VBoxCtrlGetOptError(int ch, PCRTGETOPTUNION pValueUnion)
     211{
     212    /** @todo prefix with current command. */
     213    return RTGetOptPrintError(ch, pValueUnion);
     214}
     215
     216
     217/**
    184218 * Displays an syntax error message.
    185219 *
     
    190224static RTEXITCODE VBoxControlSyntaxError(const char *pszFormat, ...)
    191225{
     226    /** @todo prefix with current command. */
    192227    va_list va;
    193228    va_start(va, pszFormat);
     
    17241759
    17251760/**
     1761 * @callback_method_impl{FNVBOXCTRLCMDHANDLER, Command: writelog}
     1762 */
     1763static RTEXITCODE handleWriteLog(int argc, char *argv[])
     1764{
     1765    static const RTGETOPTDEF s_aOptions[] =
     1766    {
     1767        { "--dummy", 'D', RTGETOPT_REQ_NOTHING }
     1768    };
     1769
     1770    RTGETOPTSTATE GetOptState;
     1771    int rc = RTGetOptInit(&GetOptState, argc, argv, s_aOptions, RT_ELEMENTS(s_aOptions),
     1772                          0 /*iFirst*/, RTGETOPTINIT_FLAGS_OPTS_FIRST);
     1773    if (RT_SUCCESS(rc))
     1774    {
     1775        RTGETOPTUNION   ValueUnion;
     1776        int             ch;
     1777        while ((ch == RTGetOpt(&GetOptState, &ValueUnion)) != 0)
     1778        {
     1779            switch (ch)
     1780            {
     1781                case VINF_GETOPT_NOT_OPTION:
     1782                    rc = VbglR3WriteLog(ValueUnion.psz, strlen(ValueUnion.psz));
     1783                    if (RT_FAILURE(rc))
     1784                        return VBoxControlError("VbglR3WriteLog: %Rrc", rc);
     1785                    break;
     1786
     1787                case 'h': return usage(WRITE_LOG);
     1788                case 'V': return printVersion();
     1789                default:
     1790                    return VBoxCtrlGetOptError(ch, &ValueUnion);
     1791            }
     1792        }
     1793    }
     1794    else
     1795        return VBoxControlError("RTGetOptInit: %Rrc", rc);
     1796    return RTEXITCODE_SUCCESS;
     1797}
     1798
     1799
     1800/**
    17261801 * @callback_method_impl{FNVBOXCTRLCMDHANDLER, Command: takesnapshot}
    17271802 */
     
    17661841    if (argc)
    17671842        return VBoxControlSyntaxError("getversion does not take any arguments");
    1768     RTPrintf("%sr%u\n", VBOX_VERSION_STRING, RTBldCfgRevision());
    1769     return RTEXITCODE_SUCCESS;
     1843    return printVersion();
    17701844}
    17711845
     
    18131887    { "dpc",                    handleDpc },
    18141888#endif
     1889    { "writelog",               handleWriteLog },
    18151890    { "takesnapshot",           handleTakeSnapshot },
    18161891    { "savestate",              handleSaveState },
     
    18581933        {
    18591934            /* Print version number, and do nothing else. */
    1860             RTPrintf("%sr%u\n", VBOX_VERSION_STRING, RTBldCfgRevision());
     1935            printVersion();
    18611936            fOnlyInfo = true;
    18621937            fShowLogo = false;
  • trunk/src/VBox/Additions/common/VBoxControl/testcase/tstVBoxControl.cpp

    r44324 r54580  
    200200
    201201#endif
     202
     203VBGLR3DECL(int) VbglR3WriteLog(const char *pch, size_t cch)
     204{
     205    NOREF(pch); NOREF(cch);
     206    return VINF_SUCCESS;
     207}
     208
Note: See TracChangeset for help on using the changeset viewer.

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