VirtualBox

Ticket #2417: VBoxHeadless-noout.diff

File VBoxHeadless-noout.diff, 2.9 KB (added by xfernandez, 16 years ago)
  • .cpp

    old new  
    937937
    938938
    939939#ifndef VBOX_WITH_HARDENING
     940/*===========================================================================*/
     941/* Command line conversion routines                                          */
     942/*===========================================================================*/
     943
     944/* Returns the first character in the next argument                          */
     945
     946char *winDrvCmdLineGetNextFirst(char *lpCmdLine) {
     947  while (*lpCmdLine == ' ' && *lpCmdLine != '\0')
     948    lpCmdLine++;
     949  return (*lpCmdLine == '\0') ? NULL : lpCmdLine;
     950}
     951
     952
     953/* Returns the first character after the next argument                       */
     954
     955char *winDrvCmdLineGetNextEnd(char *lpCmdLine) {
     956  int InString = FALSE;
     957 
     958  while (((*lpCmdLine != ' ') && (*lpCmdLine != '\0')) ||
     959    (InString && (*lpCmdLine != '\0'))) {
     960    if (*lpCmdLine == '\"')
     961      InString = !InString;
     962    lpCmdLine++;
     963  }
     964  return lpCmdLine;
     965}
     966
     967/* Returns an argv vector and takes argc as a pointer parameter              */
     968/* Must free memory argv on exit                                             */
     969
     970char **winDrvCmdLineMakeArgv(char *lpCmdLine, int *argc) {
     971  int elements = 0, i;
     972  char *tmp;
     973  char **argv;
     974  char *argstart, *argend;
     975 
     976  tmp = winDrvCmdLineGetNextFirst(lpCmdLine);
     977  if (tmp != 0) {
     978    while ((tmp = winDrvCmdLineGetNextFirst(tmp)) != NULL) {
     979      tmp = winDrvCmdLineGetNextEnd(tmp);
     980      elements++;
     981    }
     982  }
     983  argv = (char **) malloc(4*(elements + 2));
     984  argv[0] = "VBoxHeadless.exe";
     985  argend = lpCmdLine;
     986  for (i = 1; i <= elements; i++) {
     987    argstart = winDrvCmdLineGetNextFirst(argend);
     988    argend = winDrvCmdLineGetNextEnd(argstart);
     989    if (*argstart == '\"')
     990      argstart++;
     991    if (*(argend - 1) == '\"')
     992      argend--;
     993    *argend++ = '\0';
     994    argv[i] = argstart;
     995  }
     996  argv[elements + 1] = NULL;
     997  *argc = elements + 1;
     998  return argv;
     999}
     1000
    9401001/**
    9411002 * Main entry point.
    942  */
    943 int main (int argc, char **argv, char **envp)
    944 {
    945     // initialize VBox Runtime
    946     RTR3InitAndSUPLib();
    947     return TrustedMain (argc, argv, envp);
    948 }
     1003 */
     1004int WINAPI WinMain(HINSTANCE hInstance,     // handle to current instance
     1005                   HINSTANCE hPrevInstance, // handle to previous instance
     1006                   LPSTR lpCmdLine,         // pointer to command line
     1007                   int nCmdShow) {          // show state of window
     1008  char *cmdline = (char *) malloc(strlen(lpCmdLine) + 1);
     1009  char **argv;
     1010  int argc;
     1011  int result;
     1012 
     1013  strcpy(cmdline, lpCmdLine);
     1014  argv = winDrvCmdLineMakeArgv(cmdline, &argc);
     1015
     1016  // initialize VBox Runtime
     1017  RTR3InitAndSUPLib();
     1018  result = TrustedMain (argc, argv, _environ);
     1019  free(cmdline);
     1020  free(argv);
     1021  return result;
     1022}
     1023
    9491024#endif /* !VBOX_WITH_HARDENING */
    9501025

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