int fres_block_resource_to_string(char *dest, size_t size, enum fres_block_type type,
const void *block_data)
{
+ static const char *res_names[] = {
+ [FRSH_RT_PROCESSOR] = "CPU",
+ [FRSH_RT_NETWORK] = "NET",
+ [FRSH_RT_MEMORY] = "MEM",
+ [FRSH_RT_DISK] = "DISK"
+ };
+
const fres_block_resource *b = block_data;
- return snprintf(dest, size, "%d.%d\n", b->resource_type, b->resource_id);
+ char res[10];
+ const char *r = NULL;
+ if (b->resource_type >= 0 &&
+ b->resource_type < sizeof(res_names)/sizeof(res_names[0]))
+ r = res_names[b->resource_type];
+ if (!r) {
+ snprintf(res, sizeof(res), "%d", b->resource_type);
+ r = res;
+ }
+ return snprintf(dest, size, "%s.%d\n", r, b->resource_id);
}
int fres_block_basic_to_string(char *dest, size_t size, enum fres_block_type type,
return CORBA_FALSE;
}
+int fres_block_to_string(char *dest, size_t size, enum fres_block_type type,
+ const void *block_data)
+{
+ if (block_registry[type]->to_string)
+ return block_registry[type]->to_string(dest, size, type, block_data);
+ else
+ return 0;
+}
+
int
fres_container_to_string(char *dest, size_t size, const struct fres_container *c)
{
case FRES_BLOCK_EMPTY:
/* nothing to do */
break;
- case FRES_BLOCK_DATA:
+ case FRES_BLOCK_DATA: {
+ char tmp[1000];
ret = snprintf(dest, size, "block %s (%d)\n",
block_registry[type]->name, type);
if (ret < 0) goto err;
size -= ret;
dest += ret;
}
- if (block_registry[type]->to_string) {
- char tmp[1000];
- block_registry[type]->to_string(tmp, sizeof(tmp), type, b->u.data);
+ ret = fres_block_to_string(tmp, sizeof(tmp), type, b->u.data);
+ if (ret > 0) {
ret = fres_indent_str(dest, size, tmp, 2);
written += ret;
size -= ret;
dest += ret;
}
break;
+ }
case FRES_BLOCK_STREAM:
ret = snprintf(dest, size, "unknown block (%d)\n",
type);