* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#include "config.h"
-#include "file.h"
-
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <sys/stat.h>
+#ifndef WIN32
+# include <sys/stat.h>
+#endif
#include <sys/types.h>
#include <unistd.h>
+#include "common.h"
+#include "vorconfig.h"
+#include "file.h"
+
+#ifdef WIN32
+
+#define DATA_DIR "data\\"
+
+char *
+add_data_path(char *filename)
+{
+ char *s;
+ if(!filename) return filename;
+ s = malloc(sizeof(DATA_DIR)+strlen(filename));
+ if(s) {
+ strcpy(s, DATA_DIR);
+ strcpy(s+sizeof(DATA_DIR)-1, filename);
+ }
+ return s;
+}
+
+bool
+find_files(void)
+{
+ return true;
+}
+
+FILE *
+open_score_file(char *mode)
+{
+ return fopen("scores", mode);
+}
+
+
+#else /* !WIN32 */
+
+
char *g_data_dir;
char *g_score_file;
-mode_t g_score_mode;
+
+static char *
+add_path(char *path, char *file)
+{
+ char *s;
+ size_t plen, flen;
+
+ if(!path || !file) return NULL;
+ plen = strlen(path);
+ flen = strlen(file);
+ s = malloc(2+plen+flen);
+ if(!s) return NULL;
+ memcpy(s, path, plen);
+ s[plen] = '/';
+ memcpy(s+plen+1, file, flen+1);
+ return s;
+}
char *
-load_file(char *filename)
+add_data_path(char *filename)
{
- static char r[MAX_PATH_LEN];
- snprintf(r, MAX_PATH_LEN, "%s/%s", g_data_dir, filename);
- return r;
+ return add_path(g_data_dir, filename);
}
-int
+static bool
is_dir(char *dirname)
{
struct stat buf;
- stat(dirname, &buf);
+ if(stat(dirname, &buf)) {
+ return false;
+ }
return S_ISDIR(buf.st_mode);
}
-int
+static bool
is_file(char *filename)
{
struct stat buf;
- stat(filename, &buf);
+ if(stat(filename, &buf)) {
+ return false;
+ }
return S_ISREG(buf.st_mode);
}
-int
+static bool
find_data_dir(void)
{
int i;
char *data_options[3] = {
- "./data",
getenv("VOR_DATA"),
- "/usr/share/vor"
+ "data",
+ DATA_PREFIX
};
for(i=0; i<3; i++) {
+ if(!data_options[i]) continue;
g_data_dir = strdup(data_options[i]);
- if(is_dir(g_data_dir)) return true;
+ if(is_dir(g_data_dir)) {
+ char *s = add_path(g_data_dir, "b_variations.png");
+ if(s) if(is_file(s))
+ return true;
+ }
}
fprintf(stderr, "Can't find VoR data! Tried:\n");
for(i=0; i<3; i++) {
- fprintf(stderr, "\t%s\n", data_options[i]);
+ if(data_options[i]) fprintf(stderr, "\t%s\n", data_options[i]);
}
return false;
}
-int
+static bool
find_score_file(void)
{
- g_score_file = load_file("scores");
- g_score_mode = 0111;
- if(is_file(g_score_file)) return true;
-
- g_score_file = malloc(MAX_PATH_LEN);
- snprintf(g_score_file, MAX_PATH_LEN,
- "%s/.vor-high", getenv("HOME"));
- g_score_mode = 0177;
- if(is_file(g_score_file)) return true;
-
- return false;
+ char *dir, *s;
+
+ /* in case we get called twice */
+ if(g_score_file) return true;
+
+ dir = getenv("HOME"); if(!dir) return false;
+ s = add_path(dir, ".vor-scores");
+ if(s) {
+ g_score_file = s;
+ return true;
+ } else return false;
}
-int
+bool
find_files(void)
{
- int r;
- r = find_data_dir();
- find_score_file();
- return r;
+ return find_data_dir() && find_score_file();
}
FILE *
open_score_file(char *mode)
{
- mode_t old_mask;
- FILE *f = NULL;
-
- if(!g_score_file) return f;
-
- old_mask = umask(g_score_mode);
- f = fopen(g_score_file, mode);
-
- umask(old_mask);
- return f;
+ if(!g_score_file) return NULL;
+ return fopen(g_score_file, mode);
}
+
+#endif /* !WIN32 */