SOL_API void sol_oic_resource_unref(struct sol_oic_resource *r) { SOL_NULL_CHECK(r); OIC_RESOURCE_CHECK_API(r); r->refcnt--; if (!r->refcnt) { struct sol_str_slice *slice; uint16_t idx; free((char *)r->href.data); free((char *)r->device_id.data); SOL_VECTOR_FOREACH_IDX (&r->types, slice, idx) free((char *)slice->data); sol_vector_clear(&r->types); SOL_VECTOR_FOREACH_IDX (&r->interfaces, slice, idx) free((char *)slice->data); sol_vector_clear(&r->interfaces); free(r); } }
static void found_resource(struct sol_oic_client *cli, struct sol_oic_resource *res, void *data) { const char *query = NULL; struct sol_str_slice *slice; uint16_t idx; char addr[SOL_INET_ADDR_STRLEN]; if (!sol_network_addr_to_str(&res->addr, addr, sizeof(addr))) { SOL_WRN("Could not convert network address to string"); return; } printf("Found resource: coap://%s%.*s <observable: %s>\n", addr, (int)res->href.len, res->href.data, res->observable ? "yes" : "no"); printf("Resource types:\n"); SOL_VECTOR_FOREACH_IDX (&res->types, slice, idx) printf("\t\t%.*s\n", (int)slice->len, slice->data); printf("Resource interfaces:\n"); SOL_VECTOR_FOREACH_IDX (&res->interfaces, slice, idx) printf("\t\t%.*s\n", (int)slice->len, slice->data); printf("Issuing GET %.*s on resource...\n", (int)res->href.len, res->href.data); sol_oic_client_resource_request(cli, res, SOL_COAP_METHOD_GET, NULL, 0, got_get_response, data); printf("\n"); }
static bool on_write(void *data, int fd, uint32_t active_flags) { struct subprocess_data *mdata = data; int err = 0; if (active_flags & SOL_FD_FLAGS_ERR) err = -EBADF; else err = out_write(mdata); if (err < 0) { uint16_t i; struct write_data *w; SOL_VECTOR_FOREACH_IDX (&mdata->write_data, w, i) sol_blob_unref(w->blob); sol_vector_clear(&mdata->write_data); } if (mdata->write_data.len == 0) { mdata->watches.out = NULL; return false; } return true; }
void process_subprocess_close(struct sol_flow_node *node, void *data) { struct subprocess_data *mdata = data; if (mdata->fork_run) sol_platform_linux_fork_run_stop(mdata->fork_run); if (mdata->watches.in) sol_fd_del(mdata->watches.in); if (mdata->watches.err) sol_fd_del(mdata->watches.err); if (mdata->watches.out) { struct write_data *w; uint16_t i; sol_fd_del(mdata->watches.out); SOL_VECTOR_FOREACH_IDX (&mdata->write_data, w, i) sol_blob_unref(w->blob); sol_vector_clear(&mdata->write_data); } close(mdata->pipes.in[0]); close(mdata->pipes.in[1]); close(mdata->pipes.err[0]); close(mdata->pipes.err[1]); close(mdata->pipes.out[0]); close(mdata->pipes.out[1]); free(mdata->command); }
void sml_matrix_clear(struct sml_matrix *m) { uint16_t i; struct sol_vector *line; SOL_VECTOR_FOREACH_IDX (&m->data, line, i) sol_vector_clear(line); sol_vector_clear(&m->data); }
static void http_composed_client_type_dispose(struct sol_flow_node_type *type) { struct http_composed_client_type *self = (struct http_composed_client_type *)type; struct http_composed_client_port_out *port_out; struct http_composed_client_port_in *port_in; uint16_t i; #ifdef SOL_FLOW_NODE_TYPE_DESCRIPTION_ENABLED struct sol_flow_node_type_description *desc; desc = (struct sol_flow_node_type_description *)self->base.description; if (desc) { if (desc->ports_in) { for (i = 0; i < self->ports_in.len; i++) free((struct sol_flow_port_description *)desc->ports_in[i]); free((struct sol_flow_port_description **)desc->ports_in); } if (desc->ports_out) { for (i = 0; i < self->ports_out.len; i++) free((struct sol_flow_port_description *)desc->ports_out[i]); free((struct sol_flow_port_description **)desc->ports_out); } free(desc); } #endif SOL_VECTOR_FOREACH_IDX (&self->ports_in, port_in, i) free(port_in->name); SOL_VECTOR_FOREACH_IDX (&self->ports_out, port_out, i) free(port_out->name); sol_vector_clear(&self->ports_in); sol_vector_clear(&self->ports_out); free(self); }
static int network_up_start(const struct sol_platform_linux_micro_module *mod, const char *service) { uint16_t idx; struct sol_network_link *itr; const struct sol_vector *links; links = sol_network_get_available_links(); if (!links) return 0; SOL_VECTOR_FOREACH_IDX (links, itr, idx) sol_network_link_up(itr->index); return 0; }
static void on_fork_exit(void *data, uint64_t pid, int status) { struct subprocess_data *mdata = data; mdata->fork_run = NULL; if (mdata->watches.in) sol_fd_del(mdata->watches.in); if (mdata->watches.err) sol_fd_del(mdata->watches.err); if (mdata->watches.out) { struct write_data *w; uint16_t i; sol_fd_del(mdata->watches.out); SOL_VECTOR_FOREACH_IDX (&mdata->write_data, w, i) sol_blob_unref(w->blob); sol_vector_clear(&mdata->write_data); } mdata->watches.in = NULL; mdata->watches.err = NULL; mdata->watches.out = NULL; sol_flow_send_irange_value_packet(mdata->node, SOL_FLOW_NODE_TYPE_PROCESS_SUBPROCESS__OUT__STATUS, status); }