From 67b4d800264ba7dd4c8b64719cbbc87464d3430f Mon Sep 17 00:00:00 2001 From: Mike Taylor Date: Wed, 21 Dec 2005 00:06:34 +0000 Subject: [PATCH] cql2rpn() now works. Pernicious stack-whack bug fixed. --- src/zoom-c.c | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/src/zoom-c.c b/src/zoom-c.c index 7131b41..41456e0 100644 --- a/src/zoom-c.c +++ b/src/zoom-c.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-2005, Index Data ApS * See the file LICENSE for details. * - * $Id: zoom-c.c,v 1.58 2005-12-20 22:24:05 mike Exp $ + * $Id: zoom-c.c,v 1.59 2005-12-21 00:06:34 mike Exp $ */ /** * \file zoom-c.c @@ -1098,7 +1098,7 @@ static zoom_ret ZOOM_connection_send_init (ZOOM_connection c) ZOOM_options_get(c->options, "implementationName"), odr_prepend(c->odr_out, "ZOOM-C", ireq->implementationName)); - version = odr_strdup(c->odr_out, "$Revision: 1.58 $"); + version = odr_strdup(c->odr_out, "$Revision: 1.59 $"); if (strlen(version) > 10) /* check for unexpanded CVS strings */ version[strlen(version)-2] = '\0'; ireq->implementationVersion = odr_prepend(c->odr_out, @@ -4020,7 +4020,7 @@ static char *cql2pqf(ZOOM_connection c, const char *cql) char pqfbuf[512]; parser = cql_parser_create(); - printf("*** got CQL parser %p\n", parser); + /*printf("*** got CQL parser %p\n", parser);*/ if ((error = cql_parser_string(parser, cql)) != 0) { cql_parser_destroy(parser); set_ZOOM_error(c, ZOOM_ERROR_CQL_PARSE, cql); @@ -4028,24 +4028,25 @@ static char *cql2pqf(ZOOM_connection c, const char *cql) } node = cql_parser_result(parser); - printf("*** got CQL node %p\n", node); - cql_parser_destroy(parser); - printf("*** destroyed parser\n"); + /*printf("*** got CQL node %p\n", node);*/ + /* ### Do not call cql_parser_destroy() yet: it destroys `node'! */ cqlfile = ZOOM_connection_option_get(c, "cqlfile"); - printf("*** cqlfile is %p\n", cqlfile); + /*printf("*** cqlfile is %p\n", cqlfile);*/ if (cqlfile == 0) { - printf("*** cqlfile is null\n"); + /*printf("*** cqlfile is null\n");*/ + cql_parser_destroy(parser); cql_node_destroy(node); - printf("*** destroyed node\n"); + /*printf("*** destroyed node\n");*/ set_ZOOM_error(c, ZOOM_ERROR_CQL_TRANSFORM, "no CQL transform file"); - printf("*** set ZOOM_error\n"); + /*printf("*** set ZOOM_error\n");*/ return 0; } - printf("*** got CQL file %s\n", cqlfile); + /*printf("*** got CQL file %s\n", cqlfile);*/ if ((trans = cql_transform_open_fname(cqlfile)) == 0) { char buf[512]; + cql_parser_destroy(parser); cql_node_destroy(node); sprintf(buf, "can't open CQL transform file '%.200s': %.200s", cqlfile, strerror(errno)); @@ -4053,7 +4054,11 @@ static char *cql2pqf(ZOOM_connection c, const char *cql) return 0; } + /*printf("*** got trans %p\n", trans);*/ error = cql_transform_buf(trans, node, pqfbuf, sizeof pqfbuf); + cql_parser_destroy(parser); + /*printf("*** destroyed parser\n");*/ + /*printf("*** got cql_transform_buf() retval %d\n", error);*/ cql_node_destroy(node); if (error != 0) { char buf[512]; @@ -4066,7 +4071,11 @@ static char *cql2pqf(ZOOM_connection c, const char *cql) } cql_transform_close(trans); - return xstrdup(pqfbuf); + { + char *s = xstrdup(pqfbuf); + /*printf("*** translated '%s' to '%s'\n", cql, s);*/ + return s; + } } -- 1.7.10.4