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); }
/* 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); }
void dealloc_partial_tuple(oidtype x) { free_tuple(dr(x, ptcell)->tuple); dealloc_object(x); }