Bool StrUtil_GetNextIntToken(int32 *out, // OUT : parsed int unsigned int *index, // IN/OUT: Index to start at const char *str, // IN : String to parse const char *delimiters) // IN : Chars separating tokens { char *resultStr; Bool valid = FALSE; ASSERT(out); ASSERT(index); ASSERT(str); ASSERT(delimiters); resultStr = StrUtil_GetNextToken(index, str, delimiters); if (resultStr == NULL) { return FALSE; } valid = StrUtil_StrToInt(out, resultStr); free(resultStr); return valid; }
gboolean ToolsDaemonTcloSyncDriverFreeze(RpcInData *data) { static char resultBuffer[DEFAULT_RESULT_MSG_MAX_LENGTH]; VixError err = VIX_OK; char *driveList = NULL; char *timeout = NULL; int timeoutVal; DECLARE_SYNCDRIVER_ERROR(sysError); ToolsAppCtx *ctx = data->appCtx; GSource *timer; Debug(">ToolsDaemonTcloSyncDriverFreeze\n"); /* * Parse the arguments */ driveList = ToolsDaemonTcloGetQuotedString(data->args, &data->args); timeout = ToolsDaemonTcloGetQuotedString(data->args, &data->args); /* * Validate the arguments. */ if (NULL == driveList || NULL == timeout) { err = VIX_E_INVALID_ARG; Debug("ToolsDaemonTcloSyncDriverFreeze: Failed to get string args\n"); goto abort; } if (!StrUtil_StrToInt(&timeoutVal, timeout) || timeoutVal < 0) { Debug("ToolsDaemonTcloSyncDriverFreeze: Bad args, timeout '%s'\n", timeout); err = VIX_E_INVALID_ARG; goto abort; } Debug("SYNCDRIVE: Got request to freeze '%s', timeout %d\n", driveList, timeoutVal); /* Disallow multiple freeze calls. */ if (gSyncDriverHandle != SYNCDRIVER_INVALID_HANDLE) { err = VIX_E_OBJECT_IS_BUSY; goto abort; } /* Perform the actual freeze. */ if (!SyncDriver_Freeze(driveList, &gSyncDriverHandle) || SyncDriver_QueryStatus(gSyncDriverHandle, INFINITE) != SYNCDRIVER_IDLE) { Debug("ToolsDaemonTcloSyncDriverFreeze: Failed to Freeze drives '%s'\n", driveList); err = VIX_E_FAIL; sysError = SYNCDRIVERERROR; if (gSyncDriverHandle != SYNCDRIVER_INVALID_HANDLE) { SyncDriver_Thaw(gSyncDriverHandle); SyncDriver_CloseHandle(&gSyncDriverHandle); } goto abort; } /* Start the timer callback to automatically thaw. */ if (0 != timeoutVal) { Debug("ToolsDaemonTcloSyncDriverFreeze: Starting timer callback %d\n", timeoutVal); timer = g_timeout_source_new(timeoutVal * 10); VMTOOLSAPP_ATTACH_SOURCE(ctx, timer, ToolsDaemonSyncDriverThawCallback, NULL, NULL); g_source_unref(timer); } abort: /* * These were allocated by ToolsDaemonTcloGetQuotedString. */ free(driveList); free(timeout); /* * All Foundry tools commands return results that start with a * foundry error and a guest-OS-specific error. */ Str_Sprintf(resultBuffer, sizeof resultBuffer, "%"FMT64"d %d", err, sysError); Debug("<ToolsDaemonTcloSyncDriverFreeze\n"); return RPCIN_SETRETVALS(data, resultBuffer, TRUE); }