Merge branch 'megan/t23400-fix_parse_GID_abort' into 'master'
See merge request SchedMD/dev/slurm!1878
diff --git a/src/common/data.c b/src/common/data.c
index ef86168..c822eaa 100644
--- a/src/common/data.c
+++ b/src/common/data.c
@@ -1459,40 +1459,38 @@
return count;
}
-static int _convert_data_string(data_t *data)
+static void _convert_data_string(data_t *data)
{
_check_magic(data);
switch (data->type) {
case TYPE_STRING_INLINE:
case TYPE_STRING_PTR:
- return SLURM_SUCCESS;
+ break;
case TYPE_BOOL:
data_set_string(data, (data->data.bool_u ? "true" : "false"));
- return SLURM_SUCCESS;
+ break;
case TYPE_NULL:
data_set_string(data, "");
- return SLURM_SUCCESS;
+ break;
case TYPE_FLOAT:
{
char *str = xstrdup_printf("%lf", data->data.float_u);
data_set_string_own(data, str);
- return SLURM_SUCCESS;
+ break;
}
case TYPE_INT_64:
{
char *str = xstrdup_printf("%"PRId64, data->data.int_u);
data_set_string_own(data, str);
- return SLURM_SUCCESS;
+ break;
}
default:
- return ESLURM_DATA_CONV_FAILED;
+ break;
}
-
- return ESLURM_DATA_CONV_FAILED;
}
-static int _convert_data_force_bool(data_t *data)
+static void _convert_data_force_bool(data_t *data)
{
_check_magic(data);
@@ -1504,23 +1502,21 @@
case TYPE_STRING_PTR:
/* non-empty string but not recognized format */
data_set_bool(data, true);
- return SLURM_SUCCESS;
+ break;
case TYPE_BOOL:
- return SLURM_SUCCESS;
+ break;
case TYPE_NULL:
data_set_bool(data, false);
- return SLURM_SUCCESS;
+ break;
case TYPE_FLOAT:
data_set_bool(data, data->data.float_u != 0);
- return SLURM_SUCCESS;
+ break;
case TYPE_INT_64:
data_set_bool(data, data->data.int_u != 0);
- return SLURM_SUCCESS;
+ break;
default:
- return ESLURM_DATA_CONV_FAILED;
+ break;
}
-
- return ESLURM_DATA_CONV_FAILED;
}
static int _convert_data_null(data_t *data)
@@ -1890,37 +1886,29 @@
switch (match) {
case DATA_TYPE_STRING:
- return _convert_data_string(data) ? DATA_TYPE_NONE :
- DATA_TYPE_STRING;
+ _convert_data_string(data);
+ break;
case DATA_TYPE_BOOL:
- return _convert_data_force_bool(data) ? DATA_TYPE_NONE :
- DATA_TYPE_BOOL;
+ _convert_data_force_bool(data);
+ break;
case DATA_TYPE_INT_64:
- return _convert_data_int(data, true) ? DATA_TYPE_NONE :
- DATA_TYPE_INT_64;
+ (void) _convert_data_int(data, true);
+ break;
case DATA_TYPE_FLOAT:
- return _convert_data_float(data) ? DATA_TYPE_NONE :
- DATA_TYPE_FLOAT;
+ (void) _convert_data_float(data);
+ break;
case DATA_TYPE_NULL:
- return _convert_data_null(data) ? DATA_TYPE_NONE :
- DATA_TYPE_NULL;
+ (void) _convert_data_null(data);
+ break;
case DATA_TYPE_NONE:
- if (!_convert_data_null(data))
- return DATA_TYPE_NULL;
+ /* If a conversion succeeds skip calling the others */
+ if (!_convert_data_null(data) ||
+ !_convert_data_int(data, false) ||
+ !_convert_data_float(data) ||
+ !_convert_data_int(data, true) || !_convert_data_bool(data))
+ ; /* blank on purpose */
- if (!_convert_data_int(data, false))
- return DATA_TYPE_INT_64;
-
- if (!_convert_data_float(data))
- return DATA_TYPE_FLOAT;
-
- if (!_convert_data_int(data, true))
- return DATA_TYPE_INT_64;
-
- if (!_convert_data_bool(data))
- return DATA_TYPE_BOOL;
-
- return DATA_TYPE_NONE;
+ break;
case DATA_TYPE_DICT:
if (data->type == TYPE_DICT)
return DATA_TYPE_DICT;
@@ -1929,7 +1917,7 @@
return DATA_TYPE_DICT;
/* data_parser should be used for this conversion instead. */
- return DATA_TYPE_NONE;
+ break;
case DATA_TYPE_LIST:
if (data->type == TYPE_LIST)
return DATA_TYPE_LIST;
@@ -1938,12 +1926,14 @@
return DATA_TYPE_LIST;
/* data_parser should be used for this conversion instead. */
- return DATA_TYPE_NONE;
+ break;
case DATA_TYPE_MAX:
fatal_abort("%s: unexpected data type", __func__);
+ default:
+ fatal_abort("%s: invalid conversion requested", __func__);
}
- fatal_abort("%s: invalid conversion requested", __func__);
+ return data_get_type(data);
}
static data_for_each_cmd_t _convert_list_entry(data_t *data, void *arg)
diff --git a/src/common/data.h b/src/common/data.h
index 2377686..eb4cfb6 100644
--- a/src/common/data.h
+++ b/src/common/data.h
@@ -282,7 +282,7 @@
* IN data structure to try to type and convert
* IN match try to detect this type only
* or DATA_TYPE_NONE to give best guess as to data type
- * RET new data type or DATA_TYPE_NONE on no change
+ * RET (new or unchanged) data type of data
*/
extern data_type_t data_convert_type(data_t *data, const data_type_t match);