]> granicus.if.org Git - graphviz/commitdiff
Allow the GVPRPATH variable to specify that the default path be prepended or
authorEmden Gansner <erg@research.att.com>
Wed, 29 Feb 2012 20:33:07 +0000 (15:33 -0500)
committerEmden Gansner <erg@research.att.com>
Wed, 29 Feb 2012 20:33:07 +0000 (15:33 -0500)
appended to it.

cmd/gvpr/gvpr.1
lib/gvpr/gvpr.c

index addd852b5799734c78ad369efa9798f6c6229017..b9411aca7fea2191888c832ad13994040acc9f2f 100644 (file)
@@ -1125,7 +1125,12 @@ with the node whose name is \fBARGV[0]\fP, as an indented list.
 .TP
 .B GVPRPATH
 Colon\(hyseparated list of directories to be searched to find
-the file specified by the \-f option.
+the file specified by the \-f option. \fBgvpr\fP has a default list built in. If \fBGVPRPATH\fP
+is not defined, the default list is used. If \fBGVPRPATH\fP starts with colon, the list is formed
+by appending \fBGVPRPATH\fP to the default list. If \fBGVPRPATH\fP ends with colon, the list is formed
+by appending the default list to \fBGVPRPATH\fP. Otherwise, \fBGVPRPATH\fP is used for the list.
+.P
+On Windows systems, replace ``colon'' with ``semicolon'' in the previous paragraph.
 .SH BUGS AND WARNINGS
 Scripts should be careful deleting nodes during \fBN{}\fP and \fBE{}\fP
 blocks using BFS and DFS traversals as these rely on stacks and queues of
index 3d0c8f441e8564f7477bba3ace67e5fcac3bd923..eb6b325456e3dc1d1b0577797c8e8d02fc4a3d60 100644 (file)
@@ -191,6 +191,19 @@ static int parseArgs(char *s, int argc, char ***argv)
 #define LISTSEP ':'
 #endif
 
+static Sfio_t*
+concat (char* pfx, char* sfx, char** sp)
+{
+    Sfio_t *pathp;
+    if (!(pathp = sfstropen())) {
+       error(ERROR_ERROR, "Could not open buffer");
+       return 0;
+    }
+    sfprintf(pathp, "%s%s", pfx, sfx);
+    *sp = sfstruse(pathp);
+    return pathp;
+}
+
 /* resolve:
  * Translate -f arg parameter into a pathname.
  * If arg contains '/', return arg.
@@ -204,8 +217,10 @@ static char *resolve(char *arg)
     char *path;
     char *s;
     char *cp;
+    char c;
     char *fname = 0;
     Sfio_t *fp;
+    Sfio_t *pathp = NULL;
     size_t sz;
 
 #ifdef WIN32_DLL
@@ -218,7 +233,15 @@ static char *resolve(char *arg)
     path = getenv("GVPRPATH");
     if (!path)
        path = getenv("GPRPATH");  // deprecated
-    if (!path)
+    if (path && (c = *path)) {
+       if (c == LISTSEP) {
+           pathp = concat(DFLT_GVPRPATH, path, &path); 
+       }
+       else if ((c = path[strlen(path)-1]) == LISTSEP) {
+           pathp = concat(path, DFLT_GVPRPATH, &path); 
+       }
+    }
+    else
        path = DFLT_GVPRPATH;
 
     if (!(fp = sfstropen())) {
@@ -253,6 +276,8 @@ static char *resolve(char *arg)
        error(ERROR_ERROR, "Could not find file \"%s\" in GVPRPATH", arg);
 
     sfclose(fp);
+    if (pathp)
+       sfclose(pathp);
     return fname;
 }