Added __PHYSFS_addToLinkedStringList().
authorRyan C. Gordon <icculus@icculus.org>
Tue, 23 Jul 2002 07:48:08 +0000
changeset 363 79f155a51527
parent 362 ac8c846a0a66
child 364 51da162c76f7
Added __PHYSFS_addToLinkedStringList().
physfs.c
physfs_internal.h
--- 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; }