Revision
931
Author
wsiegrist@apple.com
Date
2011-02-08 15:32:52 -0800 (Tue, 08 Feb 2011)

Log Message

Add feature to darwintrace to ignore the ROOT paths since they cannot contribute to a projects build dependencies.

Modified Paths

Diff

Modified: branches/PR-8817822/darwintrace/darwintrace.c (930 => 931)


--- branches/PR-8817822/darwintrace/darwintrace.c	2011-02-08 20:16:29 UTC (rev 930)
+++ branches/PR-8817822/darwintrace/darwintrace.c	2011-02-08 23:32:52 UTC (rev 931)
@@ -89,6 +89,10 @@
   "/dev/",
 };
 
+/* store root paths so we can ignore them when logging */
+static char   **darwintrace_ignores     = NULL;
+static size_t  *darwintrace_ignore_lens = NULL;
+
 /* check if str starts with one of the exceptions */
 static inline bool darwintrace_except(const char *str) {
   size_t c = sizeof(darwintrace_exceptions)/sizeof(*darwintrace_exceptions); 
@@ -155,10 +159,40 @@
       dprintf("darwintrace: progname too long to copy: %s\n", *progname);
     }
   }
+  
+  /* create ignores list from root env vars */
+  if (getenv("DARWINTRACE_IGNORE_ROOTS")) {
+    darwintrace_ignores = (char**)calloc(4, sizeof(char*));
+    darwintrace_ignore_lens = (size_t*)calloc(4, sizeof(size_t));
+    if (darwintrace_ignores && darwintrace_ignore_lens) {
+      darwintrace_ignores[0] = getenv("OBJROOT");
+      if (darwintrace_ignores[0])
+        darwintrace_ignore_lens[0] = strlen(darwintrace_ignores[0]);
+      darwintrace_ignores[1] = getenv("SRCROOT");
+      if (darwintrace_ignores[1])
+        darwintrace_ignore_lens[1] = strlen(darwintrace_ignores[1]);
+      darwintrace_ignores[2] = getenv("DSTROOT");
+      if (darwintrace_ignores[2])
+        darwintrace_ignore_lens[2] = strlen(darwintrace_ignores[2]);
+      darwintrace_ignores[3] = getenv("SYMROOT");
+      if (darwintrace_ignores[3]) 
+        darwintrace_ignore_lens[3] = strlen(darwintrace_ignores[3]);
+    } else {
+      dprintf("unable to allocate memory for darwintrace_ignores"); 
+    }
+  }
 }
 
 /* darwintrace_setup must have been called already */
 static inline void darwintrace_logpath(int fd, const char *procname, char *tag, const char *path) {
+  if (darwintrace_ignores) {
+    for (int i=0; i < 4; i++) {
+      if (darwintrace_ignores[i] 
+          && strncmp(darwintrace_ignores[i], path, darwintrace_ignore_lens[i]) == 0) {
+        return;
+      }
+    }
+  }
   char darwintrace_buf[DARWINTRACE_BUFFER_SIZE];
   int size = snprintf(darwintrace_buf, sizeof(darwintrace_buf),
                       "%s[%d]\t%s\t%s\n",