X-Git-Url: http://rtime.felk.cvut.cz/gitweb/frescor/frsh.git/blobdiff_plain/6e4d7a62fc3bd32670db9c47d246a3f69360ac78..853c1fefc503fdaeb2385c174d48f605bd9b5d6d:/fres/contract/fres_container.c diff --git a/fres/contract/fres_container.c b/fres/contract/fres_container.c index f040f43..c3656bc 100644 --- a/fres/contract/fres_container.c +++ b/fres/contract/fres_container.c @@ -89,8 +89,24 @@ int fres_block_label_to_string(char *dest, size_t size, enum fres_block_type typ 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, @@ -611,6 +627,15 @@ err: 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) { @@ -623,7 +648,8 @@ 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; @@ -632,15 +658,15 @@ fres_container_to_string(char *dest, size_t size, const struct fres_container *c 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);