Mercurial > audlegacy-plugins
diff src/timidity/libtimidity/common.c @ 12:3da1b8942b8b trunk
[svn] - remove src/Input src/Output src/Effect src/General src/Visualization src/Container
author | nenolod |
---|---|
date | Mon, 18 Sep 2006 03:14:20 -0700 |
parents | src/Input/timidity/libtimidity/common.c@088092a52fea |
children | a6b9946ca928 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/timidity/libtimidity/common.c Mon Sep 18 03:14:20 2006 -0700 @@ -0,0 +1,140 @@ +/* + + TiMidity -- Experimental MIDI to WAVE converter + Copyright (C) 1995 Tuukka Toivonen <toivonen@clinet.fi> + + 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., 675 Mass Ave, Cambridge, MA 02139, USA. + + common.c + + */ + +#if HAVE_CONFIG_H +# include <config.h> +#endif + +#include "audacious/vfs.h" +#include <stdlib.h> +#include <string.h> + +/* I guess "rb" should be right for any libc */ +#define OPEN_MODE "rb" + +#include "timidity.h" +#include "timidity_internal.h" +#include "options.h" +#include "common.h" + +/* The paths in this list will be tried whenever we're reading a file */ +static PathList *pathlist = NULL; /* This is a linked list */ + +/* This is meant to find and open files for reading */ +VFSFile *open_file(char *name) +{ + VFSFile *fp; + + if (!name || !(*name)) + { + DEBUG_MSG("Attempted to open nameless file.\n"); + return 0; + } + + /* First try the given name */ + + DEBUG_MSG("Trying to open %s\n", name); + if ((fp = vfs_fopen(name, OPEN_MODE))) + return fp; + + if (name[0] != PATH_SEP) + { + char current_filename[1024]; + PathList *plp = pathlist; + int l; + + while (plp) /* Try along the path then */ + { + *current_filename = 0; + l = strlen(plp->path); + if(l) + { + strcpy(current_filename, plp->path); + if(current_filename[l - 1] != PATH_SEP) + { + current_filename[l] = PATH_SEP; + current_filename[l + 1] = '\0'; + } + } + strcat(current_filename, name); + DEBUG_MSG("Trying to open %s\n", current_filename); + if ((fp = vfs_fopen(current_filename, OPEN_MODE))) + return fp; + plp = plp->next; + } + } + + /* Nothing could be opened. */ + DEBUG_MSG("Could not open %s\n", name); + return 0; +} + +/* This'll allocate memory or die. */ +void *safe_malloc(size_t count) +{ + void *p; + + p = malloc(count); + +#ifdef DEBUG + if (p == NULL) + DEBUG_MSG("Sorry. Couldn't malloc %d bytes.\n", count); +#endif + + return p; +} + +/* This adds a directory to the path list */ +void add_to_pathlist(char *s) +{ + PathList *plp = safe_malloc(sizeof(PathList)); + + if (plp == NULL) + return; + + plp->path = safe_malloc(strlen(s) + 1); + if (plp->path == NULL) + { + free(plp); + return; + } + + strcpy(plp->path, s); + plp->next = pathlist; + pathlist = plp; +} + +void free_pathlist(void) +{ + PathList *plp = pathlist; + PathList *next; + + while (plp) + { + next = plp->next; + free(plp->path); + free(plp); + plp = next; + } + pathlist = NULL; +}