Annotation of quake2/irix/q_shirix.c, revision 1.1.1.1

1.1       root        1: #include <sys/types.h>
                      2: #include <errno.h>
                      3: #include <stdio.h>
                      4: #include <dirent.h>
                      5: #include <sys/stat.h>
                      6: #include <unistd.h>
                      7: #include <sys/mman.h>
                      8: #include <sys/time.h>
                      9: 
                     10: #include "../linux/glob.h"
                     11: 
                     12: #include "../qcommon/qcommon.h"
                     13: 
                     14: //===============================================================================
                     15: 
                     16: byte *membase;
                     17: int maxhunksize;
                     18: int curhunksize;
                     19: 
                     20: void *Hunk_Begin (int maxsize)
                     21: {
                     22:        maxhunksize = maxsize + sizeof(int);
                     23:        curhunksize = 0;
                     24: /*     membase = mmap(0, maxhunksize, PROT_READ|PROT_WRITE,  */
                     25: /*             MAP_PRIVATE, -1, 0); */
                     26: /*     if ((membase == NULL) || (membase == MAP_FAILED)) */
                     27:        membase = malloc(maxhunksize);
                     28:        if (membase == NULL)
                     29:                Com_Error(ERR_FATAL, "unable to virtual allocate %d bytes", maxsize);
                     30: 
                     31:        *((int *)membase) = curhunksize;
                     32: 
                     33:        return membase + sizeof(int);
                     34: }
                     35: 
                     36: void *Hunk_Alloc (int size)
                     37: {
                     38:        byte *buf;
                     39: 
                     40:        // round to cacheline
                     41:        size = (size+31)&~31;
                     42:        if (curhunksize + size > maxhunksize)
                     43:                Com_Error(ERR_FATAL, "Hunk_Alloc overflow");
                     44:        buf = membase + sizeof(int) + curhunksize;
                     45:        curhunksize += size;
                     46:        return buf;
                     47: }
                     48: 
                     49: int Hunk_End (void)
                     50: {
                     51:        return curhunksize;
                     52: }
                     53: 
                     54: void Hunk_Free (void *base)
                     55: {
                     56:        byte *m;
                     57: 
                     58:        if (base) {
                     59:                m = ((byte *)base) - sizeof(int);
                     60:                free(m);
                     61:        }
                     62: }
                     63: 
                     64: //===============================================================================
                     65: 
                     66: 
                     67: /*
                     68: ================
                     69: Sys_Milliseconds
                     70: ================
                     71: */
                     72: int curtime;
                     73: int Sys_Milliseconds (void)
                     74: {
                     75:        struct timeval tp;
                     76:        struct timezone tzp;
                     77:        static int              secbase;
                     78: 
                     79:        gettimeofday(&tp, &tzp);
                     80:        
                     81:        if (!secbase)
                     82:        {
                     83:                secbase = tp.tv_sec;
                     84:                return tp.tv_usec/1000;
                     85:        }
                     86: 
                     87:        curtime = (tp.tv_sec - secbase)*1000 + tp.tv_usec/1000;
                     88:        
                     89:        return curtime;
                     90: }
                     91: 
                     92: void Sys_Mkdir (char *path)
                     93: {
                     94:     mkdir (path, 0777);
                     95: }
                     96: 
                     97: char *strlwr (char *s)
                     98: {
                     99:         char *origs = s;
                    100:        while (*s) {
                    101:                *s = tolower(*s);
                    102:                s++;
                    103:        }
                    104:        return origs;
                    105: }
                    106: 
                    107: //============================================
                    108: 
                    109: static char    findbase[MAX_OSPATH];
                    110: static char    findpath[MAX_OSPATH];
                    111: static char    findpattern[MAX_OSPATH];
                    112: static DIR             *fdir;
                    113: 
                    114: static qboolean CompareAttributes(char *path, char *name,
                    115:        unsigned musthave, unsigned canthave )
                    116: {
                    117:        struct stat st;
                    118:        char fn[MAX_OSPATH];
                    119: 
                    120: // . and .. never match
                    121:        if (strcmp(name, ".") == 0 || strcmp(name, "..") == 0)
                    122:                return false;
                    123: 
                    124:        sprintf(fn, "%s/%s", path, name);
                    125:        if (stat(fn, &st) == -1)
                    126:                return false; // shouldn't happen
                    127: 
                    128:        if ( ( st.st_mode & S_IFDIR ) && ( canthave & SFF_SUBDIR ) )
                    129:                return false;
                    130: 
                    131:        if ( ( musthave & SFF_SUBDIR ) && !( st.st_mode & S_IFDIR ) )
                    132:                return false;
                    133: 
                    134:        return true;
                    135: }
                    136: 
                    137: char *Sys_FindFirst (char *path, unsigned musthave, unsigned canhave)
                    138: {
                    139:        struct dirent *d;
                    140:        char *p;
                    141: 
                    142:        if (fdir)
                    143:                Sys_Error ("Sys_BeginFind without close");
                    144: 
                    145: //     COM_FilePath (path, findbase);
                    146:        strcpy(findbase, path);
                    147: 
                    148:        if ((p = strrchr(findbase, '/')) != NULL) {
                    149:                *p = 0;
                    150:                strcpy(findpattern, p + 1);
                    151:        } else
                    152:                strcpy(findpattern, "*");
                    153: 
                    154:        if (strcmp(findpattern, "*.*") == 0)
                    155:                strcpy(findpattern, "*");
                    156:        
                    157:        if ((fdir = opendir(findbase)) == NULL)
                    158:                return NULL;
                    159:        while ((d = readdir(fdir)) != NULL) {
                    160:                if (!*findpattern || glob_match(findpattern, d->d_name)) {
                    161: //                     if (*findpattern)
                    162: //                             printf("%s matched %s\n", findpattern, d->d_name);
                    163:                        if (CompareAttributes(findbase, d->d_name, musthave, canhave)) {
                    164:                                sprintf (findpath, "%s/%s", findbase, d->d_name);
                    165:                                return findpath;
                    166:                        }
                    167:                }
                    168:        }
                    169:        return NULL;
                    170: }
                    171: 
                    172: char *Sys_FindNext (unsigned musthave, unsigned canhave)
                    173: {
                    174:        struct dirent *d;
                    175: 
                    176:        if (fdir == NULL)
                    177:                return NULL;
                    178:        while ((d = readdir(fdir)) != NULL) {
                    179:                if (!*findpattern || glob_match(findpattern, d->d_name)) {
                    180: //                     if (*findpattern)
                    181: //                             printf("%s matched %s\n", findpattern, d->d_name);
                    182:                        if (CompareAttributes(findbase, d->d_name, musthave, canhave)) {
                    183:                                sprintf (findpath, "%s/%s", findbase, d->d_name);
                    184:                                return findpath;
                    185:                        }
                    186:                }
                    187:        }
                    188:        return NULL;
                    189: }
                    190: 
                    191: void Sys_FindClose (void)
                    192: {
                    193:        if (fdir != NULL)
                    194:                closedir(fdir);
                    195:        fdir = NULL;
                    196: }
                    197: 
                    198: 
                    199: //============================================
                    200: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.