comparison libpurple/plugins/log_reader.c @ 18256:54251fa6389d

reading only necessary part of log file using g_fopen/fseek/fread
author Michael Shkutkov <mshkutkov@soc.pidgin.im>
date Tue, 26 Jun 2007 19:53:55 +0000
parents 507fb436d8c0
children d1e7c8015308
comparison
equal deleted inserted replaced
18255:507fb436d8c0 18256:54251fa6389d
1910 const char *line; 1910 const char *line;
1911 gchar *contents; 1911 gchar *contents;
1912 char *selected; 1912 char *selected;
1913 GError *error; 1913 GError *error;
1914 char *utf8_string; 1914 char *utf8_string;
1915 FILE *file;
1916
1915 1917
1916 g_return_val_if_fail(log != NULL, g_strdup("")); 1918 g_return_val_if_fail(log != NULL, g_strdup(""));
1917 1919
1918 data = log->logger_data; 1920 data = log->logger_data;
1919 1921
1920 g_return_val_if_fail(data->path != NULL, g_strdup("")); 1922 g_return_val_if_fail(data->path != NULL, g_strdup(""));
1921 g_return_val_if_fail(data->length > 0, g_strdup("")); 1923 g_return_val_if_fail(data->length > 0, g_strdup(""));
1922 1924
1923 error = NULL; 1925 error = NULL;
1924 if (!g_file_get_contents(data->path, &contents, NULL, &error)) { 1926
1925 purple_debug_error("QIP logger", 1927 contents = g_malloc(data->length + 2);
1926 "Couldn't read file %s: %s \n", data->path, error->message); 1928
1927 g_error_free(error); 1929 file = g_fopen(data->path, "rb");
1928 return g_strdup(""); 1930 g_return_val_if_fail(file != NULL, g_strdup(""));
1929 } 1931
1930 1932 fseek(file, data->offset, SEEK_SET);
1931 selected = g_strndup(contents + data->offset, data->length + 2); 1933 fread(contents, data->length, 1, file);
1932 selected[data->length] = '\n'; 1934 fclose(file);
1933 selected[data->length + 1] = '\0'; 1935
1934 g_free(contents); 1936 contents[data->length] = '\n';
1935 contents = selected; 1937 contents[data->length + 1] = '\0';
1936 1938
1937 /* Convert file contents from Cp1251 to UTF-8 codeset */ 1939 /* Convert file contents from Cp1251 to UTF-8 codeset */
1938 error = NULL; 1940 error = NULL;
1939 if (!(utf8_string = g_convert(contents, -1, "UTF-8", "Cp1251", NULL, NULL, &error))) { 1941 if (!(utf8_string = g_convert(contents, -1, "UTF-8", "Cp1251", NULL, NULL, &error))) {
1940 purple_debug_error("QIP logger", 1942 purple_debug_error("QIP logger",