/* * Create a service descriptor from an array of methods. */ int NaClSrpcServiceHandlerCtor(NaClSrpcService* service, const NaClSrpcHandlerDesc* handler_desc) { char* service_str; nacl_abi_size_t str_length; NaClSrpcMethodDesc* methods = NULL; uint32_t method_count = 0; /* Initialize the struct, so that failures can be cleaned up properly. */ service->service_string = NULL; service->service_string_length = 0; service->rpc_descr = NULL; service->rpc_count = 0; /* Add the service_discovery method to the table. */ methods = BuildMethods(handler_desc, &method_count); if (NULL == methods) { goto cleanup; } service_str = BuildSDString(methods, method_count, &str_length); if (NULL == service_str) { goto cleanup; } service->service_string = service_str; service->service_string_length = str_length; service->rpc_descr = methods; service->rpc_count = method_count; return 1; cleanup: FreeMethods(methods, method_count); return 0; }
/* * Create a service descriptor from an array of methods. */ int NaClSrpcServiceHandlerCtor(NaClSrpcService* service, const NaClSrpcHandlerDesc* handler_desc) { char* service_str; nacl_abi_size_t str_length; NaClSrpcMethodDesc* methods; uint32_t method_count; /* Add the service_discovery method to the table. */ methods = BuildMethods(handler_desc, &method_count); if (NULL == methods) { return 0; } service_str = BuildSDString(methods, method_count, &str_length); if (NULL == service_str) { /* BUG: leaks methods */ return 0; } service->service_string = service_str; service->service_string_length = str_length; service->rpc_descr = methods; service->rpc_count = method_count; return 1; }