Ejemplo n.º 1
0
dir_t Sys_listdir (char *path, char *ext, qbool usesorting)
{
	static file_t list[MAX_DIRFILES];
	dir_t	d;
	int		i, extsize;
	DIR		*dir;
    struct dirent *oneentry;
	char	pathname[MAX_OSPATH];
	qbool all;

	memset(list, 0, sizeof(list));
	memset(&d, 0, sizeof(d));
	d.files = list;
	extsize = strlen(ext);
	all = !strcmp(ext, ".*");

	dir=opendir(path);
	if (!dir)
	{
		return d;
	}

	for(;;)
	{
		oneentry=readdir(dir);
		if(!oneentry)
			break;

#ifndef __CYGWIN__
		if (oneentry->d_type == DT_DIR || oneentry->d_type == DT_LNK)
		{
			d.numdirs++;
			continue;
		}
#endif

		sprintf(pathname, "%s/%s", path, oneentry->d_name);
		list[d.numfiles].size = COM_FileSize(pathname);
		d.size += list[d.numfiles].size;

		i = strlen(oneentry->d_name);
		if (!all && (i < extsize || (Q_strcasecmp(oneentry->d_name+i-extsize, ext))))
			continue;

		Q_strncpyz(list[d.numfiles].name, oneentry->d_name, MAX_MVD_NAME);


		if (++d.numfiles == MAX_DIRFILES)
			break;
	}

	closedir(dir);

	return d;
}
Ejemplo n.º 2
0
// FIXME: evil evil terminating zero
// adding a terminal zero
bool_t COM_ReadFile( const char *path, byte **outBuf, size_t *outSz ) {
	size_t sz;
	FILE *f = fopen( path, "rb" );
	byte *b;
	
	if ( ! f ) {
		return false;
	}
	
	sz = COM_FileSize( f );

	b = A_Malloc( sz + 1 ); // make space for trailing zero
	sz = Minsz( sz, fread( b, 1, sz, f ) );
	fclose( f );

	b[sz] = '\0';

	*outBuf = b;
    *outSz = sz;
	return true;
}