[PD-cvs] SF.net SVN: pure-data: [9780] trunk/packages/patches/ add_tilde_support_toopen-0.41.4.patch

eighthave at users.sourceforge.net eighthave at users.sourceforge.net
Sun May 11 15:26:08 CEST 2008


Revision: 9780
          http://pure-data.svn.sourceforge.net/pure-data/?rev=9780&view=rev
Author:   eighthave
Date:     2008-05-11 06:26:08 -0700 (Sun, 11 May 2008)

Log Message:
-----------
created sys_expandpath() to replace ~ with /Users/hans and expand env vars on Windows.  This function is then used in sys_trytoopenone() so that ~ works with all opening operations.

Added Paths:
-----------
    trunk/packages/patches/add_tilde_support_toopen-0.41.4.patch

Added: trunk/packages/patches/add_tilde_support_toopen-0.41.4.patch
===================================================================
--- trunk/packages/patches/add_tilde_support_toopen-0.41.4.patch	                        (rev 0)
+++ trunk/packages/patches/add_tilde_support_toopen-0.41.4.patch	2008-05-11 13:26:08 UTC (rev 9780)
@@ -0,0 +1,67 @@
+Index: s_path.c
+===================================================================
+--- s_path.c	(revision 9773)
++++ s_path.c	(working copy)
+@@ -30,6 +30,10 @@
+ #include <io.h>
+ #endif
+ 
++#ifdef MSW
++#include <windows.h>
++#endif
++
+ #include <string.h>
+ #include "m_pd.h"
+ #include "m_imp.h"
+@@ -70,6 +70,30 @@
+     *to = 0;
+ }
+ 
++/* expand env vars and ~ at the beginning of a path and make a copy to return */
++static void sys_expandpath(const char *from, char *to)
++{
++    if ((strlen(from) == 1 && from[0] == '~') || (strncmp(from,"~/", 2) == 0))
++    {
++#ifdef MSW
++        const char *home = getenv("USERPROFILE");
++#else
++        const char *home = getenv("HOME");
++#endif
++        if(home) 
++        {
++            strncpy(to, home, FILENAME_MAX - 1);
++            strncat(to, from + 1, FILENAME_MAX - strlen(from) - 2);
++        }
++    }
++    else
++        strncpy(to, from, FILENAME_MAX - 1);
++#ifdef MSW
++    char buf[FILENAME_MAX];
++    ExpandEnvironmentStrings(to, buf, FILENAME_MAX - 2);
++    strncpy(to, buf, FILENAME_MAX - 1);
++#endif    
++}
+ /*******************  Utility functions used below ******************/
+ 
+ /*!
+@@ -199,7 +223,7 @@
+     int fd;
+     if (strlen(dir) + strlen(name) + strlen(ext) + 4 > size)
+         return (-1);
+-    strcpy(dirresult, dir);
++    sys_expandpath(dir, dirresult);
+     if (*dirresult && dirresult[strlen(dirresult)-1] != '/')
+         strcat(dirresult, "/");
+     strcat(dirresult, name);
+@@ -251,9 +275,9 @@
+ int sys_open_absolute(const char *name, const char* ext,
+     char *dirresult, char **nameresult, unsigned int size, int bin, int *fdp)
+ {
+-    if (name[0] == '/' 
++    if (name[0] == '/' || name[0] == '~'
+ #ifdef MSW
+-        || (name[1] == ':' && name[2] == '/')
++        || name[0] == '%' || (name[1] == ':' && name[2] == '/')
+ #endif
+             )
+     {


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