1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
|
/*********************************************************
* Copyright (C) 2008 VMware, Inc. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation version 2.1 and no later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
*********************************************************/
/**
* @file vmtools.c
*
* Library entry point, utility and memory de-allocation functions for the VMTools
* shared library.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <glib.h>
#if defined(_WIN32)
# include <windows.h>
# include "coreDump.h"
# include "netutil.h"
#endif
#include "vm_assert.h"
#include "vmtools.h"
#include "wiper.h"
#if !defined(__APPLE__)
#include "embed_version.h"
#include "vmtoolslib_version.h"
VM_EMBED_VERSION(VMTOOLSLIB_VERSION_STRING);
#endif
extern void VMTools_ResetLogging(gboolean cleanDefault);
/**
* A convenience function for wrapping an array with a GArray instance.
*
* @param[in] data The array data. The original data is copied into the
* new array.
* @param[in] elemSize The size of each element in the array.
* @param[in] count The number of elements in the array.
*
* @return A new GArray.
*/
GArray *
VMTools_WrapArray(gconstpointer data,
guint elemSize,
guint count)
{
GArray *array;
array = g_array_sized_new(FALSE, TRUE, elemSize, count);
memcpy(array->data, data, elemSize * count);
array->len = count;
return array;
}
/**
* Library constructor. Calls any needed initialization functions.
*
* @param[in] lib The library handle (Win32 only).
*/
#if defined(__GNUC__)
__attribute__((constructor))
#endif
static void
VMToolsDllInit(void *lib)
{
Bool success;
#if defined(_WIN32)
WiperInitData wiperData;
CoreDump_SetUnhandledExceptionFilter();
VMTools_ResetLogging(FALSE);
wiperData.resourceModule = lib;
success = (NetUtil_LoadIpHlpApiDll() == ERROR_SUCCESS);
g_assert(success);
success = Wiper_Init(&wiperData);
g_assert(success);
#else
VMTools_ResetLogging(FALSE);
success = Wiper_Init(NULL);
ASSERT(success);
#endif
}
/**
* Library destructor. Uninitializes any libraries that need to be cleaned up.
*/
#if defined(__GNUC__)
__attribute__((destructor))
#endif
static void
VMToolsDllFini(void)
{
#if defined(_WIN32)
NetUtil_FreeIpHlpApiDll();
#endif
VMTools_ResetLogging(TRUE);
}
/**
* Frees a pointer allocated by the vmtools library.
*
* @param[in] ptr Pointer to memory to be freed.
*/
void
vm_free(void *ptr)
{
free(ptr);
}
#if defined(_WIN32)
/**
* Windows initialization callback. Calls the library's constructor or
* destructor, depending on what is being done.
*
* @param[in] hinstDLL The library handle.
* @param[in] fdwReason Why the callback is being called.
* @param[in] lpvReserved Unused.
*
* @return TRUE.
*/
BOOL WINAPI
DllMain(HINSTANCE hinstDLL,
DWORD fdwReason,
LPVOID lpvReserved)
{
switch (fdwReason) {
case DLL_PROCESS_ATTACH:
VMToolsDllInit(hinstDLL);
break;
case DLL_PROCESS_DETACH:
VMToolsDllFini();
break;
}
return TRUE;
}
#endif
|