summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEmanuele Giaquinta <exg@irssi.org>2008-03-09 11:08:44 +0000
committerexg <exg@dbcabf3a-b0e7-0310-adc4-f8d773084564>2008-03-09 11:08:44 +0000
commita3021ccf5f41890e4204e413c76843c324752419 (patch)
treeef7db22b84be1a8195fa5a8bc2d6b0921a3cbb34 /src
parent2b0ebef9112d1546672722d1f559cfccb867f191 (diff)
downloadirssi-a3021ccf5f41890e4204e413c76843c324752419.zip
Use GIOChannel API to read a file linewise.
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@4736 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'src')
-rw-r--r--src/fe-common/core/autorun.c29
-rw-r--r--src/fe-common/core/fe-core-commands.c29
-rw-r--r--src/fe-common/core/fe-help.c35
3 files changed, 42 insertions, 51 deletions
diff --git a/src/fe-common/core/autorun.c b/src/fe-common/core/autorun.c
index f114ac23..d9b21f54 100644
--- a/src/fe-common/core/autorun.c
+++ b/src/fe-common/core/autorun.c
@@ -20,37 +20,36 @@
#include "module.h"
#include "signals.h"
-#include "line-split.h"
#include "special-vars.h"
#include "fe-windows.h"
void autorun_startup(void)
{
- char tmpbuf[1024], *str, *path;
- LINEBUF_REC *buffer = NULL;
- int f, ret, recvlen;
+ char *path;
+ GIOChannel *handle;
+ GString *buf;
+ gsize tpos;
/* open ~/.irssi/startup and run all commands in it */
path = g_strdup_printf("%s/startup", get_irssi_dir());
- f = open(path, O_RDONLY);
+ handle = g_io_channel_new_file(path, "r", NULL);
g_free(path);
- if (f == -1) {
+ if (handle == NULL) {
/* file not found */
return;
}
- do {
- recvlen = read(f, tmpbuf, sizeof(tmpbuf));
-
- ret = line_split(tmpbuf, recvlen, &str, &buffer);
- if (ret > 0 && *str != '#') {
- eval_special_string(str, "",
+ buf = g_string_sized_new(512);
+ while (g_io_channel_read_line_string(handle, buf, &tpos, NULL) == G_IO_STATUS_NORMAL) {
+ buf->str[tpos] = '\0';
+ if (buf->str[0] != '#') {
+ eval_special_string(buf->str, "",
active_win->active_server,
active_win->active);
}
- } while (ret > 0);
- line_split_free(buffer);
+ }
+ g_string_free(buf, TRUE);
- close(f);
+ g_io_channel_close(handle);
}
diff --git a/src/fe-common/core/fe-core-commands.c b/src/fe-common/core/fe-core-commands.c
index e20254ba..33c9d8aa 100644
--- a/src/fe-common/core/fe-core-commands.c
+++ b/src/fe-common/core/fe-core-commands.c
@@ -25,7 +25,6 @@
#include "commands.h"
#include "levels.h"
#include "misc.h"
-#include "line-split.h"
#include "settings.h"
#include "irssi-version.h"
#include "servers.h"
@@ -114,11 +113,12 @@ static void cmd_version(char *data)
/* SYNTAX: CAT <file> */
static void cmd_cat(const char *data)
{
- LINEBUF_REC *buffer = NULL;
char *fname, *fposstr;
- char tmpbuf[1024], *str;
void *free_arg;
- int f, ret, recvlen, fpos;
+ int fpos;
+ GIOChannel *handle;
+ GString *buf;
+ gsize tpos;
if (!cmd_get_params(data, &free_arg, 2, &fname, &fposstr))
return;
@@ -127,29 +127,26 @@ static void cmd_cat(const char *data)
fpos = atoi(fposstr);
cmd_params_free(free_arg);
- f = open(fname, O_RDONLY);
+ handle = g_io_channel_new_file(fname, "r", NULL);
g_free(fname);
- if (f == -1) {
+ if (handle == NULL) {
/* file not found */
printtext(NULL, NULL, MSGLEVEL_CLIENTERROR,
"%s", g_strerror(errno));
return;
}
- lseek(f, fpos, SEEK_SET);
- do {
- recvlen = read(f, tmpbuf, sizeof(tmpbuf));
-
- ret = line_split(tmpbuf, recvlen, &str, &buffer);
- if (ret > 0) {
+ g_io_channel_seek_position(handle, fpos, G_SEEK_SET, NULL);
+ buf = g_string_sized_new(512);
+ while (g_io_channel_read_line_string(handle, buf, &tpos, NULL) == G_IO_STATUS_NORMAL) {
+ buf->str[tpos] = '\0';
printtext(NULL, NULL, MSGLEVEL_CLIENTCRAP |
- MSGLEVEL_NEVER, "%s", str);
+ MSGLEVEL_NEVER, "%s", buf->str);
}
- } while (ret > 0);
- line_split_free(buffer);
+ g_string_free(buf, TRUE);
- close(f);
+ g_io_channel_close(handle);
}
/* SYNTAX: BEEP */
diff --git a/src/fe-common/core/fe-help.c b/src/fe-common/core/fe-help.c
index be45e77b..178a9d3f 100644
--- a/src/fe-common/core/fe-help.c
+++ b/src/fe-common/core/fe-help.c
@@ -23,7 +23,6 @@
#include "commands.h"
#include "levels.h"
#include "misc.h"
-#include "line-split.h"
#include "settings.h"
#include "printtext.h"
@@ -117,46 +116,42 @@ static void help_category(GSList *cmdlist, int items)
static int show_help_file(const char *file)
{
const char *helppath;
- char tmpbuf[1024], *str, *path, **paths, **tmp;
- LINEBUF_REC *buffer = NULL;
- int f, ret, recvlen;
+ char *path, **paths, **tmp;
+ GIOChannel *handle;
+ GString *buf;
+ gsize tpos;
helppath = settings_get_str("help_path");
paths = g_strsplit(helppath, ":", -1);
- f = -1;
+ handle = NULL;
for (tmp = paths; *tmp != NULL; tmp++) {
/* helpdir/command or helpdir/category/command */
path = g_strdup_printf("%s/%s", *tmp, file);
- f = open(path, O_RDONLY);
+ handle = g_io_channel_new_file(path, "r", NULL);
g_free(path);
- if (f != -1)
+ if (handle != NULL)
break;
}
g_strfreev(paths);
- if (f == -1)
+ if (handle == NULL)
return FALSE;
+ buf = g_string_sized_new(512);
/* just print to screen whatever is in the file */
- do {
- recvlen = read(f, tmpbuf, sizeof(tmpbuf));
-
- ret = line_split(tmpbuf, recvlen, &str, &buffer);
- if (ret > 0) {
- str = g_strconcat("%|", str, NULL);
- printtext_string(NULL, NULL, MSGLEVEL_CLIENTCRAP, str);
- g_free(str);
+ while (g_io_channel_read_line_string(handle, buf, &tpos, NULL) == G_IO_STATUS_NORMAL) {
+ buf->str[tpos] = '\0';
+ g_string_prepend(buf, "%|");
+ printtext_string(NULL, NULL, MSGLEVEL_CLIENTCRAP, buf->str);
}
- }
- while (ret > 0);
- line_split_free(buffer);
+ g_string_free(buf, TRUE);
- close(f);
+ g_io_channel_close(handle);
return TRUE;
}