예제 #1
0
TEARDOWN()
{
	int i;

	for(i = 0; i < lwin.list_rows; i++)
		free(lwin.dir_entry[i].name);
	dynarray_free(lwin.dir_entry);

	for(i = 0; i < rwin.list_rows; i++)
		free(rwin.dir_entry[i].name);
	dynarray_free(rwin.dir_entry);
}
예제 #2
0
TEARDOWN()
{
	int i;

	update_string(&cfg.shell, NULL);

	for(i = 0; i < lwin.list_rows; i++)
		free(lwin.dir_entry[i].name);
	dynarray_free(lwin.dir_entry);

	for(i = 0; i < rwin.list_rows; i++)
		free(rwin.dir_entry[i].name);
	dynarray_free(rwin.dir_entry);
}
예제 #3
0
/* Composes two views containing only files that are unique to each of them.
 * Assumes that both lists are sorted by id. */
static void
make_unique_lists(entries_t curr, entries_t other)
{
	int i, j = 0;

	flist_custom_start(curr_view, "unique");
	flist_custom_start(other_view, "unique");

	for(i = 0; i < other.nentries; ++i)
	{
		const int id = other.entries[i].id;

		while(j < curr.nentries && curr.entries[j].id < id)
		{
			flist_custom_put(curr_view, &curr.entries[j]);
			++j;
		}

		if(j >= curr.nentries || curr.entries[j].id != id)
		{
			flist_custom_put(other_view, &other.entries[i]);
			continue;
		}

		while(j < curr.nentries && curr.entries[j].id == id)
		{
			free_dir_entry(curr_view, &curr.entries[j++]);
		}
		while(i < other.nentries && other.entries[i].id == id)
		{
			free_dir_entry(other_view, &other.entries[i++]);
		}
		--i;
	}

	/* Entries' data has been moved out of them or freed, so need to free only the
	 * lists. */
	dynarray_free(curr.entries);
	dynarray_free(other.entries);

	(void)flist_custom_finish(curr_view, CV_REGULAR, 1);
	(void)flist_custom_finish(other_view, CV_REGULAR, 1);

	curr_view->list_pos = 0;
	other_view->list_pos = 0;

	ui_view_schedule_redraw(curr_view);
	ui_view_schedule_redraw(other_view);
}
static void algorithm_instance_free(algorithm_instance_t * instance)
{
    if (instance) {
        dynarray_free(instance->events, (ELEMENT_FREE) event_free);
        free(instance);
    }
}
예제 #5
0
파일: sort.c 프로젝트: acklinr/vifm
void
sort_view(view_t *v)
{
	dir_entry_t *unsorted_list;

	if(v->sort[0] > SK_LAST)
	{
		/* Completely skip sorting if primary key isn't set. */
		return;
	}

	view = v;
	view_sort = v->sort;
	view_sort_groups = v->sort_groups;
	custom_view = flist_custom_active(v);

	if(!custom_view || !cv_tree(v->custom.type))
	{
		/* Tree sorting works fine for flat list, but requires a bit more
		 * resources, so skip it. */
		sort_sequence(&v->dir_entry[0], v->list_rows);
		return;
	}

	/* When local filter isn't empty, parent directories disappear and sorting
	 * stops being aware of tree structure to some degree.  Perform one more round
	 * of stable sorting of origins to group child nodes. */
	if(!filter_is_empty(&v->local_filter.filter))
	{
		flist_custom_uncompress_tree(v);
	}

	unsorted_list = v->dir_entry;
	v->dir_entry = dynarray_extend(NULL, v->list_rows*sizeof(*v->dir_entry));
	if(v->dir_entry != NULL)
	{
		sort_tree_slice(&v->dir_entry[0], unsorted_list, v->list_rows, 1);
	}
	else
	{
		/* Just do nothing on memory error. */
		v->dir_entry = unsorted_list;
		unsorted_list = NULL;
	}

	if(filter_is_empty(&v->local_filter.filter))
	{
		dynarray_free(unsorted_list);
	}
	else
	{
		filters_drop_temporaries(v, unsorted_list);
	}
}
예제 #6
0
파일: filtering.c 프로젝트: vifm/vifm
/* Finishes filtering process and frees associated resources. */
static void
local_filter_finish(view_t *view)
{
	dynarray_free(view->local_filter.unfiltered);
	free(view->local_filter.saved);
	view->local_filter.in_progress = 0;

	free(view->local_filter.poshist);
	view->local_filter.poshist = NULL;
	view->local_filter.poshist_len = 0U;
}
예제 #7
0
파일: sync.c 프로젝트: cfillion/vifm
static void
free_view(FileView *view)
{
	int i;

	for(i = 0; i < view->list_rows; ++i)
	{
		free(view->dir_entry[i].name);
	}
	dynarray_free(view->dir_entry);
}
예제 #8
0
static void
teardown_view(FileView *view)
{
	int i;
	for(i = 0; i < view->list_rows; ++i)
	{
		free_dir_entry(view, &view->dir_entry[i]);
	}
	dynarray_free(view->dir_entry);
	view->list_rows = 0;
	view->selected_files = 0;
}
예제 #9
0
파일: size.c 프로젝트: richarddewit/vifm
TEARDOWN()
{
	int i;

	reset_status(&cfg);

	for(i = 0; i < lwin.list_rows; ++i)
	{
		free_dir_entry(&lwin, &lwin.dir_entry[i]);
	}
	dynarray_free(lwin.dir_entry);
}
예제 #10
0
파일: utils.c 프로젝트: cfillion/vifm
void
view_teardown(FileView *view)
{
	int i;

	for(i = 0; i < view->list_rows; ++i)
	{
		free_dir_entry(view, &view->dir_entry[i]);
	}
	dynarray_free(view->dir_entry);

	for(i = 0; i < view->custom.entry_count; ++i)
	{
		free_dir_entry(view, &view->custom.entries[i]);
	}
	dynarray_free(view->custom.entries);

	filter_dispose(&view->local_filter.filter);
	filter_dispose(&view->auto_filter);
	filter_dispose(&view->manual_filter);
}
예제 #11
0
파일: outcoff.c 프로젝트: 7ym0n/note
/***********************************************************
 * 功能:	释放所有节数据
 **********************************************************/
void free_sections()
{
	int i;
	Section *sec;
	for(i = 0; i < sections.count; i++)
	{
		sec = (Section*)sections.data[i];
		if(sec->hashtab != NULL)
			free(sec->hashtab);  
		free(sec->data);
	}
	dynarray_free(&sections);
}
예제 #12
0
파일: chase_links.c 프로젝트: cfillion/vifm
static void
free_view(FileView *view)
{
	int i;

	for(i = 0; i < view->list_rows; ++i)
	{
		free(view->dir_entry[i].name);
	}
	dynarray_free(view->dir_entry);

	filter_dispose(&view->local_filter.filter);
	filter_dispose(&view->manual_filter);
	filter_dispose(&view->auto_filter);
}
예제 #13
0
void network_free(network_t * network)
{
    if (network) {
        dynarray_free(network->probes, (ELEMENT_FREE) probe_free);
        close(network->timerfd);
        sniffer_free(network->sniffer);
        queue_free(network->sendq, (ELEMENT_FREE) probe_free);
        queue_free(network->recvq, (ELEMENT_FREE) probe_free);
        socketpool_free(network->socketpool);
#ifdef USE_SCHEDULING
        probe_group_free(network->scheduled_probes);
#endif
        free(network);
    }
}
예제 #14
0
TEARDOWN()
{
	int i;

	update_string(&cfg.shell, NULL);
	stats_update_shell_type("/bin/sh");

	for(i = 0; i < lwin.list_rows; ++i)
	{
		free_dir_entry(&lwin, &lwin.dir_entry[i]);
	}
	dynarray_free(lwin.dir_entry);

	ft_reset(0);
	update_string(&cfg.vi_command, NULL);
}
void
if_free(interface_t * * if_p_p)
{
    interface_t * if_p;

    if (if_p_p == NULL) {
	return;
    }
    if_p = *if_p_p;
    if (if_p == NULL) {
	return;
    }
    dynarray_free(&if_p->inet);
    free(if_p);
    *if_p_p = NULL;
    return;
}
void
ifl_free(interface_list_t * * iflist)
{
    if (iflist != NULL && *iflist != NULL) {
	int 			i;
	interface_list_t * 	list_p = *iflist;
	
	for (i = 0; i < list_p->count; i++) {
	    dynarray_free(&list_p->list[i].inet);
	}
	if (list_p->list)
	    free(list_p->list);
	free(list_p);
	*iflist = NULL;
    }
    return;
}
예제 #17
0
파일: filtering.c 프로젝트: vifm/vifm
void
local_filter_cancel(view_t *view)
{
	if(!view->local_filter.in_progress)
	{
		return;
	}

	(void)filter_set(&view->local_filter.filter, view->local_filter.saved);

	dynarray_free(view->dir_entry);
	view->dir_entry = NULL;
	view->list_rows = 0;

	update_filtering_lists(view, 1, 1);
	local_filter_finish(view);
}
예제 #18
0
void
view_teardown(FileView *view)
{
	int i;

	for(i = 0; i < view->list_rows; ++i)
	{
		free_dir_entry(view, &view->dir_entry[i]);
	}
	dynarray_free(view->dir_entry);

	filter_dispose(&view->local_filter.filter);
	filter_dispose(&view->manual_filter);
	filter_dispose(&view->auto_filter);

	fswatch_free(view->watch);
	view->watch = NULL;
}
STATIC void
DHCPv6SocketReleaseGlobals(DHCPv6SocketGlobalsRef * globals_p)
{
    DHCPv6SocketGlobalsRef	globals;

    if (globals_p == NULL) {
	return;
    }
    globals = *globals_p;
    if (globals == NULL) {
	return;
    }
    *globals_p = NULL;
    dynarray_free(&globals->sockets);
    FDCalloutRelease(&globals->read_fd);
    timer_callout_free(&globals->timer_callout);
    bzero(globals, sizeof(*globals));
    free(globals);
    return;
}
예제 #20
0
파일: filtering.c 프로젝트: vifm/vifm
void
filters_drop_temporaries(view_t *view, dir_entry_t entries[])
{
	/* This is basically a simplified version of update_filtering_lists().  Not
	 * sure if it's worth merging them. */

	int i;
	size_t list_size = 0U;

	for(i = 0; i < view->list_rows; ++i)
	{
		dir_entry_t *new_entry;
		dir_entry_t *const entry = &view->dir_entry[i];

		/* The tag field links to position of nodes passed through filter in the
		 * list of visible files.  Removed nodes have -1. */
		entry->tag = -1;

		if(entry->temporary)
		{
			fentry_free(view, entry);
			continue;
		}

		new_entry = add_dir_entry(&entries, &list_size, entry);
		if(new_entry != NULL)
		{
			entry->tag = list_size - 1U;
			/* We basically grow the tree node by node while performing
			 * reparenting. */
			reparent_tree_node(entry, new_entry);
		}
	}

	dynarray_free(view->dir_entry);
	view->dir_entry = entries;
	view->list_rows = list_size;
}
예제 #21
0
static void probe_layers_free(probe_t * probe) {
    dynarray_free(probe->layers, (ELEMENT_FREE) layer_free);
}
예제 #22
0
int
compare_one_pane(FileView *view, CompareType ct, ListType lt, int skip_empty)
{
	int i, dup_id;
	FileView *other = (view == curr_view) ? other_view : curr_view;
	const char *const title = (lt == LT_ALL)  ? "compare"
	                        : (lt == LT_DUPS) ? "dups" : "nondups";

	int next_id = 1;
	entries_t curr;

	trie_t *trie = trie_create();
	ui_cancellation_reset();
	ui_cancellation_enable();

	curr = make_diff_list(trie, view, &next_id, ct, skip_empty, 0);

	ui_cancellation_disable();
	trie_free_with_data(trie, &free_compare_records);

	/* Clear progress message displayed by make_diff_list(). */
	ui_sb_quick_msg_clear();

	if(ui_cancellation_requested())
	{
		free_dir_entries(view, &curr.entries, &curr.nentries);
		status_bar_message("Comparison has been cancelled");
		return 1;
	}

	qsort(curr.entries, curr.nentries, sizeof(*curr.entries), &id_sorter);

	flist_custom_start(view, title);

	dup_id = -1;
	next_id = 0;
	for(i = 0; i < curr.nentries; ++i)
	{
		dir_entry_t *entry = &curr.entries[i];

		if(lt == LT_ALL)
		{
			flist_custom_put(view, entry);
			continue;
		}

		if(entry->id == dup_id)
		{
			put_or_free(view, entry, next_id, lt == LT_DUPS);
			continue;
		}

		dup_id = (i < curr.nentries - 1 && entry[0].id == entry[1].id)
		       ? entry->id
		       : -1;

		if(entry->id == dup_id)
		{
			put_or_free(view, entry, ++next_id, lt == LT_DUPS);
			continue;
		}

		put_or_free(view, entry, next_id, lt == LT_UNIQUE);
	}

	/* Entries' data has been moved out of them or freed, so need to free only the
	 * list. */
	dynarray_free(curr.entries);

	if(flist_custom_finish(view, lt == LT_UNIQUE ? CV_REGULAR : CV_COMPARE,
				0) != 0)
	{
		show_error_msg("Comparison", "No results to display");
		return 0;
	}

	/* Leave the other pane, if it's in the CV_DIFF mode, two panes are needed for
	 * this. */
	if(other->custom.type == CV_DIFF)
	{
		cd_updir(other, 1);
	}

	view->list_pos = 0;
	ui_view_schedule_redraw(view);
	return 0;
}
예제 #23
0
/* Composes side-by-side comparison of files in two views. */
static void
fill_side_by_side(entries_t curr, entries_t other, int group_paths)
{
	enum { UP, LEFT, DIAG };

	int i, j;
	/* Describes results of solving sub-problems. */
	int (*d)[other.nentries + 1] =
		reallocarray(NULL, curr.nentries + 1, sizeof(*d));
	/* Describes paths (backtracking handles ambiguity badly). */
	char (*p)[other.nentries + 1] =
		reallocarray(NULL, curr.nentries + 1, sizeof(*p));

	for(i = 0; i <= curr.nentries; ++i)
	{
		for(j = 0; j <= other.nentries; ++j)
		{
			if(i == 0)
			{
				d[i][j] = j;
				p[i][j] = LEFT;
			}
			else if(j == 0)
			{
				d[i][j] = i;
				p[i][j] = UP;
			}
			else
			{
				const dir_entry_t *centry = &curr.entries[curr.nentries - i];
				const dir_entry_t *oentry = &other.entries[other.nentries - j];

				d[i][j] = MIN(d[i - 1][j] + 1, d[i][j - 1] + 1);
				p[i][j] = d[i][j] == d[i - 1][j] + 1 ? UP : LEFT;

				if((centry->id == oentry->id ||
							(group_paths && stroscmp(centry->name, oentry->name) == 0)) &&
						d[i - 1][j - 1] <= d[i][j])
				{
					d[i][j] = d[i - 1][j - 1];
					p[i][j] = DIAG;
				}
			}
		}
	}

	i = curr.nentries;
	j = other.nentries;
	while(i != 0 || j != 0)
	{
		switch(p[i][j])
		{
			dir_entry_t *e;

			case UP:
				e = &curr.entries[curr.nentries - 1 - --i];
				flist_custom_put(curr_view, e);
				flist_custom_add_separator(other_view, e->id);
				break;
			case LEFT:
				e = &other.entries[other.nentries - 1 - --j];
				flist_custom_put(other_view, e);
				flist_custom_add_separator(curr_view, e->id);
				break;
			case DIAG:
				flist_custom_put(curr_view, &curr.entries[curr.nentries - 1 - --i]);
				flist_custom_put(other_view, &other.entries[other.nentries - 1 - --j]);
				break;
		}
	}

	free(d);
	free(p);

	/* Entries' data has been moved out of them, so need to free only the
	 * lists. */
	dynarray_free(curr.entries);
	dynarray_free(other.entries);
}
예제 #24
0
파일: DHCPLease.c 프로젝트: aosm/bootp
void
DHCPLeaseListFree(DHCPLeaseListRef list_p)
{
    dynarray_free(list_p);
}