diff options
author | Jon Bergli Heier <snakebite@jvnv.net> | 2009-08-14 02:05:59 +0200 |
---|---|---|
committer | Jon Bergli Heier <snakebite@jvnv.net> | 2009-08-14 02:05:59 +0200 |
commit | 6ca9bdc3559e541ad636d283a57ddf22d77b47cf (patch) | |
tree | 09ce862ae0c222996b756dc46994d40c4b926b0b /channel.c | |
parent | 5acf08a2e540d68093566c006e45572849589750 (diff) | |
parent | bd1f1deafc7f1fec1612d3776377f685f056e5f7 (diff) |
Merge branch 'master' of ssh://athena/mnt/scm/git/ircstats
Diffstat (limited to 'channel.c')
-rw-r--r-- | channel.c | 50 |
1 files changed, 24 insertions, 26 deletions
@@ -22,45 +22,43 @@ struct channel_t *channel_add(const char *name) { } struct channel_t *channel = &channels[channel_count-1]; channel->name = strdup(name); - channel->file_count = 0; channel->files = NULL; return channel; } -int channel_set_file_count(struct channel_t *channel, int count) { - channel->files = malloc(count * sizeof(struct channel_file_t)); - if(!channel->files) { - char *error = strerror(errno); - fprintf(stderr, "Could not allocate memory for channel files (%s): %s\n", channel->name, error); - return 0; - } - channel->file_count = count; - return 1; -} - -int channel_set_file(struct channel_t *channel, int index, const char *path, int rs_index) { - struct channel_file_t *file; - /* Make sure index is in range. */ - if(!(index < channel->file_count)) - return 0; - file = &channel->files[index]; +struct channel_file_t *channel_file_add(struct channel_t *channel, const char *path, int rs_index) { + struct channel_file_t *file = malloc(sizeof(struct channel_file_t)); + struct channel_file_t *last = channel->files; + if(last) { + while(last->next) last = last->next; + last->next = file; + } else + channel->files = file; file->path = strdup(path); file->rs = rs_get(rs_index); - /* Fail if we don't get a regex set. */ + file->next = NULL; if(!file->rs) - return 0; - return 1; + return NULL; + return file; +} + +int channel_get_count() { + return channel_count; +} + +struct channel_t *channel_get(int index) { + return (index < channel_count ? &channels[index] : NULL); } void channel_free() { for(int i = 0; i < channel_count; i++) { free(channels[i].name); - /* Free all file path strings. */ - for(int j = 0; j < channels[i].file_count; j++) { - free(channels[i].files[j].path); + struct channel_file_t *file = channels[i].files; + while(file) { + struct channel_file_t *next = file->next; + free(file); + file = next; } - /* 'files' is a dynamically allocated array, must be freed. */ - free(channels[i].files); } free(channels); channels = NULL; |