mirror of
https://github.com/MidnightCommander/mc
synced 2024-12-23 04:46:55 +03:00
* 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:
parent
188b970477
commit
852cdfb00b
@ -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.
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user