VirtualBox

Changeset 37670 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Jun 28, 2011 6:17:16 PM (14 years ago)
Author:
vboxsync
Message:

Main/win/svcmain.cpp: fix command line parsing, and generally make the code change work

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/src-server/win/svcmain.cpp

    r37667 r37670  
    1616 */
    1717
     18#include <Windows.h>
    1819#include <stdio.h>
     20#include <stdlib.h>
    1921
    2022#include "VBox/com/defs.h"
     
    3032
    3133#include <VBox/err.h>
     34#include <iprt/buildconfig.h>
     35#include <iprt/initterm.h>
     36#include <iprt/string.h>
     37#include <iprt/uni.h>
     38#include <iprt/path.h>
    3239#include <iprt/getopt.h>
    33 #include <iprt/initterm.h>
    34 #include <iprt/path.h>
    3540
    3641#include <atlbase.h>
     
    150155/////////////////////////////////////////////////////////////////////////////
    151156//
    152 extern "C" int WINAPI _tWinMain(HINSTANCE hInstance,
    153     HINSTANCE /*hPrevInstance*/, LPTSTR lpCmdLine, int /*nShowCmd*/)
    154 {
    155     lpCmdLine = GetCommandLine(); /* this line necessary for _ATL_MIN_CRT */
     157int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/, int /*nShowCmd*/)
     158{
     159    LPCTSTR lpCmdLine = GetCommandLine(); /* this line necessary for _ATL_MIN_CRT */
    156160
    157161    /* Need to parse the command line before initializing the VBox runtime. */
     
    229233
    230234    RTGETOPTSTATE   GetOptState;
    231     int vrc = RTGetOptInit(&GetOptState, argc, argv, &s_aOptions[0], RT_ELEMENTS(s_aOptions), 1, 0 /*fFlags*/);
     235    int vrc = RTGetOptInit(&GetOptState, __argc, __argv, &s_aOptions[0], RT_ELEMENTS(s_aOptions), 1, 0 /*fFlags*/);
    232236    AssertRC(vrc);
    233237
     
    280284
    281285            case 'h':
     286            {
    282287                TCHAR txt[]= L"Options:\n\n"
    283288                             L"/RegServer:\tregister COM out-of-proc server\n"
     
    288293                fRun = false;
    289294                MessageBox(NULL, txt, title, MB_OK);
    290                 break;
     295                return 0;
     296            }
    291297
    292298            case 'V':
     299            {
    293300                char *psz = NULL;
    294301                RTStrAPrintf(&psz, "%sr%s\n", RTBldCfgVersion(), RTBldCfgRevisionStr());
    295                 TCHAR *txt;
    296                 RTStrToUni(psz, &txt);
     302                PRTUTF16 txt = NULL;
     303                RTStrToUtf16(psz, &txt);
    297304                TCHAR title[]=_T("Version");
    298305                fRun = false;
    299306                MessageBox(NULL, txt, title, MB_OK);
    300307                RTStrFree(psz);
    301                 RTUniFree(txt);
    302                 break;
     308                RTUtf16Free(txt);
     309                return 0;
     310            }
    303311
    304312            default:
    305313                /** @todo this assumes that stderr is visible, which is not
    306314                 * true for standard Windows applications. */
    307                 return RTGetOptPrintError(vrc, &ValueUnion);
    308         }
    309     }
    310 
    311     if (!pszLogFile)
    312     {
    313         char szLogFile[RTPATH_MAX];
    314         vrc = com::GetVBoxUserHomeDirectory(szLogFile, sizeof(szLogFile));
    315         if (RT_SUCCESS(vrc))
    316             vrc = RTPathAppend(szLogFile, sizeof(szLogFile), "VBoxSVC.log");
    317         if (RT_SUCCESS(vrc))
    318             pszLogFile = RTStrDup(szLogFile);
    319     }
     315                /* continue on command line errors... */
     316                RTGetOptPrintError(vrc, &ValueUnion);
     317        }
     318    }
     319
    320320    /* Only create the log file when running VBoxSVC normally, but not when
    321321     * registering/unregistering or calling the helper functionality. */
    322322    if (fRun)
     323    {
     324        if (!pszLogFile)
     325        {
     326            char szLogFile[RTPATH_MAX];
     327            vrc = com::GetVBoxUserHomeDirectory(szLogFile, sizeof(szLogFile));
     328            if (RT_SUCCESS(vrc))
     329                vrc = RTPathAppend(szLogFile, sizeof(szLogFile), "VBoxSVC.log");
     330            if (RT_SUCCESS(vrc))
     331                pszLogFile = RTStrDup(szLogFile);
     332        }
    323333        VBoxSVCLogRelCreate(pszLogFile, cHistory, uHistoryFileTime, uHistoryFileSize);
     334    }
    324335
    325336    int nRet = 0;
     
    342353            nRet = _Module.RegisterServer(TRUE);
    343354        }
    344         if (!pszPipeName)
     355        if (pszPipeName)
    345356        {
    346357            Log(("SVCMAIN: Processing Helper request (cmdline=\"%s\")...\n", pszPipeName));
    347358
    348             if (!*pipeName)
     359            if (!*pszPipeName)
    349360                vrc = VERR_INVALID_PARAMETER;
    350361
     
    353364                /* do the helper job */
    354365                SVCHlpServer server;
    355                 vrc = server.open(pipeName.c_str());
     366                vrc = server.open(pszPipeName);
    356367                if (RT_SUCCESS(vrc))
    357368                    vrc = server.run();
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