Added __PHYSFS_addToLinkedStringList().
This commit is contained in:
parent
5b55a52af7
commit
01567b3dcf
38
physfs.c
38
physfs.c
|
@ -1210,7 +1210,7 @@ int PHYSFS_isDirectory(const char *fname)
|
|||
DirHandle *h = i->dirHandle;
|
||||
if (__PHYSFS_verifySecurity(h, fname))
|
||||
{
|
||||
if (!h->funcs->exists(h, fname))
|
||||
if (!h->funcs->exists(h, fname)) /* !!! FIXME: Let archivers figure this out. */
|
||||
__PHYSFS_setError(ERR_NO_SUCH_FILE);
|
||||
else
|
||||
{
|
||||
|
@ -1461,5 +1461,41 @@ PHYSFS_sint64 PHYSFS_fileLength(PHYSFS_file *handle)
|
|||
return(h->funcs->fileLength(h));
|
||||
} /* PHYSFS_filelength */
|
||||
|
||||
|
||||
LinkedStringList *__PHYSFS_addToLinkedStringList(LinkedStringList *retval,
|
||||
LinkedStringList **prev,
|
||||
const char *str,
|
||||
PHYSFS_sint32 len)
|
||||
{
|
||||
LinkedStringList *l;
|
||||
|
||||
l = (LinkedStringList *) malloc(sizeof (LinkedStringList));
|
||||
BAIL_IF_MACRO(l == NULL, ERR_OUT_OF_MEMORY, retval);
|
||||
|
||||
if (len < 0)
|
||||
len = strlen(str);
|
||||
|
||||
l->str = (char *) malloc(len + 1);
|
||||
if (l->str == NULL)
|
||||
{
|
||||
free(l);
|
||||
BAIL_MACRO(ERR_OUT_OF_MEMORY, retval);
|
||||
} /* if */
|
||||
|
||||
strncpy(l->str, str, len);
|
||||
l->str[len] = '\0';
|
||||
|
||||
if (retval == NULL)
|
||||
retval = l;
|
||||
else
|
||||
(*prev)->next = l;
|
||||
|
||||
*prev = l;
|
||||
l->next = NULL;
|
||||
return(retval);
|
||||
} /* __PHYSFS_addToLinkedStringList */
|
||||
|
||||
|
||||
|
||||
/* end of physfs.c ... */
|
||||
|
||||
|
|
|
@ -166,6 +166,8 @@ typedef struct __PHYSFS_DIRFUNCTIONS__
|
|||
/*
|
||||
* Returns non-zero if filename is really a directory.
|
||||
* This filename is in platform-independent notation.
|
||||
* Symlinks should be followed; if what the symlink points
|
||||
* to is missing, or isn't a directory, then the retval is zero.
|
||||
*/
|
||||
int (*isDirectory)(DirHandle *r, const char *name);
|
||||
|
||||
|
@ -317,6 +319,17 @@ char *__PHYSFS_convertToDependent(const char *prepend,
|
|||
int __PHYSFS_verifySecurity(DirHandle *h, const char *fname);
|
||||
|
||||
|
||||
/*
|
||||
* Use this to build the list that your enumerate function should return.
|
||||
* See zip.c for an example of proper use.
|
||||
*/
|
||||
LinkedStringList *__PHYSFS_addToLinkedStringList(LinkedStringList *retval,
|
||||
LinkedStringList **prev,
|
||||
const char *str,
|
||||
PHYSFS_sint32 len);
|
||||
|
||||
|
||||
|
||||
/* These get used all over for lessening code clutter. */
|
||||
#define BAIL_MACRO(e, r) { __PHYSFS_setError(e); return r; }
|
||||
#define BAIL_IF_MACRO(c, e, r) if (c) { __PHYSFS_setError(e); return r; }
|
||||
|
|
Loading…
Reference in New Issue