static int StatHostTime(void) { int64 hostSecs; int64 hostUsecs; time_t sec; char buf[256]; gchar *timeUtf8; Backdoor_proto bp; bp.in.cx.halfs.low = BDOOR_CMD_GETTIMEFULL; Backdoor(&bp); if (bp.out.ax.word == BDOOR_MAGIC) { hostSecs = ((uint64)bp.out.si.word << 32) | bp.out.dx.word; } else { /* Falling back to older command. */ bp.in.cx.halfs.low = BDOOR_CMD_GETTIME; Backdoor(&bp); hostSecs = bp.out.ax.word; } hostUsecs = bp.out.bx.word; if (hostSecs <= 0) { ToolsCmd_PrintErr("%s", SU_(stat.gettime.failed, "Unable to get host time.\n")); return EX_TEMPFAIL; } sec = hostSecs + (hostUsecs / 1000000); if (strftime(buf, sizeof buf, "%d %b %Y %H:%M:%S", localtime(&sec)) == 0) { ToolsCmd_PrintErr("%s", SU_(stat.formattime.failed, "Unable to format host time.\n")); return EX_TEMPFAIL; } timeUtf8 = g_locale_to_utf8(buf, -1, NULL, NULL, NULL); if (timeUtf8 == NULL) { ToolsCmd_PrintErr("%s", SU_(stat.formattime.failed, "Unable to format host time.\n")); return EX_TEMPFAIL; } g_print("%s\n", timeUtf8); g_free(timeUtf8); return EXIT_SUCCESS; }
static int OpenHandle(VMGuestLibHandle *glHandle, // OUT: The guestlib handle VMGuestLibError *glError) // OUT: The errors when opening the handle { *glError = VMGuestLib_OpenHandle(glHandle); if (*glError != VMGUESTLIB_ERROR_SUCCESS) { ToolsCmd_PrintErr(SU_(stat.openhandle.failed, "OpenHandle failed: %s\n"), VMGuestLib_GetErrorText(*glError)); return EX_UNAVAILABLE; } *glError = VMGuestLib_UpdateInfo(*glHandle); if (*glError != VMGUESTLIB_ERROR_SUCCESS) { ToolsCmd_PrintErr(SU_(stat.update.failed, "UpdateInfo failed: %s\n"), VMGuestLib_GetErrorText(*glError)); return EX_TEMPFAIL; } return 0; // We don't return EXIT_SUCCESSS to indicate that this is not // an exit code }
static int ScriptSet(const char *progName, // IN: program name (argv[0]) const char *apm, // IN: APM name const char *path) // IN: Verbosity flag { const char *confName; int ret = EXIT_SUCCESS; GKeyFile *confDict = NULL; GError *err = NULL; if (!File_Exists(path)) { ToolsCmd_PrintErr(SU_(script.notfound, "%s doesn't exist.\n"), path); return EX_OSFILE; } confName = GetConfName(apm); if (!confName) { ToolsCmd_UnknownEntityError(progName, SU_(script.operation, "operation"), apm); return EX_USAGE; } confDict = LoadConfFile(); g_key_file_set_string(confDict, "powerops", confName, path); if (!VMTools_WriteConfig(NULL, confDict, &err)) { ToolsCmd_PrintErr(SU_(script.write.error, "Error writing config: %s\n"), err->message); g_clear_error(&err); ret = EX_TEMPFAIL; } g_key_file_free(confDict); return ret; }
static int StatProcessorSpeed(void) { int32 speed; Backdoor_proto bp; bp.in.cx.halfs.low = BDOOR_CMD_GETMHZ; Backdoor(&bp); speed = bp.out.ax.word; if (speed <= 0) { ToolsCmd_PrintErr("%s", SU_(stat.getspeed.failed, "Unable to get processor speed.\n")); return EX_TEMPFAIL; } g_print(SU_(stat.processorSpeed.info, "%u MHz\n"), speed); return EXIT_SUCCESS; }
static int ScriptToggle(const char *progName, // IN: program name (argv[0]) const char *apm, // IN: APM name Bool enable) // IN: status { const char *path; const char *confName; int ret = EXIT_SUCCESS; GKeyFile *confDict; GError *err = NULL; confName = GetConfName(apm); if (!confName) { ToolsCmd_UnknownEntityError(progName, SU_(script.operation, "operation"), apm); return EX_USAGE; } confDict = LoadConfFile(); if (!enable) { path = ""; } else { path = GuestApp_GetDefaultScript(confName); } g_key_file_set_string(confDict, "powerops", confName, path); if (!VMTools_WriteConfig(NULL, confDict, &err)) { ToolsCmd_PrintErr(SU_(script.write.error, "Error writing config: %s\n"), err->message); g_clear_error(&err); ret = EX_TEMPFAIL; } g_key_file_free(confDict); return ret; }
static int StatGetRaw(const char *encoding, // IN const char *stat, // IN const char *param) // IN { int exitStatus = EXIT_SUCCESS; VMGuestLibError glError; char *result = NULL; size_t resultSize = 0; char *arg = g_strdup_printf("%s %s", stat, param); glError = VMGuestLib_StatGet(encoding, arg, &result, &resultSize); if (glError != VMGUESTLIB_ERROR_SUCCESS) { ToolsCmd_PrintErr(SU_(stat.get.failed, "Failed to get stat: %s\n"), VMGuestLib_GetErrorText(glError)); exitStatus = EX_TEMPFAIL; } else { g_print("%*s", (int)resultSize, result); } VMGuestLib_StatFree(result, resultSize); g_free(arg); return exitStatus; }
static int StatGetCpuLimit(void) { int exitStatus = EXIT_SUCCESS; uint32 cpuLimit; VMGuestLibHandle glHandle; VMGuestLibError glError; exitStatus = OpenHandle(&glHandle, &glError); if (exitStatus) { return exitStatus; } glError = VMGuestLib_GetCpuLimitMHz(glHandle, &cpuLimit); if (glError != VMGUESTLIB_ERROR_SUCCESS) { ToolsCmd_PrintErr(SU_(stat.cpumax.failed, "Failed to get CPU limit: %s\n"), VMGuestLib_GetErrorText(glError)); exitStatus = EX_TEMPFAIL; } else { g_print(SU_(stat.cpuLimit.info, "%u MHz\n"), cpuLimit); } VMGuestLib_CloseHandle(glHandle); return exitStatus; }
static int StatGetMemorySwapped(void) { int exitStatus = EXIT_SUCCESS; uint32 memSwapped; VMGuestLibHandle glHandle; VMGuestLibError glError; exitStatus = OpenHandle(&glHandle, &glError); if (exitStatus) { return exitStatus; } glError = VMGuestLib_GetMemSwappedMB(glHandle, &memSwapped); if (glError != VMGUESTLIB_ERROR_SUCCESS) { ToolsCmd_PrintErr(SU_(stat.memswap.failed, "Failed to get swapped memory: %s\n"), VMGuestLib_GetErrorText(glError)); exitStatus = EX_TEMPFAIL; } else { g_print(SU_(stat.memorySwapped.info, "%u MB\n"), memSwapped); } VMGuestLib_CloseHandle(glHandle); return exitStatus; }
static int StatGetSessionID(void) { int exitStatus = EXIT_SUCCESS; uint64 session; VMGuestLibHandle glHandle; VMGuestLibError glError; exitStatus = OpenHandle(&glHandle, &glError); if (exitStatus) { return exitStatus; } glError = VMGuestLib_GetSessionId(glHandle, &session); if (glError != VMGUESTLIB_ERROR_SUCCESS) { ToolsCmd_PrintErr(SU_(stat.getsession.failed, "Failed to get session ID: %s\n"), VMGuestLib_GetErrorText(glError)); exitStatus = EX_TEMPFAIL; } else { g_print("0x%"FMT64"x\n", session); } VMGuestLib_CloseHandle(glHandle); return exitStatus; }
static int GetConfEntry(const char *progName, // IN: program name (argv[0]) const char *apm, // IN: apm name ScriptType type) // IN: Script type (default or current) { gchar *entry; GKeyFile *confDict; const char *confName; int len; int ret; confName = GetConfName(apm); if (!confName) { ToolsCmd_UnknownEntityError(progName, SU_(script.operation, "operation"), apm); return EX_USAGE; } confDict = LoadConfFile(); switch (type) { case Current: entry = g_key_file_get_string(confDict, "powerops", confName, NULL); if (entry) { break; } /* Fall through */ default: entry = g_strdup(GuestApp_GetDefaultScript(confName)); break; } len = strlen(entry); if (len > 0) { /* If script path is not absolute, assume the Tools install path. */ if (!g_path_is_absolute(entry)) { char *defaultPath = GuestApp_GetInstallPath(); char *tmp; Bool quoted; ASSERT(defaultPath != NULL); /* Cope with old configs that added quotes around script paths. */ quoted = (entry[0] == '"' && entry[len - 1] == '"'); tmp = g_strdup_printf("%s%c%.*s", defaultPath, DIRSEPC, quoted ? len - 2 : len, quoted ? entry + 1 : entry); vm_free(defaultPath); g_free(entry); entry = tmp; } g_print("%s\n", entry); ret = EXIT_SUCCESS; } else { ToolsCmd_PrintErr(SU_(script.unknownop, "No script for operation %s.\n"), apm); ret = EX_TEMPFAIL; } g_free(entry); g_key_file_free(confDict); return ret; }