예제 #1
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);
}
예제 #2
0
/* carrega todos os pares CHAVE=VALOR do arquivo de tradução
 * numa hash_table, para eliminar a necessidade de abrir varias
 * vezes o arquivo. */
hash_table *load_translation()
{
	char *filename;
	hash_table *trans = NULL;	
	FILE *fp;
	char buffer[256];
	int buf_size;

	/* obter a localização do arquivo de tradução no ldc.conf */
	filename = TRANSLATION_FILE;

	if (filename == NULL)
		return NULL;	
	
	if ((fp = fopen(filename, "r")) == NULL)
		return NULL;

	/* criar hash_table para armazenar as tuplas de tradução */	
	trans = new_hash_table(); 

	buf_size = sizeof(buffer)/sizeof(buffer[0]);

	while (fgets(buffer, buf_size, fp) != NULL) {
		struct tuple *tmp = parse_tuple(buffer);
		
		if (tmp != NULL)
			add_hash_info(trans, tmp->key, tmp->value);
		
		free_tuple (&tmp);
	}

	fclose(fp);

	return trans;
}
/*
 *	deallocate a tuple linked list
 */
void	free_tuple_list( TUPLE *tuple)
{
	TUPLE	*tuple_next;
/*
 *	deallocate the tuple linked list structure
 */
	while( tuple)
	{
		tuple_next = tuple->next;
		free_tuple( tuple);
		tuple = tuple_next;
	}
	return;
}
/*
 *	convert primary expression string literal into tuple
		$$.tuple = tuple_primary_expr_string_literal( $1.tuple);
 */
TUPLE	*tuple_primary_expr_string_literal( TUPLE *tuple)
{
	int index;
	TUPLE	*tuple_head = 0;
	TUPLE	*lists;
/*
 *	loop over string literal length to move char to w_reg then to memory address
 *	post processing will insert a call printf instruction for each character
 */
	for( index = 0; index < tuple->length; index++)
	{
		lists = new_tuple( I_MOV, tuple->buffer[ index], 0, MASK_VALUE | MASK_W_REG, 0, 0);
		tuple_head = tuple_tail_to_head( tuple_head, lists);
	}
	free_tuple( tuple);
	return( tuple_head);
}
예제 #5
0
void dealloc_partial_tuple(oidtype x) 
{
	free_tuple(dr(x, ptcell)->tuple);
  dealloc_object(x); 
}