File: arm4module.c
Function: ArmSubbufferMetricValues_set_value
Error: returning (PyObject*)NULL without setting an exception
2294 static PyObject *
2295 ArmSubbufferMetricValues_set_value (ArmSubbufferMetricValues *self, PyObject *args)
2296 {
2297 	int slot;
2298 	int format;
2299 	int usage;
2300 	int parsed;
2301 	arm_int64_t value64;
2302 	arm_int32_t value32;
2303 	arm_int32_t div32;
2304 	const char *string_ptr = NULL;
2305 	
2306 	int i;
2307 	int index;
2308 
2309 	/* Poor man's polymorphism */
2310 	parsed = PyArg_ParseTuple(args, "iii" PARSE_INT64_FMT ":set_value", &slot, &format, &usage, &value64);
when PyArg_ParseTuple() succeeds
2311 	if (!parsed)
taking False path
2312 	{
2313 		PyErr_Clear ();
2314         parsed = PyArg_ParseTuple(args, "iii" PARSE_INT32_FMT PARSE_INT32_FMT ":set_value", &slot, &format, &usage, &value32, &div32);
2315 	}
2316 	if (!parsed)
taking False path
2317 	{
2318 		PyErr_Clear ();
2319 		if (!PyArg_ParseTuple(args, "iis:set_value", &slot, &usage, &string_ptr))
2320 			return NULL;
2321 	}
2322 	
2323 	if ((slot < ARM_METRIC_MIN_ARRAY_INDEX) || (slot > ARM_METRIC_MAX_ARRAY_INDEX))
when considering range: -0x80000000 <= value <= 6
taking False path
2324 		return NULL;
2325 
2326 	if (string_ptr && (strlen (string_ptr) > 0))
taking False path
2327 		format = ARM_METRIC_FORMAT_STRING32;
2328 
2329 	/* Allocate the metric binding array as required */
2330 	if (self->arm_buffer.metric_value_array == NULL)
when treating unknown const struct arm_metric_t * from arm4module.c:2330 as non-NULL
taking False path
2331 	{
2332 		self->arm_buffer.metric_value_array = calloc (sizeof (arm_metric_t), ARM_METRIC_MAX_COUNT);
2333 		memset ((void *) self->arm_buffer.metric_value_array, 0, sizeof (arm_metric_t) * ARM_METRIC_MAX_COUNT);
2334 	}
2335 	
2336 	/* See if an entry already exists */
2337 	index = self->arm_buffer.count; /* Default index for a new value */
2338 	for (i = 0; i < self->arm_buffer.count; i++)
when considering range: -0x80000000 <= value <= 0
taking False path
2339 	{
2340 		if (self->arm_buffer.metric_value_array [i].slot == slot)
2341 		{
2342 			index = i;
2343 			break;
2344 		}
2345 	}
2346 	if (index == self->arm_buffer.count)
when taking True path
2347 		self->arm_buffer.count++;
2348 	
2349 	/* Copy the values */
2350 	if (index >= ARM_METRIC_MAX_ARRAY_INDEX)
when considering range: 6 <= value <= 0x7fffffff
taking True path
2351 		return NULL;
2352 	((arm_metric_t *) self->arm_buffer.metric_value_array) [index].slot = slot;
2353 	((arm_metric_t *) self->arm_buffer.metric_value_array) [index].format = format;
2354 	((arm_metric_t *) self->arm_buffer.metric_value_array) [index].usage = usage;
2355 	((arm_metric_t *) self->arm_buffer.metric_value_array) [index].valid = ARM_TRUE;
2356 
2357 	switch (format)
2358 	{
2359 	case ARM_METRIC_FORMAT_COUNTER32:
2360 		((arm_metric_t *) self->arm_buffer.metric_value_array) [index].metric_u.counter32 = value64;
2361 		break;
2362 
2363 	case ARM_METRIC_FORMAT_COUNTER64:
2364 		((arm_metric_t *) self->arm_buffer.metric_value_array) [index].metric_u.counter64 = value64;
2365 		break;
2366 
2367 	case ARM_METRIC_FORMAT_GAUGE32:
2368 		((arm_metric_t *) self->arm_buffer.metric_value_array) [index].metric_u.gauge32 = value64;
2369 		break;
2370 
2371 	case ARM_METRIC_FORMAT_GAUGE64:
2372 		((arm_metric_t *) self->arm_buffer.metric_value_array) [index].metric_u.gauge64 = value64;
2373 		break;
2374 
2375 	case ARM_METRIC_FORMAT_NUMERICID32:
2376 		((arm_metric_t *) self->arm_buffer.metric_value_array) [index].metric_u.numericid32 = value64;
2377 		break;
2378 
2379 	case ARM_METRIC_FORMAT_NUMERICID64:
2380 		((arm_metric_t *) self->arm_buffer.metric_value_array) [index].metric_u.numericid64 = value64;
2381 		break;
2382 
2383 	case ARM_METRIC_FORMAT_CNTRDIVR32:
2384 		((arm_metric_t *) self->arm_buffer.metric_value_array) [index].metric_u.counterdivisor32.counter = value32;
2385 		((arm_metric_t *) self->arm_buffer.metric_value_array) [index].metric_u.counterdivisor32.divisor = div32;
2386 		break;
2387 
2388 	case ARM_METRIC_FORMAT_GAUGEDIVR32:
2389 		((arm_metric_t *) self->arm_buffer.metric_value_array) [index].metric_u.gaugedivisor32.gauge = value32;
2390 		((arm_metric_t *) self->arm_buffer.metric_value_array) [index].metric_u.gaugedivisor32.divisor = div32;
2391 		break;
2392 
2393 	case ARM_METRIC_FORMAT_STRING32:
2394 		((arm_metric_t *) self->arm_buffer.metric_value_array) [index].metric_u.string32 = strndup (string_ptr, ARM_METRIC_STRING32_MAX_CHARS);
2395 		break;
2396 	}
2397 
2398 	Py_INCREF(Py_None);
2399 	return Py_None;
2400 }
returning (PyObject*)NULL without setting an exception