summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 458cad8)
raw | patch | inline | side by side (parent: 458cad8)
author | Max Kellermann <max@duempel.org> | |
Mon, 6 Oct 2008 12:55:20 +0000 (14:55 +0200) | ||
committer | Max Kellermann <max@duempel.org> | |
Mon, 6 Oct 2008 12:55:20 +0000 (14:55 +0200) |
Since the buffer size is already known at compile time, don't do a
second malloc() for it, declare it statically in struct wreadln. This
way, it is going to be allocated on the stack.
second malloc() for it, declare it statically in struct wreadln. This
way, it is going to be allocated on the stack.
src/wreadln.c | patch | blob | history |
diff --git a/src/wreadln.c b/src/wreadln.c
index 42703a0165ebc66566b7bca43625cf46b7c095a7..d68185a7e42ffabae1702dc74d1a8edbe465e768 100644 (file)
--- a/src/wreadln.c
+++ b/src/wreadln.c
gint start;
/** the current value */
- gchar *line;
+ gchar line[1024];
};
-/** max size allocated for a line */
-static const size_t wrln_max_line_size = 1024;
-
/** max items stored in the history list */
static const guint wrln_max_history_length = 32;
/* move the cursor one step to the right */
static inline void cursor_move_right(struct wreadln *wr)
{
- if (wr->cursor < (int)strlen(wr->line) &&
- wr->cursor < (int)wrln_max_line_size - 1) {
+ if (wr->cursor < (int)strlen(wr->line)) {
++wr->cursor;
if (wr->cursor >= wr->width &&
wr->start < wr->cursor - wr->width + 1)
GList *hlist = NULL, *hcurrent = NULL;
gint key = 0, i;
- /* allocate a line buffer */
- wr.line = g_malloc0(wrln_max_line_size);
/* turn off echo */
noecho();
/* make shure the cursor is visible */
if (history) {
/* append the a new line to our history list */
- *history = g_list_append(*history, g_malloc0(wrln_max_line_size));
+ *history = g_list_append(*history, g_malloc0(sizeof(wr.line)));
/* hlist points to the current item in the history list */
hlist = g_list_last(*history);
hcurrent = hlist;
if (history && hlist->prev) {
if (hlist == hcurrent)
/* save the current line */
- g_strlcpy(hlist->data, wr.line, wrln_max_line_size);
+ g_strlcpy(hlist->data, wr.line, sizeof(wr.line));
/* get previous line */
hlist = hlist->prev;
- g_strlcpy(wr.line, hlist->data, wrln_max_line_size);
+ g_strlcpy(wr.line, hlist->data, sizeof(wr.line));
}
cursor_move_to_eol(&wr);
drawline(&wr);
} else if (initial_value) {
/* copy the initial value to the line buffer */
- g_strlcpy(wr.line, initial_value, wrln_max_line_size);
+ g_strlcpy(wr.line, initial_value, sizeof(wr.line));
cursor_move_to_eol(&wr);
drawline(&wr);
}
wrln_completion_callback_data);
list = g_completion_complete(gcmp, wr.line, &prefix);
if (prefix) {
- g_strlcpy(wr.line, prefix, wrln_max_line_size);
+ g_strlcpy(wr.line, prefix, sizeof(wr.line));
cursor_move_to_eol(&wr);
g_free(prefix);
} else
case KEY_CTRL_G:
screen_bell();
- g_free(wr.line);
if (history) {
g_free(hcurrent->data);
hcurrent->data = NULL;
if (hlist == hcurrent)
/* save the current line */
g_strlcpy(hlist->data, wr.line,
- wrln_max_line_size);
+ sizeof(wr.line));
/* get previous line */
hlist = hlist->prev;
g_strlcpy(wr.line, hlist->data,
- wrln_max_line_size);
+ sizeof(wr.line));
}
cursor_move_to_eol(&wr);
break;
/* get next line */
hlist = hlist->next;
g_strlcpy(wr.line, hlist->data,
- wrln_max_line_size);
+ sizeof(wr.line));
}
cursor_move_to_eol(&wr);
break;
}
}
- return g_realloc(wr.line, strlen(wr.line) + 1);
+ return g_strdup(wr.line);
}
gchar *