Revision: 10499 http://pure-data.svn.sourceforge.net/pure-data/?rev=10499&view=rev Author: eighthave Date: 2009-01-10 05:47:05 +0000 (Sat, 10 Jan 2009)
Log Message: ----------- /partially/ accepted into 0.42... sigh
Removed Paths: ------------- trunk/packages/patches/fix_absolute_paths_for_declare-0.41.4.patch
Deleted: trunk/packages/patches/fix_absolute_paths_for_declare-0.41.4.patch =================================================================== --- trunk/packages/patches/fix_absolute_paths_for_declare-0.41.4.patch 2009-01-10 04:52:15 UTC (rev 10498) +++ trunk/packages/patches/fix_absolute_paths_for_declare-0.41.4.patch 2009-01-10 05:47:05 UTC (rev 10499) @@ -1,174 +0,0 @@ -Index: m_pd.h -=================================================================== ---- m_pd.h (revision 9862) -+++ m_pd.h (working copy) -@@ -457,6 +457,7 @@ - - /* ------------ system interface routines ------------------- */ - EXTERN int sys_isreadablefile(const char *name); -+EXTERN int sys_isabsolutepath(const char *dir); - EXTERN void sys_bashfilename(const char *from, char *to); - EXTERN void sys_unbashfilename(const char *from, char *to); - EXTERN int open_via_path(const char *name, const char *ext, const char *dir, -Index: s_main.c -=================================================================== ---- s_main.c (revision 9862) -+++ s_main.c (working copy) -@@ -491,28 +491,29 @@ - sys_libdir = gensym(sbuf2); - sys_guidir = &s_; /* in MSW the guipath just depends on the libdir */ - #else -- strncpy(sbuf, sbuf2, MAXPDSTRING-30); -+ realpath(sbuf2, sbuf); -+ strncpy(sbuf2, sbuf, MAXPDSTRING-30); - sbuf[MAXPDSTRING-30] = 0; -- strcat(sbuf, "/lib/pd"); -- if (stat(sbuf, &statbuf) >= 0) -+ strcat(sbuf2, "/lib/pd"); -+ if (stat(sbuf2, &statbuf) >= 0) - { - /* complicated layout: lib dir is the one we just stat-ed above */ -- sys_libdir = gensym(sbuf); -+ sys_libdir = gensym(sbuf2); - /* gui lives in .../lib/pd/bin */ -- strncpy(sbuf, sbuf2, MAXPDSTRING-30); -+ strncpy(sbuf2, sbuf, MAXPDSTRING-30); - sbuf[MAXPDSTRING-30] = 0; -- strcat(sbuf, "/lib/pd/bin"); -- sys_guidir = gensym(sbuf); -+ strcat(sbuf2, "/lib/pd/bin"); -+ sys_guidir = gensym(sbuf2); - } - else - { - /* simple layout: lib dir is the parent */ -- sys_libdir = gensym(sbuf2); -+ sys_libdir = gensym(sbuf); - /* gui lives in .../bin */ -- strncpy(sbuf, sbuf2, MAXPDSTRING-30); -+ strncpy(sbuf2, sbuf, MAXPDSTRING-30); - sbuf[MAXPDSTRING-30] = 0; -- strcat(sbuf, "/bin"); -- sys_guidir = gensym(sbuf); -+ strcat(sbuf2, "/bin"); -+ sys_guidir = gensym(sbuf2); - } - #endif - } -Index: s_path.c -=================================================================== ---- s_path.c (revision 9862) -+++ s_path.c (working copy) -@@ -69,6 +69,24 @@ - *to = 0; - } - -+/* test if path is absolute or relative, based on leading /, env vars, ~, etc */ -+int sys_isabsolutepath(const char *dir) -+{ -+ if (dir[0] == '/' || dir[0] == '~' -+#ifdef MSW -+ || dir[0] == '%' || (dir[1] == ':' && dir[2] == '/') -+#endif -+ ) -+ { -+ return 1; -+ } -+ else -+ { -+ return 0; -+ } -+} -+ -+ - /******************* Utility functions used below ******************/ - - /*! -@@ -250,11 +268,7 @@ - int sys_open_absolute(const char *name, const char* ext, - char *dirresult, char **nameresult, unsigned int size, int bin, int *fdp) - { -- if (name[0] == '/' --#ifdef MSW -- || (name[1] == ':' && name[2] == '/') --#endif -- ) -+ if (sys_isabsolutepath(name)) - { - char dirbuf[MAXPDSTRING]; - int dirlen = (strrchr(name, '/') - name); -Index: g_canvas.c -=================================================================== ---- g_canvas.c (revision 9862) -+++ g_canvas.c (working copy) -@@ -1475,6 +1479,22 @@ - } - } - -+static void canvas_completepath(char *from, char *to) -+{ -+ if (sys_isabsolutepath(from)) -+ { -+ to[0] = '\0'; -+ } -+ else -+ { // if not absolute path, append Pd lib dir -+ strncpy(to, sys_libdir->s_name, FILENAME_MAX-4); -+ to[FILENAME_MAX-3] = '\0'; -+ strcat(to, "/"); -+ } -+ strncat(to, from, FILENAME_MAX-strlen(to)); -+ to[FILENAME_MAX-1] = '\0'; -+} -+ - static void canvas_declare(t_canvas *x, t_symbol *s, int argc, t_atom *argv) - { - int i; -@@ -1496,12 +1516,7 @@ - } - else if ((argc > i+1) && !strcmp(flag, "-stdpath")) - { -- strncpy(strbuf, sys_libdir->s_name, MAXPDSTRING-3); -- strbuf[MAXPDSTRING-4] = 0; -- strcat(strbuf, "/"); -- strncpy(strbuf, atom_getsymbolarg(i+1, argc, argv)->s_name, -- MAXPDSTRING-strlen(strbuf)); -- strbuf[MAXPDSTRING-1] = 0; -+ canvas_completepath(atom_getsymbolarg(i+1, argc, argv)->s_name, strbuf); - e->ce_path = namelist_append(e->ce_path, strbuf, 0); - i++; - } -@@ -1512,12 +1527,7 @@ - } - else if ((argc > i+1) && !strcmp(flag, "-stdlib")) - { -- strncpy(strbuf, sys_libdir->s_name, MAXPDSTRING-3); -- strbuf[MAXPDSTRING-4] = 0; -- strcat(strbuf, "/"); -- strncpy(strbuf, atom_getsymbolarg(i+1, argc, argv)->s_name, -- MAXPDSTRING-strlen(strbuf)); -- strbuf[MAXPDSTRING-1] = 0; -+ canvas_completepath(atom_getsymbolarg(i+1, argc, argv)->s_name, strbuf); - sys_load_lib(0, strbuf); - i++; - } -@@ -1564,9 +1574,16 @@ - for (nl = y->gl_env->ce_path; nl; nl = nl->nl_next) - { - char realname[MAXPDSTRING]; -- strncpy(realname, dir, MAXPDSTRING); -- realname[MAXPDSTRING-3] = 0; -- strcat(realname, "/"); -+ if (sys_isabsolutepath(nl->nl_string)) -+ { -+ realname[0] = '\0'; -+ } -+ else -+ { /* if not absolute path, append Pd lib dir */ -+ strncpy(realname, dir, MAXPDSTRING); -+ realname[MAXPDSTRING-3] = 0; -+ strcat(realname, "/"); -+ } - strncat(realname, nl->nl_string, MAXPDSTRING-strlen(realname)); - realname[MAXPDSTRING-1] = 0; - if ((fd = sys_trytoopenone(realname, name, ext,
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.