* hotlist.c (unlink_entry): Add missed brackets.

(add_new_entry_cmd): Fix memory leaks and double free()s.
       (add2hotlist_cmd): Eliminate static label_string.
This commit is contained in:
Andrew V. Samoilov 2004-11-10 11:02:23 +00:00
parent 188b970477
commit 852cdfb00b
2 changed files with 42 additions and 41 deletions

View File

@ -1,3 +1,9 @@
2004-11-10 Andrew V. Samoilov <sav@bcs.zp.ua>
* hotlist.c (unlink_entry): Add missed brackets.
(add_new_entry_cmd): Fix memory leaks and double free()s.
(add2hotlist_cmd): Eliminate static label_string.
2004-11-09 Pavel Shirshov <me@pavelsh.pp.ru> 2004-11-09 Pavel Shirshov <me@pavelsh.pp.ru>
* util.c (strip_password): Fix bug - don't delete path from url. * util.c (strip_password): Fix bug - don't delete path from url.

View File

@ -254,11 +254,12 @@ unlink_entry (struct hotlist *entry)
if (current == entry) if (current == entry)
current_group->head = entry->next; current_group->head = entry->next;
else else {
while (current && current->next != entry) while (current && current->next != entry)
current = current->next; current = current->next;
if (current) if (current)
current->next = entry->next; current->next = entry->next;
}
entry->next = entry->next =
entry->up = 0; entry->up = 0;
} }
@ -717,11 +718,10 @@ static void hotlist_done (void)
repaint_screen (); repaint_screen ();
} }
static char * static inline char *
find_group_section (struct hotlist *grp) find_group_section (struct hotlist *grp)
{ {
return g_strconcat (grp->directory, ".Group", (char *) NULL); return g_strconcat (grp->directory, ".Group", (char *) NULL);
} }
@ -729,6 +729,11 @@ find_group_section (struct hotlist *grp)
see widget.c, listbox_add_item() see widget.c, listbox_add_item()
now hotlist is in unsorted mode now hotlist is in unsorted mode
*/ */
enum {
HL_BEFORE_CURRENT = 1
,HL_AFTER_CURRENT = 2
};
static struct hotlist * static struct hotlist *
add2hotlist (char *label, char *directory, enum HotListType type, int pos) add2hotlist (char *label, char *directory, enum HotListType type, int pos)
{ {
@ -754,15 +759,15 @@ add2hotlist (char *label, char *directory, enum HotListType type, int pos)
if (!current_group->head) { /* first element in group */ if (!current_group->head) { /* first element in group */
current_group->head = new; current_group->head = new;
} else if (pos == 2) { /* should be appended after current*/ } else if (pos == HL_AFTER_CURRENT) {
new->next = current->next; new->next = current->next;
current->next = new; current->next = new;
} else if (pos == 1 && } else if (pos == HL_BEFORE_CURRENT &&
current == current_group->head) { current == current_group->head) {
/* should be inserted before first item */ /* should be inserted before first item */
new->next = current; new->next = current;
current_group->head = new; current_group->head = new;
} else if (pos == 1) { /* before current */ } else if (pos == HL_BEFORE_CURRENT) {
struct hotlist *p = current_group->head; struct hotlist *p = current_group->head;
while (p->next != current) while (p->next != current)
@ -850,7 +855,6 @@ add_new_entry_input (const char *header, const char *text1, const char *text2,
size_t len; size_t len;
int i; int i;
int lines1, lines2; int lines1, lines2;
char *my_str1, *my_str2;
#ifdef ENABLE_NLS #ifdef ENABLE_NLS
static int i18n_flag = 0; static int i18n_flag = 0;
@ -888,13 +892,11 @@ add_new_entry_input (const char *header, const char *text1, const char *text2,
quick_widgets [3].relative_y = RELATIVE_Y_INPUT_PTH + (lines1); quick_widgets [3].relative_y = RELATIVE_Y_INPUT_PTH + (lines1);
quick_widgets [4].relative_y = RELATIVE_Y_LABEL_PTH + (lines1); quick_widgets [4].relative_y = RELATIVE_Y_LABEL_PTH + (lines1);
quick_widgets [5].str_result = &my_str1; quick_widgets [5].str_result = r1;
quick_widgets [3].str_result = &my_str2; quick_widgets [3].str_result = r2;
Quick_input.widgets = quick_widgets; Quick_input.widgets = quick_widgets;
if ((i = quick_dialog (&Quick_input)) != B_CANCEL){ if ((i = quick_dialog (&Quick_input)) != B_CANCEL){
*r1 = my_str1;
*r2 = my_str2;
return i; return i;
} else } else
return 0; return 0;
@ -902,34 +904,34 @@ add_new_entry_input (const char *header, const char *text1, const char *text2,
static void add_new_entry_cmd (void) static void add_new_entry_cmd (void)
{ {
char *title, *url; char *title, *url, *to_free;
int ret; int ret;
/* Take current directory as default value for input fields */ /* Take current directory as default value for input fields */
url = strip_password (g_strdup(current_panel->cwd), 1); to_free = title = url = strip_password (g_strdup (current_panel->cwd), 1);
title = g_strdup (url);
ret = add_new_entry_input (_("New hotlist entry"), _("Directory label"), ret = add_new_entry_input (_("New hotlist entry"), _("Directory label"),
_("Directory path"), "[Hotlist]", &title, &url); _("Directory path"), "[Hotlist]", &title, &url);
g_free (to_free);
if (!ret || !title || !*title || !url || !*url) { if (!ret)
return;
if (!title || !*title || !url || !*url) {
g_free (title); g_free (title);
g_free (url); g_free (url);
return; return;
} }
if (ret == B_ENTER || ret == B_APPEND) if (ret == B_ENTER || ret == B_APPEND)
add2hotlist (title, url, HL_TYPE_ENTRY, 2); add2hotlist (title, url, HL_TYPE_ENTRY, HL_AFTER_CURRENT);
else else
add2hotlist (title, url, HL_TYPE_ENTRY, 1); add2hotlist (title, url, HL_TYPE_ENTRY, HL_BEFORE_CURRENT);
hotlist_state.modified = 1; hotlist_state.modified = 1;
g_free (title);
g_free (url);
} }
static int add_new_group_input (const char *header, const char *label, char **result) static int
add_new_group_input (const char *header, const char *label, char **result)
{ {
int ret; int ret;
QuickDialog Quick_input; QuickDialog Quick_input;
@ -948,7 +950,6 @@ static int add_new_group_input (const char *header, const char *label, char **re
int len; int len;
int i; int i;
int lines; int lines;
char *my_str;
#ifdef ENABLE_NLS #ifdef ENABLE_NLS
static int i18n_flag = 0; static int i18n_flag = 0;
@ -979,12 +980,11 @@ static int add_new_group_input (const char *header, const char *label, char **re
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
quick_widgets [i].relative_y = relative_y[i] + 2 + lines; quick_widgets [i].relative_y = relative_y[i] + 2 + lines;
quick_widgets [3].str_result = &my_str; quick_widgets [3].str_result = result;
quick_widgets [3].text = ""; quick_widgets [3].text = "";
Quick_input.widgets = quick_widgets; Quick_input.widgets = quick_widgets;
if ((ret = quick_dialog (&Quick_input)) != B_CANCEL){ if ((ret = quick_dialog (&Quick_input)) != B_CANCEL){
*result = my_str;
return ret; return ret;
} else } else
return 0; return 0;
@ -1000,9 +1000,9 @@ static void add_new_group_cmd (void)
return; return;
if (ret == B_ENTER || ret == B_APPEND) if (ret == B_ENTER || ret == B_APPEND)
add2hotlist (label, 0, HL_TYPE_GROUP, 2); add2hotlist (label, 0, HL_TYPE_GROUP, HL_AFTER_CURRENT);
else else
add2hotlist (label, 0, HL_TYPE_GROUP, 1); add2hotlist (label, 0, HL_TYPE_GROUP, HL_BEFORE_CURRENT);
hotlist_state.modified = 1; hotlist_state.modified = 1;
} }
@ -1012,19 +1012,20 @@ void add2hotlist_cmd (void)
char *prompt, *label; char *prompt, *label;
const char *cp = _("Label for \"%s\":"); const char *cp = _("Label for \"%s\":");
int l = strlen (cp); int l = strlen (cp);
static char label_string[MC_MAXPATHLEN+1]; char *label_string = g_strdup (current_panel->cwd);
g_strlcpy(label_string, current_panel->cwd, MC_MAXPATHLEN+1);
strip_password (label_string, 1); strip_password (label_string, 1);
prompt = g_strdup_printf (cp, path_trunc (current_panel->cwd, COLS-2*UX-(l+8))); prompt = g_strdup_printf (cp, path_trunc (current_panel->cwd, COLS-2*UX-(l+8)));
label = input_dialog (_(" Add to hotlist "), prompt, label_string); label = input_dialog (_(" Add to hotlist "), prompt, label_string);
g_free (prompt); g_free (prompt);
if (!label || !*label) if (!label || !*label) {
g_free (label_string);
g_free (label);
return; return;
}
add2hotlist (label, g_strdup (label_string), HL_TYPE_ENTRY, 0); add2hotlist (label, label_string, HL_TYPE_ENTRY, 0);
hotlist_state.modified = 1; hotlist_state.modified = 1;
} }
@ -1497,9 +1498,7 @@ do { \
INDENT (list_level); INDENT (list_level);
fputs ("GROUP \"", hotlist_file); fputs ("GROUP \"", hotlist_file);
for (s = current->label; *s; s++) { for (s = current->label; *s; s++) {
if (*s == '"') if (*s == '"' || *s == '\\')
putc ('\\', hotlist_file);
else if (*s == '\\')
putc ('\\', hotlist_file); putc ('\\', hotlist_file);
putc (*s, hotlist_file); putc (*s, hotlist_file);
} }
@ -1514,17 +1513,13 @@ do { \
INDENT(list_level); INDENT(list_level);
fputs ("ENTRY \"", hotlist_file); fputs ("ENTRY \"", hotlist_file);
for (s = current->label; *s; s++) { for (s = current->label; *s; s++) {
if (*s == '"') if (*s == '"' || *s == '\\')
putc ('\\', hotlist_file);
else if (*s == '\\')
putc ('\\', hotlist_file); putc ('\\', hotlist_file);
putc (*s, hotlist_file); putc (*s, hotlist_file);
} }
fputs ("\" URL \"", hotlist_file); fputs ("\" URL \"", hotlist_file);
for (s = current->directory; *s; s++) { for (s = current->directory; *s; s++) {
if (*s == '"') if (*s == '"' || *s == '\\')
putc ('\\', hotlist_file);
else if (*s == '\\')
putc ('\\', hotlist_file); putc ('\\', hotlist_file);
putc (*s, hotlist_file); putc (*s, hotlist_file);
} }