]> git.sur5r.net Git - cc65/commitdiff
PushSearchPath will add the path only if it's not already there.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 28 May 2010 11:56:01 +0000 (11:56 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 28 May 2010 11:56:01 +0000 (11:56 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@4672 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/common/searchpath.c
src/common/searchpath.h

index a91383460b222f498c291e281d6373b6ee2443a2..21750229903439d01a03ecca29fc181e5938288b 100644 (file)
@@ -156,11 +156,25 @@ void AddSubSearchPathFromEnv (SearchPath* P, const char* EnvVar, const char* Sub
 
 
 
-void PushSearchPath (SearchPath* P, const char* NewPath)
-/* Add a new search path to the head of an existing search path list */
-{
-    /* Insert a clean copy of the path at position 0 */
-    CollInsert (P, CleanupPath (NewPath), 0);
+int PushSearchPath (SearchPath* P, const char* NewPath)
+/* Add a new search path to the head of an existing search path list, provided
+ * that it's not already there. If the path is already at the first position,
+ * return zero, otherwise return a non zero value.
+ */
+{                                      
+    /* Generate a clean copy of NewPath */
+    char* Path = CleanupPath (NewPath);   
+
+    /* If we have paths, check if Path is already at position zero */
+    if (CollCount (P) > 0 && strcmp (CollConstAt (P, 0), Path) == 0) {
+        /* Match. Delete the copy and return to the caller */
+        xfree (Path);
+        return 0;
+    }
+
+    /* Insert a clean copy of the path at position 0, return success */
+    CollInsert (P, Path, 0);
+    return 1;
 }
 
 
index 6c4745e59acda44ea2037474a99b3dc60d483a07..f9f8705634e8bc69a22b7cf8a386f66e70b4058e 100644 (file)
@@ -75,8 +75,11 @@ void AddSubSearchPathFromEnv (SearchPath* P, const char* EnvVar, const char* Sub
  * the environment variable value.
  */
 
-void PushSearchPath (SearchPath* P, const char* NewPath);
-/* Add a new search path to the head of an existing search path list */
+int PushSearchPath (SearchPath* P, const char* NewPath);
+/* Add a new search path to the head of an existing search path list, provided
+ * that it's not already there. If the path is already at the first position,
+ * return zero, otherwise return a non zero value.
+ */
 
 void PopSearchPath (SearchPath* P);
 /* Remove a search path from the head of an existing search path list */