Mercurial > pidgin
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", |