From 0778e1aec5a65c6e7a43f5f86f19c14d10e5e621 Mon Sep 17 00:00:00 2001 From: avolkov Date: Wed, 7 Oct 2009 02:44:38 +0000 Subject: [PATCH] Ignore files and hidden dirs which are not actually addons git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@3187 8092fc87-c524-0410-9efc-e669fe64eaf9 --- sc2/src/options.c | 40 +++++++++++++++++++++++++--------------- sc2/src/options.h | 1 - 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/sc2/src/options.c b/sc2/src/options.c index 2cf5c411e..3f185b642 100644 --- a/sc2/src/options.c +++ b/sc2/src/options.c @@ -64,8 +64,6 @@ uio_MountHandle* contentMountHandle; char baseContentPath[PATH_MAX]; -uio_DirList *availableAddons; - extern uio_Repository *repository; extern uio_DirHandle *rootDir; @@ -358,8 +356,7 @@ mountAddonDir (uio_Repository *repository, uio_MountHandle *contentMountHandle, uio_DirHandle *addonsDir; static uio_AutoMount *autoMount[] = { NULL }; uio_MountHandle *mountHandle; - - availableAddons = NULL; + uio_DirList *availableAddons; if (addonDirName != NULL) { @@ -396,22 +393,37 @@ mountAddonDir (uio_Repository *repository, uio_MountHandle *contentMountHandle, if (availableAddons != NULL) { int i, count; - count = availableAddons->numNames; - if (count != 1) + // count the actual addon dirs + count = 0; + for (i = 0; i < availableAddons->numNames; ++i) { - log_add (log_Info, "%d available addon packs.", count); + struct stat sb; + + if (availableAddons->names[i][0] == '.' || + uio_stat (addonsDir, availableAddons->names[i], &sb) == -1 + || !S_ISDIR (sb.st_mode)) + { // this dir entry ignored + availableAddons->names[i] = NULL; + continue; + } + ++count; } - else - { - log_add (log_Info, "1 available addon pack."); - } - for (i = 0; i < count; i++) + log_add (log_Info, "%d available addon pack%s.", count, + count == 1 ? "" : "s"); + + count = 0; + for (i = 0; i < availableAddons->numNames; ++i) { static char mountname[128]; uio_DirHandle *addonDir; const char *addon = availableAddons->names[i]; - log_add (log_Info, " %d. %s", i+1, addon); + + if (!addon) + continue; + + ++count; + log_add (log_Info, " %d. %s", count, addon); snprintf(mountname, 128, "addons/%s", addon); mountname[127]=0; @@ -433,8 +445,6 @@ mountAddonDir (uio_Repository *repository, uio_MountHandle *contentMountHandle, } uio_DirList_free (availableAddons); - availableAddons = NULL; - uio_closeDir (addonsDir); } diff --git a/sc2/src/options.h b/sc2/src/options.h index 4c138f0f7..c0813bb1e 100644 --- a/sc2/src/options.h +++ b/sc2/src/options.h @@ -50,7 +50,6 @@ extern uio_DirHandle *saveDir; extern uio_DirHandle *meleeDir; extern char baseContentPath[PATH_MAX]; -extern uio_DirList *availableAddons; extern const char **optAddons; /* These get edited by TEXTENTRY widgets, so they should have room to