[darwinbuild-changes] [80] trunk/darwintrace/darwintrace.c
source_changes at macosforge.org
source_changes at macosforge.org
Wed Oct 4 01:43:12 PDT 2006
Revision: 80
http://trac.macosforge.org/projects/darwinbuild/changeset/80
Author: kevin
Date: 2006-10-04 01:43:11 -0700 (Wed, 04 Oct 2006)
Log Message:
-----------
- correctly handle #! by logging an execve for the interpreter
Modified Paths:
--------------
trunk/darwintrace/darwintrace.c
Modified: trunk/darwintrace/darwintrace.c
===================================================================
--- trunk/darwintrace/darwintrace.c 2005-07-13 23:01:59 UTC (rev 79)
+++ trunk/darwintrace/darwintrace.c 2006-10-04 08:43:11 UTC (rev 80)
@@ -95,6 +95,44 @@
#endif
write(__darwintrace_fd, __darwintrace_buf, size);
fsync(__darwintrace_fd);
+
+ int fd = open(path, O_RDONLY, 0);
+ if (fd != -1) {
+ char buffer[MAXPATHLEN];
+ ssize_t bytes_read = read(fd, buffer, MAXPATHLEN);
+ if (buffer[0] == '#' && buffer[1] == '!') {
+ const char* interp = &buffer[2];
+ int i;
+ // skip past leading whitespace
+ for (i = 2; i < (MAXPATHLEN-1); ++i) {
+ if (buffer[i] != ' ' && buffer[i] != '\t') {
+ interp = &buffer[i];
+ break;
+ }
+ }
+ // found interpreter (or ran out of data)
+ // skip until next whitespace, then terminate the string
+ for (; i < (MAXPATHLEN-1); ++i) {
+ if (buffer[i] == ' ' || buffer[i] == '\t' || buffer[i] == '\n') {
+ buffer[i] = 0;
+ }
+ }
+fprintf(stderr, "interp = %s\n", interp);
+ // we have liftoff
+ if (interp) {
+#if DARWINTRACE_SHOW_PROCESS
+ const char* procname = strrchr(argv[0], '/') + 1;
+ if (procname == NULL) procname = argv[0];
+ int size = snprintf(__darwintrace_buf, BUFFER_SIZE, "%s[%d]\texecve\t%s\n", procname, 0, interp );
+#else
+ int size = snprintf(__darwintrace_buf, BUFFER_SIZE, "execve\t%s\n", interp );
+#endif
+ write(__darwintrace_fd, __darwintrace_buf, size);
+ fsync(__darwintrace_fd);
+ }
+ }
+ close(fd);
+ }
}
}
int result = execve(path, argv, envp);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/darwinbuild-changes/attachments/20061004/3da591c5/attachment-0001.html
More information about the darwinbuild-changes
mailing list