Added __PHYSFS_addToLinkedStringList().
--- a/physfs.c Tue Jul 23 07:46:36 2002 +0000
+++ b/physfs.c Tue Jul 23 07:48:08 2002 +0000
@@ -1210,7 +1210,7 @@
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 @@
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 ... */
--- a/physfs_internal.h Tue Jul 23 07:46:36 2002 +0000
+++ b/physfs_internal.h Tue Jul 23 07:48:08 2002 +0000
@@ -166,6 +166,8 @@
/*
* 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 @@
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; }