X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=mupen64plus-pandora.git;a=blobdiff_plain;f=source%2Ffront-end%2Fsrc%2Fosal_files_unix.c;fp=source%2Ffront-end%2Fsrc%2Fosal_files_unix.c;h=2199271d458a1528294f18408e4841399ae59f49;hp=0000000000000000000000000000000000000000;hb=5288f5429f38c99c73856e285d35e7d0c4c779d0;hpb=48d77f736bea02afeb362cff05c81375752b3015 diff --git a/source/front-end/src/osal_files_unix.c b/source/front-end/src/osal_files_unix.c new file mode 100644 index 0000000..2199271 --- /dev/null +++ b/source/front-end/src/osal_files_unix.c @@ -0,0 +1,113 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Mupen64plus-ui-console - osal_files_unix.c * + * Mupen64Plus homepage: http://code.google.com/p/mupen64plus/ * + * Copyright (C) 2009 Richard Goedeken * + * * + * This program 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; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program 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, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* This implements all kinds of system-dependent file handling + * + */ + +#include +#include +#include +#include +#include // for opendir(), readdir(), closedir() + +#include "main.h" +#include "m64p_types.h" +#include "osal_preproc.h" +#include "osal_files.h" + +/* definitions for system directories to search when looking for mupen64plus plugins */ +#if defined(PLUGINDIR) + const int osal_libsearchdirs = 4; + const char *osal_libsearchpath[4] = { PLUGINDIR, "/usr/local/lib/mupen64plus", "/usr/lib/mupen64plus", "./" }; +#else + const int osal_libsearchdirs = 3; + const char *osal_libsearchpath[3] = { "/usr/local/lib/mupen64plus", "/usr/lib/mupen64plus", "./" }; +#endif + +osal_lib_search *osal_library_search(const char *searchpath) +{ + osal_lib_search *head = NULL, *curr = NULL; + DIR *dir; + struct dirent *entry; + +#ifdef __APPLE__ + const char* suffix = ".dylib"; +#else + const char* suffix = ".so"; +#endif + + dir = opendir(searchpath); + if (dir == NULL) + return NULL; + + /* look for any shared libraries in this folder */ + while ((entry = readdir(dir)) != NULL) + { + osal_lib_search *newlib = NULL; + if (strcmp(entry->d_name + strlen(entry->d_name) - strlen(suffix), suffix) != 0) + continue; + /* this is a .so file, so add it to the list */ + newlib = malloc(sizeof(osal_lib_search)); + if (newlib == NULL) + { + DebugMessage(M64MSG_ERROR, "Memory allocation error in osal_library_search()!"); + osal_free_lib_list(head); + closedir(dir); + return NULL; + } + if (head == NULL) + { + head = curr = newlib; + } + else + { + curr->next = newlib; + curr = newlib; + } + /* set up the filepath and filename members */ + strncpy(curr->filepath, searchpath, PATH_MAX-2); + curr->filepath[PATH_MAX-2] = 0; + if (curr->filepath[strlen(curr->filepath)-1] != '/') + strcat(curr->filepath, "/"); + int pathlen = strlen(curr->filepath); + curr->filename = curr->filepath + pathlen; + strncat(curr->filepath, entry->d_name, PATH_MAX - pathlen - 1); + curr->filepath[PATH_MAX-1] = 0; + /* set plugin_type and next pointer */ + curr->plugin_type = 0; + curr->next = NULL; + } + + closedir(dir); + return head; +} + +void osal_free_lib_list(osal_lib_search *head) +{ + while (head != NULL) + { + osal_lib_search *next = head->next; + free(head); + head = next; + } +} +