[PD-cvs] SF.net SVN: pure-data: [9856] branches/pd-extended/v0-40/pd/src/g_canvas.c

eighthave at users.sourceforge.net eighthave at users.sourceforge.net
Mon May 19 21:25:04 CEST 2008


Revision: 9856
          http://pure-data.svn.sourceforge.net/pure-data/?rev=9856&view=rev
Author:   eighthave
Date:     2008-05-19 12:25:03 -0700 (Mon, 19 May 2008)

Log Message:
-----------
made full paths work for declare -stdlib and -stdpath, fixing bug #1828573

Modified Paths:
--------------
    branches/pd-extended/v0-40/pd/src/g_canvas.c

Modified: branches/pd-extended/v0-40/pd/src/g_canvas.c
===================================================================
--- branches/pd-extended/v0-40/pd/src/g_canvas.c	2008-05-19 09:13:17 UTC (rev 9855)
+++ branches/pd-extended/v0-40/pd/src/g_canvas.c	2008-05-19 19:25:03 UTC (rev 9856)
@@ -1513,6 +1513,26 @@
     }
 }
 
+static void canvas_completepath(char *from, char *to)
+{
+    if(! (from[0] == '/' || from[0] == '~'
+#ifdef MSW
+          || from[0] == '%' || (from[1] == ':' && from[2] == '/')
+#endif
+           ))
+    {
+        strncpy(to, sys_libdir->s_name, FILENAME_MAX-4);
+        to[FILENAME_MAX-3] = '\0';
+        strcat(to, "/");
+    }
+    else
+    {
+        to[0] = '\0';
+    }
+    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;
@@ -1524,7 +1544,7 @@
 #endif
     for (i = 0; i < argc; i++)
     {
-        char strbuf[MAXPDSTRING];
+        char strbuf[FILENAME_MAX];
         char *flag = atom_getsymbolarg(i, argc, argv)->s_name;
         if ((argc > i+1) && !strcmp(flag, "-path"))
         {
@@ -1534,12 +1554,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++;
         }
@@ -1550,12 +1565,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++;
         }


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Pd-cvs mailing list