diff options
Diffstat (limited to 'mixlib/mix_src_file.c')
-rw-r--r-- | mixlib/mix_src_file.c | 39 |
1 files changed, 17 insertions, 22 deletions
diff --git a/mixlib/mix_src_file.c b/mixlib/mix_src_file.c index b8c4356..0569aa6 100644 --- a/mixlib/mix_src_file.c +++ b/mixlib/mix_src_file.c @@ -1,7 +1,7 @@ /* -*-c-*- -------------- mix_src_file.c : * Implementation of the functions declared in mix_src_file.h * ------------------------------------------------------------------ - * Last change: Time-stamp: "00/12/16 16:41:46 jose" + * Last change: Time-stamp: "00/12/17 12:56:50 jose" * ------------------------------------------------------------------ * Copyright (C) 2000 jose antonio ortega ruiz <jaortega@acm.org> * @@ -21,7 +21,8 @@ * */ - +#include <stdio.h> +#include <unistd.h> #include "mix_src_file.h" /* the MIXAL source file type */ @@ -44,26 +45,19 @@ mix_src_file_new_for_read (const gchar *path) return NULL; else { + enum {BUFFER_SIZE = 256}; + static gchar BUFFER[BUFFER_SIZE]; + mix_src_file_t *result = g_new (mix_src_file_t, 1); FILE *f = mix_file_to_FILE (file); - result->lines = g_prt_array_new (); - result->path = path; + result->lines = g_ptr_array_new (); + result->path = g_strdup (path); result->lineno = 0; - ssize_t s = 0; - gchar *newline = NULL; - size_t a = 0; - - while (s != -1) + while (fgets (BUFFER, BUFFER_SIZE, f) == BUFFER) { - s = getline (&newline, &a, f); - if (s>0) - { - g_ptr_array_add (result->lines, (gpointer) newline); - result->lineno++; - } - newline = NULL; - a = 0; + g_ptr_array_add (result->lines, (gpointer) g_strdup (BUFFER)); + result->lineno++; } mix_file_delete (file); @@ -75,8 +69,9 @@ mix_src_file_new_for_read (const gchar *path) void mix_src_file_delete (mix_src_file_t *src) { - g_return_val_if_fail (src != NULL, NULL); - g_ptr_array_free (src->lines); + g_return_if_fail (src != NULL); + g_ptr_array_free (src->lines, TRUE); + g_free (src->path); g_free (src); } @@ -93,17 +88,17 @@ const gchar * mix_src_file_get_line (const mix_src_file_t *src, guint lineno) { g_return_val_if_fail (src != NULL, NULL); - if (lineno > src->lineo || lineno == 0) + if (lineno > src->lineno || lineno == 0) return NULL; else - return (gchar *)g_prt_array_index (src->lines, lineno - 1); + return (gchar *)g_ptr_array_index (src->lines, lineno - 1); } /* get the total no. of lines in the file */ guint mix_src_file_get_line_no (const mix_src_file_t *src) { - g_return_val_if_fail (src != NULL, NULL); + g_return_val_if_fail (src != NULL, 0); return src->lineno; } |