diff options
Diffstat (limited to 'src/base/state.c')
| -rw-r--r-- | src/base/state.c | 76 |
1 files changed, 11 insertions, 65 deletions
diff --git a/src/base/state.c b/src/base/state.c index 652c943..acef753 100644 --- a/src/base/state.c +++ b/src/base/state.c @@ -103,50 +103,12 @@ error: return Error; } -int -FromString_link_type(char const *S, link_type *Type) -{ - for(link_type i = 0; i < link_type_COUNT; ++i) - { - if(strcmp(link_type_Names[i], S) == 0) - { - *Type = i; - return 0; - } - } - return -1; -} - -char * -Parse_link_type(link_type *E, ucl_object_t const *root, char const *Position) -{ - if(root == NULL) - { - *E = link_type_direct; - return NULL; - } - char *Error; - UCL_CHECK_ROOT(STRING); - char const *S = ucl_object_tostring(root); - if(FromString_link_type(S, E) == 0) return NULL; - asprintf(&Error, "%s invalid link type '%s'", Position, S); -error: - return Error; -} - char * Parse_link_configuration(link_configuration *E, ucl_object_t const *root, char const *Position) { char *Error; size_t EndpointAt = 0; UCL_CHECK_ROOT(OBJECT); - { - char *NewPosition; - asprintf(&NewPosition, "%s.type", Position); - Error = Parse_link_type(&E->Type, ucl_object_lookup(root, "type"), NewPosition); - free(NewPosition); - if(Error != NULL) goto error; - } ucl_object_t const *peer0 = ucl_object_lookup(root, "peer0"); { char *NewPosition; @@ -178,6 +140,8 @@ Parse_link(link_ *E, ucl_object_t const *root, char const *Position) size_t EndpointAt = 0; bool Configuration = false; UCL_CHECK_ROOT(OBJECT); + ucl_object_t const *id = ucl_object_lookup(root, "id"); + UCL_CHECK_OPTIONAL(id, INT); ucl_object_t const *configuration = ucl_object_lookup(root, "configuration"); { char *NewPosition; @@ -187,24 +151,15 @@ Parse_link(link_ *E, ucl_object_t const *root, char const *Position) if(Error != NULL) goto error; Configuration = true; } - switch(E->Configuration.Type) + if(id != NULL) { - case link_type_direct: break; - case link_type_pipe: + s64 ID = ucl_object_toint(id); + if(ID < 0 || ID > INT32_MAX) { - ucl_object_t const *id = ucl_object_lookup(root, "id"); - UCL_CHECK(id, INT); - s64 ID = ucl_object_toint(id); - if(ID < 0 || ID > INT32_MAX) - { - asprintf(&Error, "%s id invalid (%ld)", Position, ID); - goto error; - } - E->pipe.ID = (u32)ID; - break; + asprintf(&Error, "%s id invalid (%ld)", Position, ID); + goto error; } - case link_type_COUNT: - default: __builtin_unreachable(); + E->PipeID = (u32)ID; } ucl_object_t const *peer0 = ucl_object_lookup(root, "peer0"); { @@ -365,8 +320,6 @@ void Save_link_configuration(jprint_state *S, link_configuration const *E) { JPrintObjectBegin(S); - JPrintMember(S, "type"); - JPrint_string(S, link_type_Names[E->Type]); JPrintMember(S, "peer0"); Save_endpoint_configuration(S, E->Peer + 0); JPrintMember(S, "peer1"); @@ -380,17 +333,10 @@ Save_link(jprint_state *S, link_ const *E) JPrintObjectBegin(S); JPrintMember(S, "configuration"); Save_link_configuration(S, &E->Configuration); - switch(E->Configuration.Type) + if(E->PipeID != 0) { - case link_type_direct: break; - case link_type_pipe: - { - JPrintMember(S, "id"); - JPrint_ssize_t(S, E->pipe.ID); - break; - } - case link_type_COUNT: - default: __builtin_unreachable(); + JPrintMember(S, "id"); + JPrint_ssize_t(S, E->PipeID); } JPrintMember(S, "peer0"); Save_endpoint(S, E->Peer + 0); |
