Example #1
0
File: ls.c Project: DeforaOS/utils
static int _ls(int argc, char * argv[], Prefs * prefs)
{
	SList * files;
	SList * dirs;
	compare_func cmp = _ls_compare(prefs);
	int ret = 0;
	int i;
	int isdir;
	char * str;

	if(argc == 0 && !(*prefs & LS_PREFS_d))
		return _ls_directory_do(prefs, ".");
	if(_ls_args(&files, &dirs) != 0)
		return 2;
	if(argc == 0)
		ret |= slist_insert_sorted(files, strdup("."), cmp);
	for(i = 0; i < argc; i++)
	{
		if((isdir = _is_directory(prefs, argv[i])) == 2)
			ret |= 1;
		else if((str = strdup(argv[i])) == NULL)
			ret |= _ls_error("malloc", 1);
		else if(*prefs & LS_PREFS_d)
			ret |= slist_insert_sorted(files, str, cmp);
		else
			ret |= slist_insert_sorted(isdir ? dirs : files, str,
					cmp);
	}
	ret |= _ls_do(prefs, argc, NULL, files, dirs);
	return ret == 0 ? 0 : 1;
}
Example #2
0
File: ls.c Project: DeforaOS/utils
static int _ls_directory_do(Prefs * prefs, char const * directory)
{
	SList * files;
	SList * dirs;
	compare_func cmp = _ls_compare(prefs);
	DIR * dir;
	struct dirent * de;
	char * file = NULL;
	char * p;
	int pos = 1;
	size_t len;

	if((dir = opendir(directory)) == NULL)
		return _ls_error(directory, 1);
	_ls_args(&files, &dirs);
	for(; (de = readdir(dir)) != NULL; pos++)
	{
		if(*(de->d_name) == '.' && !(*prefs & LS_PREFS_a))
			continue;
		slist_insert_sorted(files, strdup(de->d_name), cmp);
		if(pos <= 2)
			continue;
		len = strlen(directory) + 1 + strlen(de->d_name) + 1;
		if((p = realloc(file, len)) == NULL)
		{
			_ls_error("malloc", 0);
			continue;
		}
		file = p;
		snprintf(file, len, "%s/%s", directory, de->d_name);
		if((*prefs & LS_PREFS_R) && _is_directory(prefs, file) == 1)
			slist_insert_sorted(dirs, strdup(file), cmp);
	}
	free(file);
	if(closedir(dir) != 0)
		_ls_error(directory, 0);
	_ls_do(prefs, 2, directory, files, dirs);
	return 0;
}
	char * _get_real_name(gpointer alias)
	{
		return _is_directory(alias) ?
			g_strconcat(ALIASES_get_alias(alias)->str, "/", NULL)
			: g_strdup(ALIASES_get_alias(alias)->str);
	}