1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-03 08:13:14 +02:00

Fixed segfault when switching to DCC buffer

This commit is contained in:
Sebastien Helleu
2005-07-16 11:32:23 +00:00
parent a68a1f8192
commit 99ad719ab9
6 changed files with 174 additions and 180 deletions
+62 -89
View File
@@ -1503,86 +1503,86 @@ gui_draw_buffer_input (t_gui_buffer *buffer, int erase)
wnoutrefresh (ptr_win->win_input);
}
if (buffer->input_buffer_size == 0)
buffer->input_buffer[0] = '\0';
input_width = gui_get_input_width (ptr_win);
if (buffer->input_buffer_pos - buffer->input_buffer_1st_display + 1 >
input_width)
buffer->input_buffer_1st_display = buffer->input_buffer_pos -
input_width + 1;
else
if (buffer->dcc)
{
if (buffer->input_buffer_pos < buffer->input_buffer_1st_display)
buffer->input_buffer_1st_display = buffer->input_buffer_pos;
else
dcc_selected = (ptr_win->dcc_selected) ? (t_irc_dcc *) ptr_win->dcc_selected : dcc_list;
wmove (ptr_win->win_input, 0, 0);
if (dcc_selected)
{
if ((buffer->input_buffer_1st_display > 0) &&
(buffer->input_buffer_pos -
buffer->input_buffer_1st_display + 1) < input_width)
switch (dcc_selected->status)
{
buffer->input_buffer_1st_display =
buffer->input_buffer_pos - input_width + 1;
if (buffer->input_buffer_1st_display < 0)
buffer->input_buffer_1st_display = 0;
case DCC_WAITING:
if (DCC_IS_RECV(dcc_selected->type))
wprintw (ptr_win->win_input, _(" [A] Accept"));
wprintw (ptr_win->win_input, _(" [C] Cancel"));
break;
case DCC_CONNECTING:
case DCC_ACTIVE:
wprintw (ptr_win->win_input, _(" [C] Cancel"));
break;
case DCC_DONE:
case DCC_FAILED:
case DCC_ABORTED:
wprintw (ptr_win->win_input, _(" [R] Remove"));
break;
}
}
}
if (CHANNEL(buffer))
{
snprintf (format, 32, "%%s %%s> %%-%ds", input_width);
if (ptr_win == gui_current_window)
mvwprintw (ptr_win->win_input, 0, 0, format,
CHANNEL(buffer)->name,
SERVER(buffer)->nick,
buffer->input_buffer + buffer->input_buffer_1st_display);
else
mvwprintw (ptr_win->win_input, 0, 0, format,
CHANNEL(buffer)->name,
SERVER(buffer)->nick,
"");
wprintw (ptr_win->win_input, _(" [P] Purge old DCC"));
wprintw (ptr_win->win_input, _(" [Q] Close DCC view"));
wclrtoeol (ptr_win->win_input);
ptr_win->win_input_x = strlen (CHANNEL(buffer)->name) +
strlen (SERVER(buffer)->nick) + 3 +
(buffer->input_buffer_pos - buffer->input_buffer_1st_display);
ptr_win->win_input_x = 0;
if (ptr_win == gui_current_window)
move (ptr_win->win_y + ptr_win->win_height - 1,
ptr_win->win_x + ptr_win->win_input_x);
ptr_win->win_x);
}
else
else if (buffer->has_input)
{
if (buffer->dcc)
if (buffer->input_buffer_size == 0)
buffer->input_buffer[0] = '\0';
input_width = gui_get_input_width (ptr_win);
if (buffer->input_buffer_pos - buffer->input_buffer_1st_display + 1 >
input_width)
buffer->input_buffer_1st_display = buffer->input_buffer_pos -
input_width + 1;
else
{
dcc_selected = (ptr_win->dcc_selected) ? (t_irc_dcc *) ptr_win->dcc_selected : dcc_list;
wmove (ptr_win->win_input, 0, 0);
if (dcc_selected)
if (buffer->input_buffer_pos < buffer->input_buffer_1st_display)
buffer->input_buffer_1st_display = buffer->input_buffer_pos;
else
{
switch (dcc_selected->status)
if ((buffer->input_buffer_1st_display > 0) &&
(buffer->input_buffer_pos -
buffer->input_buffer_1st_display + 1) < input_width)
{
case DCC_WAITING:
if (DCC_IS_RECV(dcc_selected->type))
wprintw (ptr_win->win_input, _(" [A] Accept"));
wprintw (ptr_win->win_input, _(" [C] Cancel"));
break;
case DCC_CONNECTING:
case DCC_ACTIVE:
wprintw (ptr_win->win_input, _(" [C] Cancel"));
break;
case DCC_DONE:
case DCC_FAILED:
case DCC_ABORTED:
wprintw (ptr_win->win_input, _(" [R] Remove"));
break;
buffer->input_buffer_1st_display =
buffer->input_buffer_pos - input_width + 1;
if (buffer->input_buffer_1st_display < 0)
buffer->input_buffer_1st_display = 0;
}
}
wprintw (ptr_win->win_input, _(" [P] Purge old DCC"));
wprintw (ptr_win->win_input, _(" [Q] Close DCC view"));
}
if (CHANNEL(buffer))
{
snprintf (format, 32, "%%s %%s> %%-%ds", input_width);
if (ptr_win == gui_current_window)
mvwprintw (ptr_win->win_input, 0, 0, format,
CHANNEL(buffer)->name,
SERVER(buffer)->nick,
buffer->input_buffer + buffer->input_buffer_1st_display);
else
mvwprintw (ptr_win->win_input, 0, 0, format,
CHANNEL(buffer)->name,
SERVER(buffer)->nick,
"");
wclrtoeol (ptr_win->win_input);
ptr_win->win_input_x = 0;
ptr_win->win_input_x = strlen (CHANNEL(buffer)->name) +
strlen (SERVER(buffer)->nick) + 3 +
(buffer->input_buffer_pos - buffer->input_buffer_1st_display);
if (ptr_win == gui_current_window)
move (ptr_win->win_y + ptr_win->win_height - 1,
ptr_win->win_x);
ptr_win->win_x + ptr_win->win_input_x);
}
else
{
@@ -1758,33 +1758,6 @@ gui_get_dcc_buffer ()
return gui_buffer_new (gui_current_window, NULL, NULL, 1, 0);
}
/*
* gui_switch_to_dcc_buffer: switch to dcc buffer (create it if it does not exist)
*/
void
gui_switch_to_dcc_buffer ()
{
t_gui_buffer *ptr_buffer;
if (!gui_ok)
return;
/* check if dcc buffer exists */
for (ptr_buffer = gui_buffers; ptr_buffer; ptr_buffer = ptr_buffer->next_buffer)
{
if (ptr_buffer->dcc)
break;
}
if (ptr_buffer)
{
gui_switch_to_buffer (gui_current_window, ptr_buffer);
gui_redraw_buffer (ptr_buffer);
}
else
gui_buffer_new (gui_current_window, NULL, NULL, 1, 1);
}
/*
* gui_input_page_up: display previous page on buffer
*/
+24
View File
@@ -1603,6 +1603,30 @@ gui_switch_to_next_window ()
gui_redraw_buffer (gui_current_window->buffer);
}
/*
* gui_switch_to_dcc_buffer: switch to dcc buffer (create it if it does not exist)
*/
void
gui_switch_to_dcc_buffer ()
{
t_gui_buffer *ptr_buffer;
/* check if dcc buffer exists */
for (ptr_buffer = gui_buffers; ptr_buffer; ptr_buffer = ptr_buffer->next_buffer)
{
if (ptr_buffer->dcc)
break;
}
if (ptr_buffer)
{
gui_switch_to_buffer (gui_current_window, ptr_buffer);
gui_redraw_buffer (ptr_buffer);
}
else
gui_buffer_new (gui_current_window, NULL, NULL, 1, 1);
}
/*
* gui_switch_to_buffer_by_number: switch to another buffer with number
*/
+1 -1
View File
@@ -346,6 +346,7 @@ extern void gui_switch_to_previous_buffer ();
extern void gui_switch_to_next_buffer ();
extern void gui_switch_to_previous_window ();
extern void gui_switch_to_next_window ();
extern void gui_switch_to_dcc_buffer ();
extern t_gui_buffer *gui_switch_to_buffer_by_number (t_gui_window *, int);
extern void gui_move_buffer_to_number (t_gui_window *, int);
extern void gui_window_print_log (t_gui_window *);
@@ -382,7 +383,6 @@ extern void gui_draw_buffer_input (t_gui_buffer *, int);
extern void gui_redraw_buffer (t_gui_buffer *);
extern void gui_switch_to_buffer (t_gui_window *, t_gui_buffer *);
extern t_gui_buffer *gui_get_dcc_buffer ();
extern void gui_switch_to_dcc_buffer ();
extern void gui_input_page_up ();
extern void gui_input_page_down ();
extern void gui_input_nick_beginning ();
+62 -89
View File
@@ -1503,86 +1503,86 @@ gui_draw_buffer_input (t_gui_buffer *buffer, int erase)
wnoutrefresh (ptr_win->win_input);
}
if (buffer->input_buffer_size == 0)
buffer->input_buffer[0] = '\0';
input_width = gui_get_input_width (ptr_win);
if (buffer->input_buffer_pos - buffer->input_buffer_1st_display + 1 >
input_width)
buffer->input_buffer_1st_display = buffer->input_buffer_pos -
input_width + 1;
else
if (buffer->dcc)
{
if (buffer->input_buffer_pos < buffer->input_buffer_1st_display)
buffer->input_buffer_1st_display = buffer->input_buffer_pos;
else
dcc_selected = (ptr_win->dcc_selected) ? (t_irc_dcc *) ptr_win->dcc_selected : dcc_list;
wmove (ptr_win->win_input, 0, 0);
if (dcc_selected)
{
if ((buffer->input_buffer_1st_display > 0) &&
(buffer->input_buffer_pos -
buffer->input_buffer_1st_display + 1) < input_width)
switch (dcc_selected->status)
{
buffer->input_buffer_1st_display =
buffer->input_buffer_pos - input_width + 1;
if (buffer->input_buffer_1st_display < 0)
buffer->input_buffer_1st_display = 0;
case DCC_WAITING:
if (DCC_IS_RECV(dcc_selected->type))
wprintw (ptr_win->win_input, _(" [A] Accept"));
wprintw (ptr_win->win_input, _(" [C] Cancel"));
break;
case DCC_CONNECTING:
case DCC_ACTIVE:
wprintw (ptr_win->win_input, _(" [C] Cancel"));
break;
case DCC_DONE:
case DCC_FAILED:
case DCC_ABORTED:
wprintw (ptr_win->win_input, _(" [R] Remove"));
break;
}
}
}
if (CHANNEL(buffer))
{
snprintf (format, 32, "%%s %%s> %%-%ds", input_width);
if (ptr_win == gui_current_window)
mvwprintw (ptr_win->win_input, 0, 0, format,
CHANNEL(buffer)->name,
SERVER(buffer)->nick,
buffer->input_buffer + buffer->input_buffer_1st_display);
else
mvwprintw (ptr_win->win_input, 0, 0, format,
CHANNEL(buffer)->name,
SERVER(buffer)->nick,
"");
wprintw (ptr_win->win_input, _(" [P] Purge old DCC"));
wprintw (ptr_win->win_input, _(" [Q] Close DCC view"));
wclrtoeol (ptr_win->win_input);
ptr_win->win_input_x = strlen (CHANNEL(buffer)->name) +
strlen (SERVER(buffer)->nick) + 3 +
(buffer->input_buffer_pos - buffer->input_buffer_1st_display);
ptr_win->win_input_x = 0;
if (ptr_win == gui_current_window)
move (ptr_win->win_y + ptr_win->win_height - 1,
ptr_win->win_x + ptr_win->win_input_x);
ptr_win->win_x);
}
else
else if (buffer->has_input)
{
if (buffer->dcc)
if (buffer->input_buffer_size == 0)
buffer->input_buffer[0] = '\0';
input_width = gui_get_input_width (ptr_win);
if (buffer->input_buffer_pos - buffer->input_buffer_1st_display + 1 >
input_width)
buffer->input_buffer_1st_display = buffer->input_buffer_pos -
input_width + 1;
else
{
dcc_selected = (ptr_win->dcc_selected) ? (t_irc_dcc *) ptr_win->dcc_selected : dcc_list;
wmove (ptr_win->win_input, 0, 0);
if (dcc_selected)
if (buffer->input_buffer_pos < buffer->input_buffer_1st_display)
buffer->input_buffer_1st_display = buffer->input_buffer_pos;
else
{
switch (dcc_selected->status)
if ((buffer->input_buffer_1st_display > 0) &&
(buffer->input_buffer_pos -
buffer->input_buffer_1st_display + 1) < input_width)
{
case DCC_WAITING:
if (DCC_IS_RECV(dcc_selected->type))
wprintw (ptr_win->win_input, _(" [A] Accept"));
wprintw (ptr_win->win_input, _(" [C] Cancel"));
break;
case DCC_CONNECTING:
case DCC_ACTIVE:
wprintw (ptr_win->win_input, _(" [C] Cancel"));
break;
case DCC_DONE:
case DCC_FAILED:
case DCC_ABORTED:
wprintw (ptr_win->win_input, _(" [R] Remove"));
break;
buffer->input_buffer_1st_display =
buffer->input_buffer_pos - input_width + 1;
if (buffer->input_buffer_1st_display < 0)
buffer->input_buffer_1st_display = 0;
}
}
wprintw (ptr_win->win_input, _(" [P] Purge old DCC"));
wprintw (ptr_win->win_input, _(" [Q] Close DCC view"));
}
if (CHANNEL(buffer))
{
snprintf (format, 32, "%%s %%s> %%-%ds", input_width);
if (ptr_win == gui_current_window)
mvwprintw (ptr_win->win_input, 0, 0, format,
CHANNEL(buffer)->name,
SERVER(buffer)->nick,
buffer->input_buffer + buffer->input_buffer_1st_display);
else
mvwprintw (ptr_win->win_input, 0, 0, format,
CHANNEL(buffer)->name,
SERVER(buffer)->nick,
"");
wclrtoeol (ptr_win->win_input);
ptr_win->win_input_x = 0;
ptr_win->win_input_x = strlen (CHANNEL(buffer)->name) +
strlen (SERVER(buffer)->nick) + 3 +
(buffer->input_buffer_pos - buffer->input_buffer_1st_display);
if (ptr_win == gui_current_window)
move (ptr_win->win_y + ptr_win->win_height - 1,
ptr_win->win_x);
ptr_win->win_x + ptr_win->win_input_x);
}
else
{
@@ -1758,33 +1758,6 @@ gui_get_dcc_buffer ()
return gui_buffer_new (gui_current_window, NULL, NULL, 1, 0);
}
/*
* gui_switch_to_dcc_buffer: switch to dcc buffer (create it if it does not exist)
*/
void
gui_switch_to_dcc_buffer ()
{
t_gui_buffer *ptr_buffer;
if (!gui_ok)
return;
/* check if dcc buffer exists */
for (ptr_buffer = gui_buffers; ptr_buffer; ptr_buffer = ptr_buffer->next_buffer)
{
if (ptr_buffer->dcc)
break;
}
if (ptr_buffer)
{
gui_switch_to_buffer (gui_current_window, ptr_buffer);
gui_redraw_buffer (ptr_buffer);
}
else
gui_buffer_new (gui_current_window, NULL, NULL, 1, 1);
}
/*
* gui_input_page_up: display previous page on buffer
*/
+24
View File
@@ -1603,6 +1603,30 @@ gui_switch_to_next_window ()
gui_redraw_buffer (gui_current_window->buffer);
}
/*
* gui_switch_to_dcc_buffer: switch to dcc buffer (create it if it does not exist)
*/
void
gui_switch_to_dcc_buffer ()
{
t_gui_buffer *ptr_buffer;
/* check if dcc buffer exists */
for (ptr_buffer = gui_buffers; ptr_buffer; ptr_buffer = ptr_buffer->next_buffer)
{
if (ptr_buffer->dcc)
break;
}
if (ptr_buffer)
{
gui_switch_to_buffer (gui_current_window, ptr_buffer);
gui_redraw_buffer (ptr_buffer);
}
else
gui_buffer_new (gui_current_window, NULL, NULL, 1, 1);
}
/*
* gui_switch_to_buffer_by_number: switch to another buffer with number
*/
+1 -1
View File
@@ -346,6 +346,7 @@ extern void gui_switch_to_previous_buffer ();
extern void gui_switch_to_next_buffer ();
extern void gui_switch_to_previous_window ();
extern void gui_switch_to_next_window ();
extern void gui_switch_to_dcc_buffer ();
extern t_gui_buffer *gui_switch_to_buffer_by_number (t_gui_window *, int);
extern void gui_move_buffer_to_number (t_gui_window *, int);
extern void gui_window_print_log (t_gui_window *);
@@ -382,7 +383,6 @@ extern void gui_draw_buffer_input (t_gui_buffer *, int);
extern void gui_redraw_buffer (t_gui_buffer *);
extern void gui_switch_to_buffer (t_gui_window *, t_gui_buffer *);
extern t_gui_buffer *gui_get_dcc_buffer ();
extern void gui_switch_to_dcc_buffer ();
extern void gui_input_page_up ();
extern void gui_input_page_down ();
extern void gui_input_nick_beginning ();