<pre style='margin:0'>
Rainer Müller (raimue) pushed a commit to branch master
in repository macports-base.

</pre>
<p><a href="https://github.com/macports/macports-base/commit/5f217c93b1e04296db384ccf83456f16ea68e43e">https://github.com/macports/macports-base/commit/5f217c93b1e04296db384ccf83456f16ea68e43e</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 5f217c93b1e04296db384ccf83456f16ea68e43e
</span>Author: Rainer Müller <raimue@macports.org>
AuthorDate: Sat Oct 21 21:33:57 2017 +0200

<span style='display:block; white-space:pre;color:#404040;'>    tracelib: Implement binary search with bsearch(3)
</span>---
 src/pextlib1.0/tracelib.c | 41 +++++++++++++++--------------------------
 1 file changed, 15 insertions(+), 26 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/pextlib1.0/tracelib.c b/src/pextlib1.0/tracelib.c
</span><span style='display:block; white-space:pre;color:#808080;'>index 6bfed82..c4390ae 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/pextlib1.0/tracelib.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/pextlib1.0/tracelib.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -585,6 +585,13 @@ static void sandbox_violation(int sock UNUSED, const char *path, sandbox_violati
</span> }
 
 /**
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Internal helper function to compare two strings.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+static int pointer_strcmp(const char** a, const char** b) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return strcmp(*a, *b);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span>  * Check whether a path is in the transitive hull of dependencies of the port
  * currently being installed and send the result of the query back to the
  * socket.
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -647,28 +654,15 @@ static void dep_check(int sock, char *path) {
</span>         answer(sock, "#");
     }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    /* check our list of dependencies; use binary search */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    size_t left = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    size_t right = dependsLength;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while (left < right) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        size_t index = left + (right - left) / 2;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        int result = strcmp(depends[index], port);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (result == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /* found the port */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            free(port);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            answer(sock, "+");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else if (result < 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /* continue search right */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            left = index + 1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /* continue search left */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            right = index;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* check our list of dependencies; use binary search on sorted list */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if (NULL != bsearch(&port, depends, dependsLength, sizeof(*depends),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        (int (*)(const void*, const void*)) pointer_strcmp)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        free(port);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        answer(sock, "+");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        free(port);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        answer(sock, "!");
</span>     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    free(port);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    answer(sock, "!");
</span> }
 
 static int TracelibOpenSocketCmd(Tcl_Interp *in) {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1016,11 +1010,6 @@ static int TracelibCloseSocketCmd(Tcl_Interp *interp UNUSED) {
</span>     return TCL_OK;
 }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-static int pointer_strcmp(const char** a, const char** b) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return strcmp(*a, *b);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> static int TracelibSetDeps(Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
     Tcl_Obj **objects;
     int length;
</pre><pre style='margin:0'>

</pre>