From 4ef449b6dbea0cc7ce726a640e558e72d4059079 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Sandmann=20Pedersen?= Date: Mon, 7 Sep 2009 10:02:58 -0400 Subject: [PATCH] Add array resizing code --- tracker.c | 64 ++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 49 insertions(+), 15 deletions(-) diff --git a/tracker.c b/tracker.c index f460a160..fee8d15d 100644 --- a/tracker.c +++ b/tracker.c @@ -1,22 +1,32 @@ #include +#include + #include "tracker.h" #include "stackstash.h" typedef struct new_process_t new_process_t; typedef struct new_map_t new_map_t; typedef struct sample_t sample_t; -typedef union time_line_entry_t time_line_entry_t; + +typedef enum +{ + NEW_PROCESS, + NEW_MAP, + SAMPLE +} event_type; struct new_process_t { - pid_t pid; - char command_line[64]; + event_type type; + int32_t pid; + char command_line[256]; }; struct new_map_t { + event_type type; + int32_t pid; char file_name[PATH_MAX]; - pid_t pid; uint64_t start; uint64_t end; uint64_t offset; @@ -25,25 +35,49 @@ struct new_map_t struct sample_t { - pid_t pid; - StackNode *trace; -}; - -union time_line_entry_t -{ - new_process_t new_process; - new_map_t new_map; - sample_t sample; + event_type type; + int32_t pid; + StackNode * trace; }; struct tracker_t { - + size_t n_event_bytes; + size_t n_allocated_bytes; + uint8_t *events; }; +#define DEFAULT_SIZE (1024 * 1024 * 4) + +static void +tracker_append (tracker_t *tracker, + void *event, + int n_bytes) +{ + if (tracker->n_allocated_bytes - tracker->n_event_bytes < n_bytes) + { + size_t new_size = tracker->n_allocated_bytes * 2; + + tracker->events = g_realloc (tracker->events, new_size); + + tracker->n_allocated_bytes = new_size; + } + + g_assert (tracker->n_allocated_bytes - tracker->n_event_bytes >= n_bytes); + + memcpy (tracker->events + tracker->n_event_bytes, event, n_bytes); +} + tracker_t * tracker_new (void) { + tracker_t *tracker = g_new0 (tracker_t, 1); + + tracker->n_event_bytes = 0; + tracker->n_allocated_bytes = DEFAULT_SIZE; + tracker->events = g_malloc (DEFAULT_SIZE); + + return tracker; } void @@ -73,5 +107,5 @@ tracker_add_sample (tracker_t *tracker, Profile * tracker_create_profile (tracker_t *tracker) { - + }