# HG changeset patch # User Michael Shkutkov # Date 1182887635 0 # Node ID 54251fa6389dfe3b36d18c0387feaf0b7fe0f773 # Parent 507fb436d8c07078fbe0235e40dacaa231a62cde reading only necessary part of log file using g_fopen/fseek/fread diff -r 507fb436d8c0 -r 54251fa6389d libpurple/plugins/log_reader.c --- a/libpurple/plugins/log_reader.c Tue Jun 26 11:11:40 2007 +0000 +++ b/libpurple/plugins/log_reader.c Tue Jun 26 19:53:55 2007 +0000 @@ -1912,6 +1912,8 @@ char *selected; GError *error; char *utf8_string; + FILE *file; + g_return_val_if_fail(log != NULL, g_strdup("")); @@ -1921,18 +1923,18 @@ g_return_val_if_fail(data->length > 0, g_strdup("")); error = NULL; - if (!g_file_get_contents(data->path, &contents, NULL, &error)) { - purple_debug_error("QIP logger", - "Couldn't read file %s: %s \n", data->path, error->message); - g_error_free(error); - return g_strdup(""); - } - - selected = g_strndup(contents + data->offset, data->length + 2); - selected[data->length] = '\n'; - selected[data->length + 1] = '\0'; - g_free(contents); - contents = selected; + + contents = g_malloc(data->length + 2); + + file = g_fopen(data->path, "rb"); + g_return_val_if_fail(file != NULL, g_strdup("")); + + fseek(file, data->offset, SEEK_SET); + fread(contents, data->length, 1, file); + fclose(file); + + contents[data->length] = '\n'; + contents[data->length + 1] = '\0'; /* Convert file contents from Cp1251 to UTF-8 codeset */ error = NULL;