diff options
Diffstat (limited to 'src/power')
-rw-r--r-- | src/power/LMI_AssociatedPowerManagementServiceProvider.c | 3 | ||||
-rw-r--r-- | src/power/LMI_PowerManagementCapabilitiesProvider.c | 3 | ||||
-rw-r--r-- | src/power/LMI_PowerManagementServiceProvider.c | 7 | ||||
-rw-r--r-- | src/power/power.c | 21 |
4 files changed, 30 insertions, 4 deletions
diff --git a/src/power/LMI_AssociatedPowerManagementServiceProvider.c b/src/power/LMI_AssociatedPowerManagementServiceProvider.c index a7748cb..f02531c 100644 --- a/src/power/LMI_AssociatedPowerManagementServiceProvider.c +++ b/src/power/LMI_AssociatedPowerManagementServiceProvider.c @@ -84,6 +84,9 @@ static CMPIStatus LMI_AssociatedPowerManagementServiceEnumInstances( int count; unsigned short *list = power_available_requested_power_states(mi->hdl, &count); + if (list == NULL) { + CMReturn(CMPI_RC_ERR_FAILED); + } LMI_AssociatedPowerManagementService_Init_AvailableRequestedPowerStates(&w, count); for (int i = 0; i < count; i++) { LMI_AssociatedPowerManagementService_Set_AvailableRequestedPowerStates(&w, i, list[i]); diff --git a/src/power/LMI_PowerManagementCapabilitiesProvider.c b/src/power/LMI_PowerManagementCapabilitiesProvider.c index 1024ea9..47632f2 100644 --- a/src/power/LMI_PowerManagementCapabilitiesProvider.c +++ b/src/power/LMI_PowerManagementCapabilitiesProvider.c @@ -75,6 +75,9 @@ static CMPIStatus LMI_PowerManagementCapabilitiesEnumInstances( int count; unsigned short *list = power_available_requested_power_states(mi->hdl, &count); + if (list == NULL) { + CMReturn(CMPI_RC_ERR_FAILED); + } LMI_PowerManagementCapabilities_Init_PowerStatesSupported(&w, count); for (int i = 0; i < count; i++) { LMI_PowerManagementCapabilities_Set_PowerStatesSupported(&w, i, list[i]); diff --git a/src/power/LMI_PowerManagementServiceProvider.c b/src/power/LMI_PowerManagementServiceProvider.c index f5256bd..644af40 100644 --- a/src/power/LMI_PowerManagementServiceProvider.c +++ b/src/power/LMI_PowerManagementServiceProvider.c @@ -288,9 +288,10 @@ KUint32 LMI_PowerManagementService_RequestPowerStateChange( KSetStatus2(_cb, status, ERR_INVALID_PARAMETER, "PowerState argument is missing"); return result; } - power_request_power_state(mi->hdl, PowerState->value); - - KSetStatus(status, OK); + status->rc = power_request_power_state(mi->hdl, PowerState->value); + if (status->rc != CMPI_RC_OK) { + KUint32_Set(&result, 4); // Failed + } KUint32_Set(&result, 4096); return result; } diff --git a/src/power/power.c b/src/power/power.c index 646aa45..96960be 100644 --- a/src/power/power.c +++ b/src/power/power.c @@ -78,6 +78,9 @@ Power *power_new(const CMPIBroker *_cb, const CMPIContext *ctx) { lmi_init(provider_name, _cb, ctx, provider_config_defaults); Power *power = malloc(sizeof(Power)); + if (power == NULL) { + return NULL; + } power->broker = _cb; power->instances = 0; power->requestedPowerState = LMI_AssociatedPowerManagementService_RequestedPowerState_Unknown; @@ -104,7 +107,9 @@ void power_destroy(Power *power) Power *power_ref(const CMPIBroker *_cb, const CMPIContext *ctx) { if (_power == NULL) { - _power = power_new(_cb, ctx); + if ((_power = power_new(_cb, ctx)) == NULL) { + return NULL; + } } MUTEX_LOCK(_power); _power->instances++; @@ -114,6 +119,9 @@ Power *power_ref(const CMPIBroker *_cb, const CMPIContext *ctx) void power_unref(Power *power) { + if (power == NULL) { + return; + } MUTEX_LOCK(power); power->instances--; MUTEX_UNLOCK(power); @@ -246,6 +254,9 @@ int power_request_power_state(Power *power, unsigned short state) int count, found = 0; unsigned short *states = power_available_requested_power_states(power, &count); + if (states == NULL) { + return CMPI_RC_ERR_FAILED; + } for (int i = 0; i < count; ++i) { if (states[i] == state) { found = 1; @@ -259,6 +270,10 @@ int power_request_power_state(Power *power, unsigned short state) } PowerStateChangeJob *powerStateChangeJob = malloc(sizeof(PowerStateChangeJob)); + if (powerStateChangeJob == NULL) { + error("Memory allocation failed"); + return CMPI_RC_ERR_FAILED; + } powerStateChangeJob->id = job_max_id++; powerStateChangeJob->broker = power->broker; powerStateChangeJob->power = power; @@ -303,6 +318,10 @@ int power_request_power_state(Power *power, unsigned short state) unsigned short *power_available_requested_power_states(Power *power, int *count) { unsigned short *list = malloc(17 * sizeof(unsigned short)); + if (list == NULL) { + error("Memory allocation failed"); + return NULL; + } int i = 0; /* 1 Other |