diff options
Diffstat (limited to 'frontends/atari/findfile.c')
-rw-r--r-- | frontends/atari/findfile.c | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/frontends/atari/findfile.c b/frontends/atari/findfile.c new file mode 100644 index 000000000..45ca6d916 --- /dev/null +++ b/frontends/atari/findfile.c @@ -0,0 +1,144 @@ +/* + * Copyright 2010 Ole Loots <ole@monochrom.net> + * + * This file is part of NetSurf, http://www.netsurf-browser.org/ + * + * NetSurf is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * NetSurf is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <unistd.h> + +#include "utils/log.h" +#include "utils/corestrings.h" + +#include "atari/gemtk/gemtk.h" +#include "atari/findfile.h" +#include "atari/gui.h" +#include "atari/osspec.h" + +char * local_file_to_url( const char * filename ) +{ + #define BACKSLASH 0x5C + char * url; + + LOG("in: %s", filename); + + if( strlen(filename) <= 2){ + return( NULL ); + } + + char * fname_local = malloc( strlen(filename)+1 ); + char * start = (char*)fname_local; + strcpy( start, filename ); + + /* convert backslashes: */ + for( unsigned int i=0; i<strlen(start); i++ ){ + if( start[i] == BACKSLASH ){ + start[i] = '/'; + } + } + + // TODO: make file path absolute if it isn't yet. + url = malloc( strlen(start) + FILE_SCHEME_PREFIX_LEN + 1); + strcpy(url, FILE_SCHEME_PREFIX ); + strcat(url, start ); + + free(fname_local); + + LOG("out: %s", url); + + return( url ); + #undef BACKSLASH +} + + +/** + * Locate a shared resource file by searching known places in order. + * Search order is: ./, NETSURF_GEM_RESPATH, ./$HOME/.netsurf/, $NETSURFRES/ + * (where NETSURFRES is an environment variable) + * + * \param buf buffer to write to. must be at least PATH_MAX chars + * \param filename file to look for + * \param def default to return if file not found + * \return buf + * + */ +#ifndef NETSURF_GEM_RESPATH + #define NETSURF_GEM_RESPATH "./res/" +#endif + +char * atari_find_resource(char *buf, const char *filename, const char *def) +{ + char *cdir = NULL; + char t[PATH_MAX]; + LOG("%s (def: %s)", filename, def); + strcpy(t, NETSURF_GEM_RESPATH); + strcat(t, filename); + LOG("checking %s", (char *)&t); + if (gemdos_realpath(t, buf) != NULL) { + if (access(buf, R_OK) == 0) { + return buf; + } + } + strcpy(t, "./"); + strcat(t, filename); + LOG("checking %s", (char *)&t); + if (gemdos_realpath(t, buf) != NULL) { + if (access(buf, R_OK) == 0) { + return buf; + } + } + + cdir = getenv("HOME"); + if (cdir != NULL) { + strcpy(t, cdir); + strcat(t, "/.netsurf/"); + strcat(t, filename); + LOG("checking %s", (char *)&t); + if (gemdos_realpath(t, buf) != NULL) { + if (access(buf, R_OK) == 0) + return buf; + } + } + + cdir = getenv("NETSURFRES"); + if (cdir != NULL) { + if (gemdos_realpath(cdir, buf) != NULL) { + strcat(buf, "/"); + strcat(buf, filename); + LOG("checking %s", (char *)&t); + if (access(buf, R_OK) == 0) + return buf; + } + } + if (def[0] == '~') { + snprintf(t, PATH_MAX, "%s%s", getenv("HOME"), def + 1); + LOG("checking %s", (char *)&t); + if (gemdos_realpath(t, buf) == NULL) { + strcpy(buf, t); + } + } else { + LOG("checking %s", (char *)def); + if (gemdos_realpath(def, buf) == NULL) { + strcpy(buf, def); + } + } + + return buf; +} + +/* + * Local Variables: + * c-basic-offset: 8 + * End: + */ |