VBoxReplaceDll.cpp revision 6ebc06c9cd87d26f64680c2b58e6805b6b504728
49ad08ab15f3b96d2d5ba5134a0506dd7b27fdf1vboxsync/** $Id$ */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/** @file
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * VBoxSF - OS/2 Shared Folders, the FS and FSD level IFS EPs
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/*
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Copyright (C) 2013 Oracle Corporation
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync *
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * available from http://www.virtualbox.org. This file is free software;
88c504b1c053e580e42d5fc90ef2ccedc50c65bdvboxsync * you can redistribute it and/or modify it under the terms of the GNU
2369dc897927db3f9d3c044b8f35348680d4b831vboxsync * General Public License (GPL) as published by the Free Software
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
28140a038e3e4b8a04d8f246a55fe206b130c204vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
49ad08ab15f3b96d2d5ba5134a0506dd7b27fdf1vboxsync */
49ad08ab15f3b96d2d5ba5134a0506dd7b27fdf1vboxsync
49ad08ab15f3b96d2d5ba5134a0506dd7b27fdf1vboxsync
49ad08ab15f3b96d2d5ba5134a0506dd7b27fdf1vboxsync/*******************************************************************************
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync* Header Files *
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync*******************************************************************************/
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define INCL_BASE
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include <os2.h>
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include <stdio.h>
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include <string.h>
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncstatic int usage(const char *argv0)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync char *psz1 = strrchr(argv0, '\\');
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (psz1)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync argv0 = psz1 + 1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync psz1 = strrchr(argv0, '/');
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (psz1)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync argv0 = psz1 + 1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync psz1 = strrchr(argv0, ':');
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (psz1)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync argv0 = psz1 + 1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync printf("Usage: %s <dll1> [dll2 ...[dllN]]\n"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "\n"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "Tells the kernel to cache the specified DLLs in memory and close the\n"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "files on disk, allowing new DLL versions to be installed.\n"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "\n"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "Copyright (C) 2013 Oracle Corporation\n",
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync argv0);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return 0;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncint main(int argc, char **argv)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
70f0bd50f20879a58549999c7871cf0ddefc35e0vboxsync int fOptions = 1;
70f0bd50f20879a58549999c7871cf0ddefc35e0vboxsync int cProcessed = 0;
70f0bd50f20879a58549999c7871cf0ddefc35e0vboxsync int i;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (i = 1; i < argc; i++)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if ( fOptions
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync && argv[i][0] == '-')
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (!strcmp(argv[i], "--"))
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync fOptions = 0;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync else if ( !strcmp(argv[i], "--help")
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync || !strcmp(argv[i], "-help")
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync || !strcmp(argv[i], "-h")
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync || !strcmp(argv[i], "-?") )
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return usage(argv[0]);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync else if ( !strcmp(argv[i], "--version")
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync || !strcmp(argv[i], "-V") )
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync printf("$Revision$\n");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return 0;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync else
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync fprintf(stderr, "syntax error: Invalid option '%s'!\n", argv[i]);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return 2;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync else
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /*
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Replace the specified DLL.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync APIRET rc = DosReplaceModule((PCSZ)argv[i], NULL, NULL);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (rc == NO_ERROR)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync printf("info: Successfully cached '%s'.\n", argv[i]);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync else
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync fprintf(stderr, "error: DosReplaceModule failed with rc=%u on '%s'.\n", rc, argv[i]);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return 1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync cProcessed++;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (cProcessed == 0)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync fprintf(stderr, "syntax error: No DLLs specified. (Consult --help for usage.)\n");
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return 1;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync }
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync return 0;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync