<pre style='margin:0'>
Joshua Root (jmroot) pushed a commit to branch master
in repository macports-base.
</pre>
<p><a href="https://github.com/macports/macports-base/commit/27d5b33250ac794c0d70252a4c3c93038ff5e402">https://github.com/macports/macports-base/commit/27d5b33250ac794c0d70252a4c3c93038ff5e402</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 27d5b33250ac794c0d70252a4c3c93038ff5e402
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Sun Jun 9 23:33:52 2024 +1000
<span style='display:block; white-space:pre;color:#404040;'> snapshot_obj_ports: build proper Tcl lists
</span>---
src/registry2.0/snapshotobj.c | 54 ++++++++++++++++++++-----------------------
1 file changed, 25 insertions(+), 29 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/registry2.0/snapshotobj.c b/src/registry2.0/snapshotobj.c
</span><span style='display:block; white-space:pre;color:#808080;'>index cfcfb628d..d422c6124 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/registry2.0/snapshotobj.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/registry2.0/snapshotobj.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -30,11 +30,6 @@
</span> #include <config.h>
#endif
<span style='display:block; white-space:pre;background:#ffe0e0;'>-/* required for asprintf(3) on macOS */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _DARWIN_C_SOURCE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/* required for asprintf(3) on Linux */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define _GNU_SOURCE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> #include <string.h>
#include <stdlib.h>
#include <tcl.h>
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -112,45 +107,46 @@ static int snapshot_obj_ports(Tcl_Interp* interp, reg_snapshot* snapshot, int ob
</span> return TCL_ERROR;
}
if (objc == 2) {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- /* ${snapshot} prop; return the current value */
</span> reg_registry* reg = registry_for(interp, reg_attached);
if (reg == NULL) {
return TCL_ERROR;
}
if (Tcl_GetIndexFromObj(interp, objv[1], snapshot_props, "prop", 0, &index)
== TCL_OK) {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ int returncode = TCL_OK;
</span> port** ports;
reg_error error;
int port_count = reg_snapshot_ports_get(snapshot, &ports, &error);
if (port_count >= 0) {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- char* portstrs[port_count + 1];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int i;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for(i = 0; i < port_count; i++){
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port* current_port = ports[i];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- portstrs[i] = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (asprintf(&portstrs[i], "%s %d %s %s %s",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- current_port->name,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- current_port->requested,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- current_port->state,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- current_port->variants,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- current_port->requested_variants) < 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* 5 elements in each returned sublist */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Tcl_Obj* port_elements[5];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Tcl_Obj* current_port;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Tcl_Obj* result = Tcl_NewListObj(port_count, NULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (int i = 0; i < port_count; i++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ port_elements[0] = Tcl_NewStringObj(ports[i]->name, -1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ port_elements[1] = Tcl_NewIntObj(ports[i]->requested);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ port_elements[2] = Tcl_NewStringObj(ports[i]->state, -1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ port_elements[3] = Tcl_NewStringObj(ports[i]->variants, -1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ port_elements[4] = Tcl_NewStringObj(ports[i]->requested_variants, -1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ current_port = Tcl_NewListObj((sizeof(port_elements)/sizeof(port_elements[0])), port_elements);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (current_port == NULL) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ returncode = TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (Tcl_ListObjAppendElement(interp, result, current_port) != TCL_OK) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ returncode = TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</span> }
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- Tcl_Obj** objs;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (list_string_to_obj(&objs, portstrs, port_count, &error)){
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Tcl_Obj* result = Tcl_NewListObj(port_count, objs);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (int i=0; i < port_count; i++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ free(ports[i]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ free(ports);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (returncode == TCL_OK) {
</span> Tcl_SetObjResult(interp, result);
<span style='display:block; white-space:pre;background:#ffe0e0;'>- free(objs);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for (i=0; i < port_count; i++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free(ports[i]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free(ports);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return registry_failed(interp, &error);
</span> }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ return returncode;
</span> }
return registry_failed(interp, &error);
}
</pre><pre style='margin:0'>
</pre>