mirror of
https://github.com/MidnightCommander/mc
synced 2025-01-03 10:04:32 +03:00
src/filemanager/find.c: refactoring: optimize variable usages.
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
This commit is contained in:
parent
a38c7f19e9
commit
22e83bad08
@ -815,8 +815,7 @@ find_parameters (char **start_dir, ssize_t * start_dir_len,
|
|||||||
g_free (options.ignore_dirs);
|
g_free (options.ignore_dirs);
|
||||||
options.ignore_dirs = g_strdup (in_ignore->buffer);
|
options.ignore_dirs = g_strdup (in_ignore->buffer);
|
||||||
|
|
||||||
content_is_empty = in_with->buffer[0] == '\0';
|
*content = in_with->buffer[0] != '\0' ? g_strdup (in_with->buffer) : NULL;
|
||||||
*content = content_is_empty ? NULL : g_strdup (in_with->buffer);
|
|
||||||
if (in_name->buffer[0] != '\0')
|
if (in_name->buffer[0] != '\0')
|
||||||
*pattern = g_strdup (in_name->buffer);
|
*pattern = g_strdup (in_name->buffer);
|
||||||
else
|
else
|
||||||
@ -1717,20 +1716,13 @@ kill_gui (void)
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
do_find (const char *start_dir, ssize_t start_dir_len, const char *ignore_dirs,
|
do_find (const char *start_dir, ssize_t start_dir_len, const char *ignore_dirs,
|
||||||
const char *pattern, const char *content, char **dirname, char **filename)
|
char **dirname, char **filename)
|
||||||
{
|
{
|
||||||
int return_value = 0;
|
int return_value = 0;
|
||||||
char *dir_tmp = NULL, *file_tmp = NULL;
|
char *dir_tmp = NULL, *file_tmp = NULL;
|
||||||
|
|
||||||
setup_gui ();
|
setup_gui ();
|
||||||
|
|
||||||
/* FIXME: Need to cleanup this, this ought to be passed non-globaly */
|
|
||||||
find_pattern = (char *) pattern;
|
|
||||||
|
|
||||||
content_pattern = NULL;
|
|
||||||
if (content != NULL && str_is_valid_string (content))
|
|
||||||
content_pattern = g_strdup (content);
|
|
||||||
|
|
||||||
init_find_vars ();
|
init_find_vars ();
|
||||||
parse_ignore_dirs (ignore_dirs);
|
parse_ignore_dirs (ignore_dirs);
|
||||||
push_directory (vfs_path_from_str (start_dir));
|
push_directory (vfs_path_from_str (start_dir));
|
||||||
@ -1770,7 +1762,7 @@ do_find (const char *start_dir, ssize_t start_dir_len, const char *ignore_dirs,
|
|||||||
if ((le->text == NULL) || (location == NULL) || (location->dir == NULL))
|
if ((le->text == NULL) || (location == NULL) || (location->dir == NULL))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (content_pattern != NULL)
|
if (!content_is_empty)
|
||||||
lc_filename = strchr (le->text + 4, ':') + 1;
|
lc_filename = strchr (le->text + 4, ':') + 1;
|
||||||
else
|
else
|
||||||
lc_filename = le->text + 4;
|
lc_filename = le->text + 4;
|
||||||
@ -1799,7 +1791,7 @@ do_find (const char *start_dir, ssize_t start_dir_len, const char *ignore_dirs,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* don't add files more than once to the panel */
|
/* don't add files more than once to the panel */
|
||||||
if (content_pattern != NULL && list->len != 0
|
if (!content_is_empty && list->len != 0
|
||||||
&& strcmp (list->list[list->len - 1].fname, p) == 0)
|
&& strcmp (list->list[list->len - 1].fname, p) == 0)
|
||||||
{
|
{
|
||||||
g_free (name);
|
g_free (name);
|
||||||
@ -1826,7 +1818,6 @@ do_find (const char *start_dir, ssize_t start_dir_len, const char *ignore_dirs,
|
|||||||
panelize_save_panel (current_panel);
|
panelize_save_panel (current_panel);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_free (content_pattern);
|
|
||||||
kill_gui ();
|
kill_gui ();
|
||||||
do_search (NULL); /* force do_search to release resources */
|
do_search (NULL); /* force do_search to release resources */
|
||||||
MC_PTR_FREE (old_dir);
|
MC_PTR_FREE (old_dir);
|
||||||
@ -1842,27 +1833,36 @@ do_find (const char *start_dir, ssize_t start_dir_len, const char *ignore_dirs,
|
|||||||
void
|
void
|
||||||
find_file (void)
|
find_file (void)
|
||||||
{
|
{
|
||||||
char *start_dir = NULL, *pattern = NULL, *content = NULL, *ignore_dirs = NULL;
|
char *start_dir = NULL, *ignore_dirs = NULL;
|
||||||
ssize_t start_dir_len;
|
ssize_t start_dir_len;
|
||||||
|
|
||||||
while (find_parameters (&start_dir, &start_dir_len, &ignore_dirs, &pattern, &content))
|
find_pattern = NULL;
|
||||||
|
content_pattern = NULL;
|
||||||
|
|
||||||
|
while (find_parameters (&start_dir, &start_dir_len,
|
||||||
|
&ignore_dirs, &find_pattern, &content_pattern))
|
||||||
{
|
{
|
||||||
char *filename = NULL, *dirname = NULL;
|
char *filename = NULL, *dirname = NULL;
|
||||||
int v = B_CANCEL;
|
int v = B_CANCEL;
|
||||||
|
|
||||||
if (pattern[0] != '\0')
|
content_is_empty = content_pattern == NULL;
|
||||||
|
|
||||||
|
if (find_pattern[0] != '\0')
|
||||||
{
|
{
|
||||||
last_refresh.tv_sec = 0;
|
last_refresh.tv_sec = 0;
|
||||||
last_refresh.tv_usec = 0;
|
last_refresh.tv_usec = 0;
|
||||||
|
|
||||||
is_start = FALSE;
|
is_start = FALSE;
|
||||||
v = do_find (start_dir, start_dir_len, ignore_dirs, pattern, content, &dirname,
|
|
||||||
&filename);
|
if (!content_is_empty && !str_is_valid_string (content_pattern))
|
||||||
|
MC_PTR_FREE (content_pattern);
|
||||||
|
|
||||||
|
v = do_find (start_dir, start_dir_len, ignore_dirs, &dirname, &filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_free (start_dir);
|
g_free (start_dir);
|
||||||
g_free (ignore_dirs);
|
g_free (ignore_dirs);
|
||||||
g_free (pattern);
|
MC_PTR_FREE (find_pattern);
|
||||||
|
|
||||||
if (v == B_ENTER)
|
if (v == B_ENTER)
|
||||||
{
|
{
|
||||||
@ -1875,7 +1875,7 @@ find_file (void)
|
|||||||
vfs_path_free (dirname_vpath);
|
vfs_path_free (dirname_vpath);
|
||||||
if (filename != NULL)
|
if (filename != NULL)
|
||||||
try_to_select (current_panel,
|
try_to_select (current_panel,
|
||||||
filename + (content != NULL
|
filename + (content_pattern != NULL
|
||||||
? strchr (filename + 4, ':') - filename + 1 : 4));
|
? strchr (filename + 4, ':') - filename + 1 : 4));
|
||||||
}
|
}
|
||||||
else if (filename != NULL)
|
else if (filename != NULL)
|
||||||
@ -1888,7 +1888,7 @@ find_file (void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
g_free (content);
|
MC_PTR_FREE (content_pattern);
|
||||||
g_free (dirname);
|
g_free (dirname);
|
||||||
g_free (filename);
|
g_free (filename);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user