From c83a82497c3a3ccac8c0134d7f7bdafa5d255455 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Mon, 23 Jul 2001 09:23:17 +0000 Subject: [PATCH] Cleaned up PHYSFS_openRead() a little. PHYSFS_addToSearchPath() now returns successful for duplicates, but doesn't add them a second time. --- physfs.c | 45 ++++++++++++++++++++++----------------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/physfs.c b/physfs.c index 1f8a7e2a..d5c35fcc 100644 --- a/physfs.c +++ b/physfs.c @@ -522,22 +522,26 @@ int PHYSFS_setWriteDir(const char *newDir) int PHYSFS_addToSearchPath(const char *newDir, int appendToPath) { - DirInfo *di = buildDirInfo(newDir, 0); + DirInfo *di; + DirInfo *i = searchPath; + DirInfo *prev = NULL; + + while (i != NULL) + { + if (strcmp(newDir, i->dirName) == 0) /* already in search path. */ + return(1); + + prev = i; + i = i->next; + } /* while */ + + di = buildDirInfo(newDir, 0); BAIL_IF_MACRO(di == NULL, NULL, 0); if (appendToPath) { - DirInfo *i = searchPath; - DirInfo *prev = NULL; - di->next = NULL; - while (i != NULL) - { - prev = i; - i = i->next; - } /* while */ - if (prev == NULL) searchPath = di; else @@ -1147,7 +1151,6 @@ PHYSFS_file *PHYSFS_openAppend(const char *filename) PHYSFS_file *PHYSFS_openRead(const char *fname) { - PHYSFS_file *retval = NULL; FileHandle *rc = NULL; FileHandleList *list; DirInfo *i; @@ -1155,9 +1158,6 @@ PHYSFS_file *PHYSFS_openRead(const char *fname) while (*fname == '/') fname++; - list = (FileHandleList *) malloc(sizeof (FileHandleList)); - BAIL_IF_MACRO(!list, ERR_OUT_OF_MEMORY, NULL); - for (i = searchPath; i != NULL; i = i->next) { DirHandle *h = i->dirHandle; @@ -1170,16 +1170,15 @@ PHYSFS_file *PHYSFS_openRead(const char *fname) } /* for */ if (rc == NULL) - free(list); - else - { - list->handle.opaque = (void *) rc; - list->next = openReadList; - openReadList = list; - retval = &(list->handle); - } /* else */ + return(NULL); - return(retval); + list = (FileHandleList *) malloc(sizeof (FileHandleList)); + BAIL_IF_MACRO(!list, ERR_OUT_OF_MEMORY, NULL); + list->handle.opaque = (void *) rc; + list->next = openReadList; + openReadList = list; + + return(&(list->handle)); } /* PHYSFS_openRead */