Beispiel #1
0
void rrnx_list_remove(rrnx_list *list, rrnx_list_item *item) {

	// Maintain links

	rrnx_list_item *next = item->next;
	rrnx_list_item *prev = item->prev;

	if (next != NULL) {
		next->prev = prev;
	}
	if (prev != NULL) {
		prev->next = next;
	}

	if (list->last == item) {
		list->last = prev;
	}

	if (list->first == item) {
		list->first = next;
	}

	// Free user data
	free_payload(list, item);
	// free the node itself
	free(item);
}
Beispiel #2
0
void ts_engine_client_uninit(struct ts_engine_client *client)
{
  close(client->fdin);
  close(client->fdout);

  free_payload(client);
}
Beispiel #3
0
int main(void) {

  uint8_t* data = malloc(1024*sizeof(uint8_t));
  data[1023] = 0x20;
  
  payload_t* payload = make_payload(data, 1024);

  printf("data    (%p) : %lu\n", data, malloc_size(data));
  free(data);
  printf("data    (%p) : %lu\n", data, malloc_size(data));
  
  uint8_t* more = malloc(1024*sizeof(uint8_t));
  more[1023] = 0x30;
  printf("more    (%p) : %lu\n", more, malloc_size(more));
  
  tuple_t* tuple1 = make_tuple(1, payload);

  printf("data    (%p) : %lu\n", data, malloc_size(data));
  printf("\n");

  tuple_t* tuple2 = make_tuple(2, payload);

  printf("data    (%p) : %lu\n", data, malloc_size(data));
  printf("payload (%p) : %lu\n", payload, malloc_size(payload->data));
  printf("tuple1  (%p) : %lu\n", tuple1->payload->data, malloc_size(tuple1->payload->data));
  printf("tuple2  (%p) : %lu\n", tuple2->payload->data, malloc_size(tuple2->payload->data));
  printf("\n");

  free_payload(payload);

  printf("data    (%p) : %lu\n", data, malloc_size(data));
  printf("payload (%p) : %lu\n", payload, malloc_size(payload->data));
  printf("tuple1  (%p) : %lu\n", tuple1->payload->data, malloc_size(tuple1->payload->data));
  printf("tuple2  (%p) : %lu\n", tuple2->payload->data, malloc_size(tuple2->payload->data));
  printf("\n");

  free_tuple(tuple1);

  printf("data    (%p) : %lu\n", data, malloc_size(data));
  printf("payload (%p) : %lu\n", payload, malloc_size(payload->data));
  printf("tuple1  (%p) : %lu\n", tuple1->payload->data, malloc_size(tuple1->payload->data));
  printf("tuple2  (%p) : %lu\n", tuple2->payload->data, malloc_size(tuple2->payload->data));
  printf("\n");

  free_tuple(tuple2);

  printf("data    (%p) : %lu\n", data, malloc_size(data));
  printf("payload (%p) : %lu\n", payload, malloc_size(payload->data));
  printf("tuple1  (%p) : %lu\n", tuple1->payload->data, malloc_size(tuple1->payload));
  printf("tuple2  (%p) : %lu\n", tuple2->payload->data, malloc_size(tuple2->payload));
  printf("\n");

  exit(EXIT_SUCCESS);
}
Beispiel #4
0
static int receive_resp(struct ts_engine_client *client)
{
  struct ts_engine_client_resp *resp = &client->resp;
  int ret;

  ret = __ts_engine_full_read(client->fdout, resp, sizeof(*resp));
  if (ret != sizeof(*resp))
    {
      eng_dbg("read header failed: %d\n", ret);
      return ERROR;
    }

  if (resp->hdr.status != OK)
    {
      eng_dbg("resp->hdr.status: %d\n", resp->hdr.status);
    }

  if (resp->hdr.length)
    {
      free_payload(client);

      client->payload.data = malloc(resp->hdr.length);
      if (!client->payload.data)
        {
          perror("malloc");
          return ERROR;
        }

      ret = __ts_engine_full_read(client->fdout, client->payload.data,
          resp->hdr.length);
      if (ret < 0)
        {
          eng_dbg("__ts_engine_full_read failed\n");
          free_payload(client);
          return ERROR;
        }
    }

  return OK;
}
Beispiel #5
0
void rrnx_list_free(rrnx_list *list) {
	if (list == NULL) {
		// Already deallocated
		return;
	}
	rrnx_list_item *item = list->first;
	while (item != NULL) {
		rrnx_list_item *next = item->next;
		// Free user-defined payload
		free_payload(list, item);
		// Free the list item itself.
		// Don't bother to maintain links.
		free(item);
		// Advance
		item = next;
	}
	list->first = NULL;
	list->last = NULL;

	// Remove the list itself
	free(list);
}
Beispiel #6
0
void free_tuple(tuple_t* tuple) {
  free_payload(tuple->payload);
  free(tuple);
}