mirror of
https://github.com/nzp-team/fteqw.git
synced 2025-01-20 23:41:03 +00:00
Fixed Sys_EnumerateFiles(): Doesn't treat directories as files anymore and actually manages to figure out file sizes now.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@3494 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
af15a5945c
commit
8901f51133
2 changed files with 30 additions and 36 deletions
|
@ -32,6 +32,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
|
#include <dirent.h>
|
||||||
#ifndef __CYGWIN__
|
#ifndef __CYGWIN__
|
||||||
#include <sys/ipc.h>
|
#include <sys/ipc.h>
|
||||||
#include <sys/shm.h>
|
#include <sys/shm.h>
|
||||||
|
@ -244,13 +245,13 @@ int Sys_DebugLog(char *file, char *fmt, ...)
|
||||||
|
|
||||||
int Sys_EnumerateFiles (const char *gpath, const char *match, int (*func)(const char *, int, void *), void *parm)
|
int Sys_EnumerateFiles (const char *gpath, const char *match, int (*func)(const char *, int, void *), void *parm)
|
||||||
{
|
{
|
||||||
#include <dirent.h>
|
DIR *dir;
|
||||||
DIR *dir, *dir2;
|
|
||||||
char apath[MAX_OSPATH];
|
char apath[MAX_OSPATH];
|
||||||
char file[MAX_OSPATH];
|
char file[MAX_OSPATH];
|
||||||
char truepath[MAX_OSPATH];
|
char truepath[MAX_OSPATH];
|
||||||
char *s;
|
char *s;
|
||||||
struct dirent *ent;
|
struct dirent *ent;
|
||||||
|
struct stat st;
|
||||||
|
|
||||||
//printf("path = %s\n", gpath);
|
//printf("path = %s\n", gpath);
|
||||||
//printf("match = %s\n", match);
|
//printf("match = %s\n", match);
|
||||||
|
@ -291,29 +292,25 @@ int Sys_EnumerateFiles (const char *gpath, const char *match, int (*func)(const
|
||||||
if (!ent)
|
if (!ent)
|
||||||
break;
|
break;
|
||||||
if (*ent->d_name != '.')
|
if (*ent->d_name != '.')
|
||||||
|
{
|
||||||
if (wildcmp(match, ent->d_name))
|
if (wildcmp(match, ent->d_name))
|
||||||
{
|
{
|
||||||
Q_snprintfz(file, sizeof(file), "%s/%s", gpath, ent->d_name);
|
Q_snprintfz(file, sizeof(file), "%s/%s", truepath, ent->d_name);
|
||||||
//would use stat, but it breaks on fat32.
|
|
||||||
|
|
||||||
if ((dir2 = opendir(file)))
|
if (stat(file, &st) == 0)
|
||||||
{
|
{
|
||||||
closedir(dir2);
|
Q_snprintfz(file, sizeof(file), "%s%s%s", apath, ent->d_name, S_ISDIR(st.st_mode)?"/":"");
|
||||||
Q_snprintfz(file, sizeof(file), "%s%s/", apath, ent->d_name);
|
|
||||||
//printf("is directory = %s\n", file);
|
if (!func(file, st.st_size, parm))
|
||||||
|
{
|
||||||
|
closedir(dir);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
printf("Stat failed for \"%s\"\n", file);
|
||||||
Q_snprintfz(file, sizeof(file), "%s%s", apath, ent->d_name);
|
|
||||||
//printf("file = %s\n", file);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!func(file, -2, parm))
|
|
||||||
{
|
|
||||||
closedir(dir);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} while(1);
|
} while(1);
|
||||||
closedir(dir);
|
closedir(dir);
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#include <dirent.h>
|
||||||
|
|
||||||
#ifdef MULTITHREAD
|
#ifdef MULTITHREAD
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
|
@ -697,13 +698,13 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
int Sys_EnumerateFiles (const char *gpath, const char *match, int (*func)(const char *, int, void *), void *parm)
|
int Sys_EnumerateFiles (const char *gpath, const char *match, int (*func)(const char *, int, void *), void *parm)
|
||||||
{
|
{
|
||||||
#include <dirent.h>
|
DIR *dir;
|
||||||
DIR *dir, *dir2;
|
|
||||||
char apath[MAX_OSPATH];
|
char apath[MAX_OSPATH];
|
||||||
char file[MAX_OSPATH];
|
char file[MAX_OSPATH];
|
||||||
char truepath[MAX_OSPATH];
|
char truepath[MAX_OSPATH];
|
||||||
char *s;
|
char *s;
|
||||||
struct dirent *ent;
|
struct dirent *ent;
|
||||||
|
struct stat st;
|
||||||
|
|
||||||
//printf("path = %s\n", gpath);
|
//printf("path = %s\n", gpath);
|
||||||
//printf("match = %s\n", match);
|
//printf("match = %s\n", match);
|
||||||
|
@ -744,29 +745,25 @@ int Sys_EnumerateFiles (const char *gpath, const char *match, int (*func)(const
|
||||||
if (!ent)
|
if (!ent)
|
||||||
break;
|
break;
|
||||||
if (*ent->d_name != '.')
|
if (*ent->d_name != '.')
|
||||||
|
{
|
||||||
if (wildcmp(match, ent->d_name))
|
if (wildcmp(match, ent->d_name))
|
||||||
{
|
{
|
||||||
Q_snprintfz(file, sizeof(file), "%s/%s", gpath, ent->d_name);
|
Q_snprintfz(file, sizeof(file), "%s/%s", truepath, ent->d_name);
|
||||||
//would use stat, but it breaks on fat32.
|
|
||||||
|
|
||||||
if ((dir2 = opendir(file)))
|
if (stat(file, &st) == 0)
|
||||||
{
|
{
|
||||||
closedir(dir2);
|
Q_snprintfz(file, sizeof(file), "%s%s%s", apath, ent->d_name, S_ISDIR(st.st_mode)?"/":"");
|
||||||
Q_snprintfz(file, sizeof(file), "%s%s/", apath, ent->d_name);
|
|
||||||
//printf("is directory = %s\n", file);
|
if (!func(file, st.st_size, parm))
|
||||||
|
{
|
||||||
|
closedir(dir);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
printf("Stat failed for \"%s\"\n", file);
|
||||||
Q_snprintfz(file, sizeof(file), "%s%s", apath, ent->d_name);
|
|
||||||
//printf("file = %s\n", file);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!func(file, -2, parm))
|
|
||||||
{
|
|
||||||
closedir(dir);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} while(1);
|
} while(1);
|
||||||
closedir(dir);
|
closedir(dir);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue