Modifiying "struct map" so that there are now separate header and
authorjongfoster <jongfoster@users.sourceforge.net>
Sun, 5 Aug 2001 16:06:20 +0000 (16:06 +0000)
committerjongfoster <jongfoster@users.sourceforge.net>
Sun, 5 Aug 2001 16:06:20 +0000 (16:06 +0000)
"map_entry" structures.  This means that functions which modify a
map no longer need to return a pointer to the modified map.
Also, it no longer reverses the order of the entries (which may be
important with some advanced template substitutions).

cgi.c
cgi.h
filters.c
list.c
list.h
project.h
showargs.c
showargs.h

diff --git a/cgi.c b/cgi.c
index 7326bca..1c81196 100644 (file)
--- a/cgi.c
+++ b/cgi.c
@@ -1,4 +1,4 @@
-const char cgi_rcs[] = "$Id: cgi.c,v 1.16 2001/08/01 21:33:18 jongfoster Exp $";
+const char cgi_rcs[] = "$Id: cgi.c,v 1.17 2001/08/05 15:57:38 oes Exp $";
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/cgi.c,v $
@@ -36,6 +36,9 @@ const char cgi_rcs[] = "$Id: cgi.c,v 1.16 2001/08/01 21:33:18 jongfoster Exp $";
  *
  * Revisions   :
  *    $Log: cgi.c,v $
+ *    Revision 1.17  2001/08/05 15:57:38  oes
+ *    Adapted finish_http_response to new list_to_text
+ *
  *    Revision 1.16  2001/08/01 21:33:18  jongfoster
  *    Changes to fill_template() that reduce memory usage without having
  *    an impact on performance.  I also renamed some variables so as not
@@ -288,7 +291,7 @@ struct http_response *dispatch_cgi(struct client_state *csp)
  * Parameters  :
  *          1  :  string = string to be parsed 
  *
- * Returns     :  poniter to param list, or NULL if failiure
+ * Returns     :  pointer to param list
  *
  *********************************************************************/
 struct map *parse_cgi_parameters(char *argstring)
@@ -296,9 +299,12 @@ struct map *parse_cgi_parameters(char *argstring)
    char *tmp, *p;
    char *vector[BUFFER_SIZE];
    int pairs, i;
-   struct map *cgi_params = NULL;
+   struct map *cgi_params = new_map();
 
-   if(*argstring == '?') argstring++;
+   if(*argstring == '?')
+   {
+      argstring++;
+   }
    tmp = strdup(argstring);
 
    pairs = ssplit(tmp, "&", vector, SZ(vector), 1, 1);
@@ -308,7 +314,7 @@ struct map *parse_cgi_parameters(char *argstring)
       if ((NULL != (p = strchr(vector[i], '='))) && (*(p+1) != '\0'))
       {
          *p = '\0';
-         cgi_params = map(cgi_params, url_decode(vector[i]), 0, url_decode(++p), 0);
+         map(cgi_params, url_decode(vector[i]), 0, url_decode(++p), 0);
       }
    }
 
@@ -336,8 +342,9 @@ struct map *parse_cgi_parameters(char *argstring)
 int cgi_default(struct client_state *csp, struct http_response *rsp,
                 struct map *parameters)
 {
-   char *p, *tmp = NULL;
-   struct map *exports = default_exports(csp, "");
+   char *p;
+   char *tmp = NULL;
+   struct map * exports = default_exports(csp, "");
 
    /* If there were other parameters, export a dump as "cgi-parameters" */
    if(parameters)
@@ -346,12 +353,12 @@ int cgi_default(struct client_state *csp, struct http_response *rsp,
       tmp = strsav(tmp, "<p>What made you think this cgi takes parameters?\n"
                         "Anyway, here they are, in case you're interested:</p>\n");
       tmp = strsav(tmp, p);
-      exports = map(exports, "cgi-parameters", 1, tmp, 0);
+      map(exports, "cgi-parameters", 1, tmp, 0);
       free(p);
    }
    else
    {
-      exports = map(exports, "cgi-parameters", 1, "", 1);
+      map(exports, "cgi-parameters", 1, "", 1);
    }
 
    rsp->body = fill_template(csp, "default", exports);
@@ -384,13 +391,13 @@ int cgi_send_banner(struct client_state *csp, struct http_response *rsp,
 {
    if(strcmp(lookup(parameters, "type"), "trans"))
    {
-      rsp->body = bindup(JBGIF, sizeof(JBGIF));
-      rsp->content_length = sizeof(JBGIF);
+      rsp->body = bindup(JBGIF, sizeof(JBGIF) - 1);
+      rsp->content_length = sizeof(JBGIF) - 1;
    }
    else
    {
-      rsp->body = bindup(BLANKGIF, sizeof(BLANKGIF));
-      rsp->content_length = sizeof(BLANKGIF);
+      rsp->body = bindup(BLANKGIF, sizeof(BLANKGIF) - 1);
+      rsp->content_length = sizeof(BLANKGIF) - 1;
    }   
 
    enlist(rsp->headers, "Content-Type: image/gif");
@@ -422,9 +429,9 @@ int cgi_send_banner(struct client_state *csp, struct http_response *rsp,
 int cgi_show_version(struct client_state *csp, struct http_response *rsp,
                      struct map *parameters)
 {
-   struct map *exports = default_exports(csp, "show-version");
+   struct map * exports = default_exports(csp, "show-version");
 
-   exports = map(exports, "sourceversions", 1, show_rcs(), 0);  
+   map(exports, "sourceversions", 1, show_rcs(), 0);  
 
    rsp->body = fill_template(csp, "show-version", exports);
    free_map(exports);
@@ -457,7 +464,6 @@ int cgi_show_status(struct client_state *csp, struct http_response *rsp,
 {
    char *s = NULL;
    int i;
-   struct map *exports = default_exports(csp, "show-status");
 
    FILE * fp;
    char buf[BUFFER_SIZE];
@@ -465,9 +471,9 @@ int cgi_show_status(struct client_state *csp, struct http_response *rsp,
    const char * filename = NULL;
    char * file_description = NULL;
 
+   struct map * exports = default_exports(csp, "show-status");
 
-   p = lookup(parameters, "file");
-   switch (*p)
+   switch (*(lookup(parameters, "file")))
    {
    case 'p':
       if (csp->actions_list)
@@ -498,12 +504,12 @@ int cgi_show_status(struct client_state *csp, struct http_response *rsp,
 
    if (NULL != filename)
    {
-      exports = map(exports, "file-description", 1, file_description, 1);
-      exports = map(exports, "filepath", 1, html_encode(filename), 0);
+      map(exports, "file-description", 1, file_description, 1);
+      map(exports, "filepath", 1, html_encode(filename), 0);
 
       if ((fp = fopen(filename, "r")) == NULL)
       {
-         exports = map(exports, "content", 1, "<h1>ERROR OPENING FILE!</h1>", 1);
+         map(exports, "content", 1, "<h1>ERROR OPENING FILE!</h1>", 1);
       }
       else
       {
@@ -518,7 +524,7 @@ int cgi_show_status(struct client_state *csp, struct http_response *rsp,
             }
          }
          fclose(fp);
-         exports = map(exports, "contents", 1, s, 0);
+         map(exports, "contents", 1, s, 0);
       }
       rsp->body = fill_template(csp, "show-status-file", exports);
       free_map(exports);
@@ -526,7 +532,7 @@ int cgi_show_status(struct client_state *csp, struct http_response *rsp,
 
    }
 
-   exports = map(exports, "redirect-url", 1, REDIRECT_URL, 1);
+   map(exports, "redirect-url", 1, REDIRECT_URL, 1);
    
    s = NULL;
    for (i=0; i < Argc; i++)
@@ -534,46 +540,46 @@ int cgi_show_status(struct client_state *csp, struct http_response *rsp,
       s = strsav(s, Argv[i]);
       s = strsav(s, " ");
    }
-   exports = map(exports, "invocation", 1, s, 0);
+   map(exports, "invocation", 1, s, 0);
 
-   exports = map(exports, "options", 1, csp->config->proxy_args, 1);
-   exports = show_defines(exports);
+   map(exports, "options", 1, csp->config->proxy_args, 1);
+   show_defines(exports);
 
 #ifdef FEATURE_STATISTICS
-   exports = add_stats(exports);
+   add_stats(exports);
 #else /* ndef FEATURE_STATISTICS */
-   exports = map_block_killer(exports, "statistics");
+   map_block_killer(exports, "statistics");
 #endif /* ndef FEATURE_STATISTICS */
 
    if (csp->actions_list)
    {
-      exports = map(exports, "actions-filename", 1,  csp->actions_list->filename, 1);
+      map(exports, "actions-filename", 1,  csp->actions_list->filename, 1);
    }
    else
    {
-      exports = map(exports, "actions-filename", 1, "None specified", 1);
+      map(exports, "actions-filename", 1, "None specified", 1);
    }
 
    if (csp->rlist)
    {
-      exports = map(exports, "re-filter-filename", 1,  csp->rlist->filename, 1);
+      map(exports, "re-filter-filename", 1,  csp->rlist->filename, 1);
    }
    else
    {
-      exports = map(exports, "re-filter-filename", 1, "None specified", 1);
+      map(exports, "re-filter-filename", 1, "None specified", 1);
    }
 
 #ifdef FEATURE_TRUST
    if (csp->tlist)
    {
-      exports = map(exports, "trust-filename", 1,  csp->tlist->filename, 1);
+      map(exports, "trust-filename", 1,  csp->tlist->filename, 1);
    }
    else
    {
-       exports = map(exports, "trust-filename", 1, "None specified", 1);
+       map(exports, "trust-filename", 1, "None specified", 1);
    }
 #else
-   exports = map_block_killer(exports, "trust-support");
+   map_block_killer(exports, "trust-support");
 #endif /* ndef FEATURE_TRUST */
 
    rsp->body = fill_template(csp, "show-status", exports);
@@ -608,13 +614,14 @@ int cgi_show_status(struct client_state *csp, struct http_response *rsp,
 int cgi_show_url_info(struct client_state *csp, struct http_response *rsp,
                       struct map *parameters)
 {
-   struct map *exports = default_exports(csp, "show-url-info");
-   char *url_param, *host = NULL;
+   char *url_param;
+   char *host = NULL;
+   struct map * exports = default_exports(csp, "show-url-info");
 
    if (NULL == (url_param = strdup(lookup(parameters, "url"))) || *url_param == '\0')
    {
-      exports = map_block_killer(exports, "url-given");
-      exports = map(exports, "url", 1, "", 1);
+      map_block_killer(exports, "url-given");
+      map(exports, "url", 1, "", 1);
    }
    else
    {
@@ -631,18 +638,18 @@ int cgi_show_url_info(struct client_state *csp, struct http_response *rsp,
       host = url_param;
       host += (strncmp(url_param, "http://", 7)) ? 0 : 7;
 
-      exports = map(exports, "url", 1, host, 1);
-      exports = map(exports, "url-html", 1, html_encode(host), 0);
+      map(exports, "url", 1, host, 1);
+      map(exports, "url-html", 1, html_encode(host), 0);
 
       init_current_action(action);
 
       s = current_action_to_text(action);
-      exports = map(exports, "default", 1, s , 0);
+      map(exports, "default", 1, s , 0);
 
       if (((fl = csp->actions_list) == NULL) || ((b = fl->f) == NULL))
       {
-         exports = map(exports, "matches", 1, "none" , 1);
-         exports = map(exports, "final", 1, lookup(exports, "default"), 1);
+         map(exports, "matches", 1, "none" , 1);
+         map(exports, "final", 1, lookup(exports, "default"), 1);
 
          freez(url_param);
          free_current_action(action);
@@ -676,8 +683,8 @@ int cgi_show_url_info(struct client_state *csp, struct http_response *rsp,
       /* if splitting the domain fails, punt */
       if (url->dbuf == NULL)
       {
-         exports = map(exports, "matches", 1, "none" , 1);
-         exports = map(exports, "final", 1, lookup(exports, "default"), 1);
+         map(exports, "matches", 1, "none" , 1);
+         map(exports, "final", 1, lookup(exports, "default"), 1);
 
          freez(url_param);
          freez(path);
@@ -720,11 +727,11 @@ int cgi_show_url_info(struct client_state *csp, struct http_response *rsp,
 
       if (hits)
       {
-         exports = map(exports, "matches", 1, matches , 0);
+         map(exports, "matches", 1, matches , 0);
       }
       else
       {
-         exports = map(exports, "matches", 1, "none", 1);
+         map(exports, "matches", 1, "none", 1);
       }
       matches = NULL;
 
@@ -735,7 +742,7 @@ int cgi_show_url_info(struct client_state *csp, struct http_response *rsp,
       freez(path);
 
       s = current_action_to_text(action);
-      exports = map(exports, "final", 1, s, 0);
+      map(exports, "final", 1, s, 0);
       s = NULL;
 
       free_current_action(action);
@@ -757,38 +764,38 @@ int cgi_show_url_info(struct client_state *csp, struct http_response *rsp,
  *
  * Parameters  :
  *          1  :  csp = Current client state (buffers, headers, etc...)
- *          2  :  template = Which template should be used for the answer
+ *          2  :  templatename = Which template should be used for the answer
  *          3  :  errno = system error number
  *
  * Returns     :  NULL if no memory, else http_response
  *
  *********************************************************************/
-struct http_response *error_response(struct client_state *csp, const char *template, int err)
+struct http_response *error_response(struct client_state *csp, const char *templatename, int err)
 {
    struct http_response *rsp;
-   struct map *exports = default_exports(csp, NULL);
+   struct map * exports = default_exports(csp, NULL);
 
    if (NULL == ( rsp = (struct http_response *)zalloc(sizeof(*rsp))))
    {
       return NULL;
    }  
 
-      exports = map(exports, "host-html", 1, html_encode(csp->http->host), 0);
-      exports = map(exports, "hostport", 1, csp->http->hostport, 1);
-      exports = map(exports, "hostport-html", 1, html_encode(csp->http->hostport), 0);
-      exports = map(exports, "path", 1, csp->http->path, 1);
-      exports = map(exports, "path-html", 1, html_encode(csp->http->path), 0);
-      exports = map(exports, "error", 1, safe_strerror(err), 0);
-      exports = map(exports, "host-ip", 1, csp->http->host_ip_addr_str, 1);
+      map(exports, "host-html", 1, html_encode(csp->http->host), 0);
+      map(exports, "hostport", 1, csp->http->hostport, 1);
+      map(exports, "hostport-html", 1, html_encode(csp->http->hostport), 0);
+      map(exports, "path", 1, csp->http->path, 1);
+      map(exports, "path-html", 1, html_encode(csp->http->path), 0);
+      map(exports, "error", 1, safe_strerror(err), 0);
+      map(exports, "host-ip", 1, csp->http->host_ip_addr_str, 1);
 
-      rsp->body = fill_template(csp, template, exports);
+      rsp->body = fill_template(csp, templatename, exports);
       free_map(exports);
       
-      if (!strcmp(template, "no-such-domain"))
+      if (!strcmp(templatename, "no-such-domain"))
       {
          rsp->status = strdup("404 No such domain"); 
       }
-      else if (!strcmp(template, "connect-failed"))
+      else if (!strcmp(templatename, "connect-failed"))
       {
          rsp->status = strdup("503 Connect failed");
       }
@@ -908,7 +915,7 @@ void free_http_response(struct http_response *rsp)
  *********************************************************************/
 char *fill_template(struct client_state *csp, const char *templatename, struct map *exports)
 {
-   struct map *m;
+   struct map_entry *m;
    pcrs_job *job;
    char buf[BUFFER_SIZE];
    char *tmp_out_buffer;
@@ -951,13 +958,14 @@ char *fill_template(struct client_state *csp, const char *templatename, struct m
    /* 
     * Assemble pcrs joblist from exports map
     */
-   for (m = exports; m != NULL; m = m->next)
+   for (m = exports->first; m != NULL; m = m->next)
    {
       /* Enclose name in @@ */
       snprintf(buf, BUFFER_SIZE, "@%s@", m->name);
 
-      /* Make and run job */
-      if ( NULL == (job = (pcrs_compile(buf, m->value, "sigTU", &error))) ) 
+      /* Make and run job. */
+      job = pcrs_compile(buf, m->value, "sigTU",  &error);
+      if (job == NULL) 
       {
          log_error(LOG_LEVEL_ERROR, "Error compiling template fill job %s: %d", m->name, error);
       }
@@ -990,45 +998,47 @@ char *fill_template(struct client_state *csp, const char *templatename, struct m
  *                which are common to all CGI functions.
  *
  * Parameters  :
+ *          1  :  exports = Structure to write output to.  This
+ *                structure should be newly allocated and will be
+ *                zeroed.
  *          1  :  csp = Current client state (buffers, headers, etc...)
  *          2  :  caller = name of CGI who calls us and which should
  *                         be excluded from the generated menu.
  * Returns     :  NULL if no memory, else map
  *
  *********************************************************************/
-struct map *default_exports(struct client_state *csp, char *caller)
+struct map * default_exports(const struct client_state *csp, const char *caller)
 {
-   struct map *exports = NULL;
    char buf[20];
+   struct map * exports = new_map();
 
-   exports = map(exports, "version", 1, VERSION, 1);
-   exports = map(exports, "my-ip-address", 1, csp->my_ip_addr_str ? csp->my_ip_addr_str : "unknown", 1);
-   exports = map(exports, "my-hostname", 1, csp->my_hostname ? csp->my_hostname : "unknown", 1);
-   exports = map(exports, "admin-address", 1, csp->config->admin_address ? csp->config->admin_address : "fill@me.in.please", 1);
-   exports = map(exports, "homepage", 1, HOME_PAGE_URL, 1);
-   exports = map(exports, "default-cgi", 1, HOME_PAGE_URL "/config", 1);
-   exports = map(exports, "menu", 1, make_menu(caller), 0);
-   exports = map(exports, "code-status", 1, CODE_STATUS, 1);
+   map(exports, "version", 1, VERSION, 1);
+   map(exports, "my-ip-address", 1, csp->my_ip_addr_str ? csp->my_ip_addr_str : "unknown", 1);
+   map(exports, "my-hostname", 1, csp->my_hostname ? csp->my_hostname : "unknown", 1);
+   map(exports, "admin-address", 1, csp->config->admin_address ? csp->config->admin_address : "fill@me.in.please", 1);
+   map(exports, "homepage", 1, HOME_PAGE_URL, 1);
+   map(exports, "default-cgi", 1, HOME_PAGE_URL "/config", 1);
+   map(exports, "menu", 1, make_menu(caller), 0);
+   map(exports, "code-status", 1, CODE_STATUS, 1);
 
    snprintf(buf, 20, "%d", csp->config->hport);
-   exports = map(exports, "my-port", 1, buf, 1);
+   map(exports, "my-port", 1, buf, 1);
 
    if(!strcmp(CODE_STATUS, "stable"))
    {
-      exports = map_block_killer(exports, "unstable");
+      map_block_killer(exports, "unstable");
    }
 
    if(csp->config->proxy_info_url != NULL)
    {
-      exports = map(exports, "proxy-info-url", 1, csp->config->proxy_info_url, 1);
+      map(exports, "proxy-info-url", 1, csp->config->proxy_info_url, 1);
    }
    else
    {
-      exports = map_block_killer(exports, "have-proxy-info");
+      map_block_killer(exports, "have-proxy-info");
    }   
 
-   return(exports);
-
+   return (exports);
 }
 
 
@@ -1049,15 +1059,12 @@ struct map *default_exports(struct client_state *csp, char *caller)
  * Returns     :  extended map
  *
  *********************************************************************/
-struct map *map_block_killer(struct map *exports, char *name)
+void map_block_killer(struct map *exports, const char *name)
 {
    char buf[1000]; /* Will do, since the names are hardwired */
 
    snprintf(buf, 1000, "if-%s-start.*if-%s-end", name, name);
-   exports = map(exports, buf, 1, "", 1);
-
-   return(exports);
-
+   map(exports, buf, 1, "", 1);
 }
 
 
@@ -1085,7 +1092,7 @@ struct map *map_block_killer(struct map *exports, char *name)
  * Returns     :  extended map
  *
  *********************************************************************/
-struct map *map_conditional(struct map *exports, char *name, int choose_first)
+void map_conditional(struct map *exports, const char *name, int choose_first)
 {
    char buf[1000]; /* Will do, since the names are hardwired */
 
@@ -1093,13 +1100,10 @@ struct map *map_conditional(struct map *exports, char *name, int choose_first)
       ? "else-not-%s@.*@endif-%s"
       : "if-%s-then@.*@else-not-%s"),
       name, name);
-   exports = map(exports, buf, 1, "", 1);
+   map(exports, buf, 1, "", 1);
 
    snprintf(buf, 1000, (choose_first ? "if-%s-then" : "endif-%s"), name);
-   exports = map(exports, buf, 1, "", 1);
-
-   return(exports);
-
+   map(exports, buf, 1, "", 1);
 }
 
 
@@ -1118,9 +1122,13 @@ struct map *map_conditional(struct map *exports, char *name, int choose_first)
 char *make_menu(const char *self)
 {
    const struct cgi_dispatcher *d;
-   char buf[BUFFER_SIZE], *tmp = NULL;
+   char buf[BUFFER_SIZE];
+   char *result = NULL;
 
-   if (self == NULL) self = "NO-SUCH-CGI!";
+   if (self == NULL)
+   {
+      self = "NO-SUCH-CGI!";
+   }
 
    /* List available unhidden CGI's and export as "other-cgis" */
    for (d = cgi_dispatcher; d->handler; d++)
@@ -1129,10 +1137,10 @@ char *make_menu(const char *self)
       {
          snprintf(buf, BUFFER_SIZE, "<li><a href=%s/config/%s>%s</a></li>\n",
               HOME_PAGE_URL, d->name, d->description);
-         tmp = strsav(tmp, buf);
+         result = strsav(result, buf);
       }
    }
-   return(tmp);
+   return(result);
 
 }
 
@@ -1144,26 +1152,26 @@ char *make_menu(const char *self)
  * Description :  HTML-dump a map for debugging
  *
  * Parameters  :
- *          1  :  map = map to dump
+ *          1  :  the_map = map to dump
  *
  * Returns     :  string with HTML
  *
  *********************************************************************/
-char *dump_map(struct map *map)
+char *dump_map(const struct map *the_map)
 {
-   struct map *p = map;
+   struct map_entry *cur_entry = the_map->first;
    char *ret = NULL;
 
    ret = strsav(ret, "<table>\n");
 
-   while (p)
+   while (cur_entry)
    {
       ret = strsav(ret, "<tr><td><b>");
-      ret = strsav(ret, p->name);
+      ret = strsav(ret, cur_entry->name);
       ret = strsav(ret, "</b></td><td>");
-      ret = strsav(ret, p->value);
+      ret = strsav(ret, cur_entry->value);
       ret = strsav(ret, "</td></tr>\n");
-      p = p->next;
+      cur_entry = cur_entry->next;
    }
 
    ret = strsav(ret, "</table>\n");
@@ -1204,23 +1212,23 @@ struct map *add_stats(struct map *exports)
 
    if (local_urls_read == 0)
    {
-      exports = map_block_killer(exports, "have-stats");
+      map_block_killer(exports, "have-stats");
    }
    else
    {
-      exports = map_block_killer(exports, "have-no-stats");
+      map_block_killer(exports, "have-no-stats");
 
       perc_rej = (float)local_urls_rejected * 100.0F /
             (float)local_urls_read;
 
       sprintf(buf, "%d", local_urls_read);
-      exports = map(exports, "requests-received", 1, buf, 1);
+      map(exports, "requests-received", 1, buf, 1);
 
       sprintf(buf, "%d", local_urls_rejected);
-      exports = map(exports, "requests-blocked", 1, buf, 1);
+      map(exports, "requests-blocked", 1, buf, 1);
 
       sprintf(buf, "%6.2f", perc_rej);
-      exports = map(exports, "percent-blocked", 1, buf, 1);
+      map(exports, "percent-blocked", 1, buf, 1);
    }
 
    return(exports);
diff --git a/cgi.h b/cgi.h
index 7be5c8e..ba334f7 100644 (file)
--- a/cgi.h
+++ b/cgi.h
@@ -1,6 +1,6 @@
 #ifndef CGI_H_INCLUDED
 #define CGI_H_INCLUDED
-#define CGI_H_VERSION "$Id: cgi.h,v 1.9 2001/08/01 00:17:54 jongfoster Exp $"
+#define CGI_H_VERSION "$Id: cgi.h,v 1.10 2001/08/01 21:19:22 jongfoster Exp $"
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/cgi.h,v $
@@ -38,6 +38,9 @@
  *
  * Revisions   :
  *    $Log: cgi.h,v $
+ *    Revision 1.10  2001/08/01 21:19:22  jongfoster
+ *    Moving file version information to a separate CGI page.
+ *
  *    Revision 1.9  2001/08/01 00:17:54  jongfoster
  *    Adding prototype for map_conditional
  *
@@ -109,17 +112,17 @@ extern struct http_response *error_response(struct client_state *csp, const char
 extern struct http_response *finish_http_response(struct http_response *rsp);
 extern void free_http_response(struct http_response *rsp);
 
-extern struct map *default_exports(struct client_state *csp, char *caller);
-extern struct map *map_block_killer(struct map *map, char *name);
-extern struct map *map_conditional(struct map *exports, char *name, int choose_first);
-extern char *fill_template(struct client_state *csp, const char *template, struct map *exports);
+extern struct map * default_exports(const struct client_state *csp, const char *caller);
+extern void map_block_killer(struct map *map, const char *name);
+extern void map_conditional(struct map *exports, const char *name, int choose_first);
+extern char *fill_template(struct client_state *csp, const char *templatename, struct map *exports);
 
 
 /*
  * Text generators
  */
 extern char *make_menu(const char *self);
-extern char *dump_map(struct map *map);
+extern char *dump_map(const struct map *map);
 
 #ifdef FEATURE_STATISTICS
 extern struct map *add_stats(struct map *exports);
index c9448fd..c22d0b1 100644 (file)
--- a/filters.c
+++ b/filters.c
@@ -1,4 +1,4 @@
-const char filters_rcs[] = "$Id: filters.c,v 1.25 2001/07/26 10:09:46 oes Exp $";
+const char filters_rcs[] = "$Id: filters.c,v 1.26 2001/07/30 22:08:36 jongfoster Exp $";
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/filters.c,v $
@@ -38,6 +38,12 @@ const char filters_rcs[] = "$Id: filters.c,v 1.25 2001/07/26 10:09:46 oes Exp $"
  *
  * Revisions   :
  *    $Log: filters.c,v $
+ *    Revision 1.26  2001/07/30 22:08:36  jongfoster
+ *    Tidying up #defines:
+ *    - All feature #defines are now of the form FEATURE_xxx
+ *    - Permanently turned off WIN_GUI_EDIT
+ *    - Permanently turned on WEBDAV and SPLIT_PROXY_ARGS
+ *
  *    Revision 1.25  2001/07/26 10:09:46  oes
  *    Made browser detection a little less naive
  *
@@ -444,7 +450,6 @@ struct http_response *block_url(struct client_state *csp)
    char *p;
 #endif /* def FEATURE_IMAGE_BLOCKING */
    struct http_response *rsp;
-   struct map *exports = NULL;
 
    /* 
     * If it's not blocked, don't block it ;-)
@@ -501,18 +506,17 @@ struct http_response *block_url(struct client_state *csp)
     * Else, generate an HTML "blocked" message:
     */
    {
-
-      exports = default_exports(csp, NULL);       
+      struct map * exports = default_exports(csp, NULL);
 #ifdef FEATURE_FORCE_LOAD
-      exports = map(exports, "force-prefix", 1, FORCE_PREFIX, 1);
+      map(exports, "force-prefix", 1, FORCE_PREFIX, 1);
 #else /* ifndef FEATURE_FORCE_LOAD */
-      exports = map_block_killer(exports, "force-support");
+      map_block_killer(exports, "force-support");
 #endif /* ndef FEATURE_FORCE_LOAD */
 
-      exports = map(exports, "hostport", 1, csp->http->hostport, 1);
-      exports = map(exports, "hostport-html", 1, html_encode(csp->http->hostport), 0);
-      exports = map(exports, "path", 1, csp->http->path, 1);
-      exports = map(exports, "path-html", 1, html_encode(csp->http->path), 0);
+      map(exports, "hostport", 1, csp->http->hostport, 1);
+      map(exports, "hostport-html", 1, html_encode(csp->http->hostport), 0);
+      map(exports, "path", 1, csp->http->path, 1);
+      map(exports, "path-html", 1, html_encode(csp->http->path), 0);
 
       rsp->body = fill_template(csp, "blocked", exports);
       free_map(exports);
@@ -559,7 +563,7 @@ struct http_response *block_url(struct client_state *csp)
 struct http_response *trust_url(struct client_state *csp)
 {
    struct http_response *rsp;
-   struct map *exports = NULL;
+   struct map * exports;
    char buf[BUFFER_SIZE], *p = NULL;
    struct url_spec **tl, *t;
 
@@ -578,25 +582,26 @@ struct http_response *trust_url(struct client_state *csp)
    {
       return NULL;
    }
+
    exports = default_exports(csp, NULL);
 
    /* 
     * Export the host, port, and referrer information
     */
-   exports = map(exports, "hostport", 1, csp->http->hostport, 1);
-   exports = map(exports, "path", 1, csp->http->path, 1);
-   exports = map(exports, "hostport-html", 1, html_encode(csp->http->hostport), 0);
-   exports = map(exports, "path-html", 1, html_encode(csp->http->path), 0);
+   map(exports, "hostport", 1, csp->http->hostport, 1);
+   map(exports, "path", 1, csp->http->path, 1);
+   map(exports, "hostport-html", 1, html_encode(csp->http->hostport), 0);
+   map(exports, "path-html", 1, html_encode(csp->http->path), 0);
 
    if (csp->referrer && strlen(csp->referrer) > 9)
    {
-      exports = map(exports, "referrer", 1, csp->referrer + 9, 1);
-      exports = map(exports, "referrer-html", 1, html_encode(csp->referrer + 9), 0);
+      map(exports, "referrer", 1, csp->referrer + 9, 1);
+      map(exports, "referrer-html", 1, html_encode(csp->referrer + 9), 0);
    }
    else
    {
-      exports = map(exports, "referrer", 1, "unknown", 1);
-      exports = map(exports, "referrer-html", 1, "unknown", 1);
+      map(exports, "referrer", 1, "unknown", 1);
+      map(exports, "referrer-html", 1, "unknown", 1);
    }
 
    /*
@@ -607,7 +612,7 @@ struct http_response *trust_url(struct client_state *csp)
       sprintf(buf, "<li>%s</li>\n", t->spec);
       p = strsav(p, buf);
    }
-   exports = map(exports, "trusted-referrers", 1, p, 0);
+   map(exports, "trusted-referrers", 1, p, 0);
    p = NULL;
 
    /*
@@ -622,20 +627,20 @@ struct http_response *trust_url(struct client_state *csp)
          sprintf(buf, "<li> <a href=%s>%s</a><br>\n",l->str, l->str);
          p = strsav(p, buf);
       }
-      exports = map(exports, "trust-info", 1, p, 0);
+      map(exports, "trust-info", 1, p, 0);
    }
    else
    {
-      exports = map_block_killer(exports, "have-trust-info");
+      map_block_killer(exports, "have-trust-info");
    }
    
    /*
     * Export the force prefix or the force conditional block killer
     */
 #ifdef FEATURE_FORCE_LOAD
-   exports = map(exports, "force-prefix", 1, FORCE_PREFIX, 1);
+   map(exports, "force-prefix", 1, FORCE_PREFIX, 1);
 #else /* ifndef FEATURE_FORCE_LOAD */
-   exports = map_block_killer(exports, "force-support");
+   map_block_killer(exports, "force-support");
 #endif /* ndef FEATURE_FORCE_LOAD */
 
    /*
diff --git a/list.c b/list.c
index 255d6fd..6635f9e 100644 (file)
--- a/list.c
+++ b/list.c
@@ -1,4 +1,4 @@
-const char list_rcs[] = "$Id: list.c,v 1.5 2001/06/29 21:45:41 oes Exp $";
+const char list_rcs[] = "$Id: list.c,v 1.6 2001/07/31 14:44:51 oes Exp $";
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/list.c,v $
@@ -34,6 +34,9 @@ const char list_rcs[] = "$Id: list.c,v 1.5 2001/06/29 21:45:41 oes Exp $";
  *
  * Revisions   :
  *    $Log: list.c,v $
+ *    Revision 1.6  2001/07/31 14:44:51  oes
+ *    list_to_text() now appends empty line at end
+ *
  *    Revision 1.5  2001/06/29 21:45:41  oes
  *    Indentation, CRLF->LF, Tab-> Space
  *
@@ -79,6 +82,8 @@ const char list_rcs[] = "$Id: list.c,v 1.5 2001/06/29 21:45:41 oes Exp $";
 #include <ctype.h>
 #include <string.h>
 
+#include <assert.h>
+
 #ifndef _WIN32
 #include <unistd.h>
 #endif
@@ -499,30 +504,36 @@ void list_append_list_unique(struct list *dest, const struct list *src)
  *                      strings that will be independantly free()d.
  *
  * Parameters  :
- *          1  :  map = map to add to
+ *          1  :  the_map = map to add to
  *          2  :  name = name to add
  *          3  :  nc = flag set if a copy of name should be used
  *          4  :  value = value to add
  *          5  :  vc = flag set if a copy of value should be used
  *
- * Returns     :  pointer to extended map, or NULL if failiure
+ * Returns     :  N/A
  *
  *********************************************************************/
-struct map *map(struct map *map, char *name, int nc, char *value, int vc)
+void map(struct map *the_map, const char *name, int nc, const char *value, int vc)
 {
-   struct map *cur;
+   struct map_entry *new_entry;
 
-   if (NULL == (cur = zalloc(sizeof(*cur))))
+   if (NULL == (new_entry = zalloc(sizeof(*new_entry))))
    {
-      return(NULL);
+      return;
    }
 
-   cur->name  = nc ? strdup(name) : name;
-   cur->value = vc ? strdup(value) : value;
-   cur->next = map;
-
-   return(cur);
+   new_entry->name  = nc ? strdup(name) : name;
+   new_entry->value = vc ? strdup(value) : value;
+   /* new_entry->next = NULL;  - implied by zalloc */
 
+   if (the_map->last)
+   {
+      the_map->last = the_map->last->next = new_entry;
+   }
+   else
+   {
+      the_map->last = the_map->first = new_entry;
+   }
 }
 
 
@@ -539,20 +550,36 @@ struct map *map(struct map *map, char *name, int nc, char *value, int vc)
  * Returns     :  the value if found, else the empty string
  *
  *********************************************************************/
-char *lookup(struct map *map, char *name)
+const char *lookup(const struct map *the_map, const char *name)
 {
-   struct map *p = map;
+   const struct map_entry *cur_entry = the_map->first;
 
-   while (p)
+   while (cur_entry)
    {
-      if (!strcmp(name, p->name))
+      if (!strcmp(name, cur_entry->name))
       {
-         return p->value;
+         return cur_entry->value;
       }
-      p = p->next;
+      cur_entry = cur_entry->next;
    }
    return "";
+}
 
+
+/*********************************************************************
+ *
+ * Function    :  new_nap
+ *
+ * Description :  Create a new, empty map.
+ *
+ * Parameters  :
+ *
+ * Returns     :  A new, empty map, or NULL if out of memory.
+ *
+ *********************************************************************/
+struct map *new_map(void)
+{
+   return (struct map *) zalloc(sizeof(struct map));
 }
 
 
@@ -564,25 +591,33 @@ char *lookup(struct map *map, char *name)
  *                depandant strings
  *
  * Parameters  :
- *          1  :  list = list to bee freed
+ *          1  :  cur_entry = map to be freed.  May be NULL.
  *
  * Returns     :  N/A
  *
  *********************************************************************/
-void free_map(struct map *map)
+void free_map(struct map *the_map)
 {
-   struct map *p = map;
+   struct map_entry *cur_entry;
+   struct map_entry *next_entry;
 
-   while (p)
+   if (the_map == NULL)
    {
-      free(p->name);
-      free(p->value);
+      return;
+   }
 
-      map = p->next;
-      free(p);
-      p = map;
+   for (cur_entry = the_map->first; cur_entry != NULL; cur_entry = next_entry) 
+   {
+      freez((char *)cur_entry->name);
+      freez((char *)cur_entry->value);
+
+      next_entry = cur_entry->next;
+      free(cur_entry);
    }
 
+   the_map->first = the_map->last = NULL;
+
+   free(the_map);
 }
 
 
diff --git a/list.h b/list.h
index 8cee8f6..b803251 100644 (file)
--- a/list.h
+++ b/list.h
@@ -1,6 +1,6 @@
 #ifndef LIST_H_INCLUDED
 #define LIST_H_INCLUDED
-#define LIST_H_VERSION "$Id: list.h,v 1.4 2001/06/29 13:30:37 oes Exp $"
+#define LIST_H_VERSION "$Id: list.h,v 1.5 2001/07/29 18:43:08 jongfoster Exp $"
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/list.h,v $
  *
  * Revisions   :
  *    $Log: list.h,v $
+ *    Revision 1.5  2001/07/29 18:43:08  jongfoster
+ *    Changing #ifdef _FILENAME_H to FILENAME_H_INCLUDED, to conform to
+ *    ANSI C rules.
+ *
  *    Revision 1.4  2001/06/29 13:30:37  oes
  *    - Introduced enlist_unique_header()
  *    - Removed logentry from cancelled commit
@@ -90,9 +94,10 @@ extern void  list_duplicate(struct list *dest, const struct list *src);
 extern void  destroy_list(struct list *h);
 extern char *list_to_text(struct list *h);
 
-extern struct map* map(struct map* map, char *name, int nc, char *value, int vc);
-extern char *lookup(struct map *list, char *name);
+extern struct map *new_map(void);
 extern void free_map(struct map *list);
+extern void map(struct map* map, const char *name, int nc, const char *value, int vc);
+extern const char *lookup(const struct map *list, const char *name);
 
 /* Revision control strings from this header and associated .c file */
 extern const char list_rcs[];
index 5446bb7..bd89848 100644 (file)
--- a/project.h
+++ b/project.h
@@ -1,6 +1,6 @@
 #ifndef PROJECT_H_INCLUDED
 #define PROJECT_H_INCLUDED
-#define PROJECT_H_VERSION "$Id: project.h,v 1.25 2001/07/29 18:43:08 jongfoster Exp $"
+#define PROJECT_H_VERSION "$Id: project.h,v 1.26 2001/07/30 22:08:36 jongfoster Exp $"
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/project.h,v $
  *
  * Revisions   :
  *    $Log: project.h,v $
+ *    Revision 1.26  2001/07/30 22:08:36  jongfoster
+ *    Tidying up #defines:
+ *    - All feature #defines are now of the form FEATURE_xxx
+ *    - Permanently turned off WIN_GUI_EDIT
+ *    - Permanently turned on WEBDAV and SPLIT_PROXY_ARGS
+ *
  *    Revision 1.25  2001/07/29 18:43:08  jongfoster
  *    Changing #ifdef _FILENAME_H to FILENAME_H_INCLUDED, to conform to
  *    ANSI C rules.
@@ -299,11 +305,17 @@ struct list /* FIXME: Why not separate entries and header? */
    struct list *next;
 };
 
+struct map_entry
+{
+   const char *name;
+   const char *value;
+   struct map_entry *next;
+};
+
 struct map
 {
-  char *name;
-  char *value;
-  struct map *next;
+   struct map_entry *first;
+   struct map_entry *last;
 };
 
 struct http_request
index bceefa6..b80b199 100644 (file)
@@ -1,4 +1,4 @@
-const char showargs_rcs[] = "$Id: showargs.c,v 1.22 2001/08/01 00:20:57 jongfoster Exp $";
+const char showargs_rcs[] = "$Id: showargs.c,v 1.23 2001/08/02 22:03:23 jongfoster Exp $";
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/showargs.c,v $
@@ -34,6 +34,9 @@ const char showargs_rcs[] = "$Id: showargs.c,v 1.22 2001/08/01 00:20:57 jongfost
  *
  * Revisions   :
  *    $Log: showargs.c,v $
+ *    Revision 1.23  2001/08/02 22:03:23  jongfoster
+ *    Fixing an unterminated character constant.
+ *
  *    Revision 1.22  2001/08/01 00:20:57  jongfoster
  *    Changing show_defines so that it doesn't contain any HTML.
  *
@@ -375,108 +378,106 @@ char *show_rcs(void)
  * Returns     :  string 
  *
  *********************************************************************/
-struct map * show_defines(struct map *exports)
+void show_defines(struct map *exports)
 {
 
 #ifdef FEATURE_ACL
-   exports = map_conditional(exports, "FEATURE_ACL", 1);
+   map_conditional(exports, "FEATURE_ACL", 1);
 #else /* ifndef FEATURE_ACL */
-   exports = map_conditional(exports, "FEATURE_ACL", 0);
+   map_conditional(exports, "FEATURE_ACL", 0);
 #endif /* ndef FEATURE_ACL */
 
 #ifdef FEATURE_COOKIE_JAR
-   exports = map_conditional(exports, "FEATURE_COOKIE_JAR", 1);
+   map_conditional(exports, "FEATURE_COOKIE_JAR", 1);
 #else /* ifndef FEATURE_COOKIE_JAR */
-   exports = map_conditional(exports, "FEATURE_COOKIE_JAR", 0);
+   map_conditional(exports, "FEATURE_COOKIE_JAR", 0);
 #endif /* ndef FEATURE_COOKIE_JAR */
 
 #ifdef FEATURE_DENY_GZIP
-   exports = map_conditional(exports, "FEATURE_DENY_GZIP", 1);
+   map_conditional(exports, "FEATURE_DENY_GZIP", 1);
 #else /* ifndef FEATURE_DENY_GZIP */
-   exports = map_conditional(exports, "FEATURE_DENY_GZIP", 0);
+   map_conditional(exports, "FEATURE_DENY_GZIP", 0);
 #endif /* ndef FEATURE_DENY_GZIP */
 
 #ifdef FEATURE_FAST_REDIRECTS
-   exports = map_conditional(exports, "FEATURE_FAST_REDIRECTS", 1);
+   map_conditional(exports, "FEATURE_FAST_REDIRECTS", 1);
 #else /* ifndef FEATURE_FAST_REDIRECTS */
-   exports = map_conditional(exports, "FEATURE_FAST_REDIRECTS", 0);
+   map_conditional(exports, "FEATURE_FAST_REDIRECTS", 0);
 #endif /* ndef FEATURE_FAST_REDIRECTS */
 
 #ifdef FEATURE_FORCE_LOAD
-   exports = map_conditional(exports, "FEATURE_FORCE_LOAD", 1);
+   map_conditional(exports, "FEATURE_FORCE_LOAD", 1);
 #else /* ifndef FEATURE_FORCE_LOAD */
-   exports = map_conditional(exports, "FEATURE_FORCE_LOAD", 0);
+   map_conditional(exports, "FEATURE_FORCE_LOAD", 0);
 #endif /* ndef FEATURE_FORCE_LOAD */
 
 #ifdef FEATURE_IMAGE_BLOCKING
-   exports = map_conditional(exports, "FEATURE_IMAGE_BLOCKING", 1);
+   map_conditional(exports, "FEATURE_IMAGE_BLOCKING", 1);
 #else /* ifndef FEATURE_IMAGE_BLOCKING */
-   exports = map_conditional(exports, "FEATURE_IMAGE_BLOCKING", 0);
+   map_conditional(exports, "FEATURE_IMAGE_BLOCKING", 0);
 #endif /* ndef FEATURE_IMAGE_BLOCKING */
 
 #ifdef FEATURE_IMAGE_DETECT_MSIE
-   exports = map_conditional(exports, "FEATURE_IMAGE_DETECT_MSIE", 1);
+   map_conditional(exports, "FEATURE_IMAGE_DETECT_MSIE", 1);
 #else /* ifndef FEATURE_IMAGE_DETECT_MSIE */
-   exports = map_conditional(exports, "FEATURE_IMAGE_DETECT_MSIE", 0);
+   map_conditional(exports, "FEATURE_IMAGE_DETECT_MSIE", 0);
 #endif /* ndef FEATURE_IMAGE_DETECT_MSIE */
 
 #ifdef FEATURE_KILL_POPUPS
-   exports = map_conditional(exports, "FEATURE_KILL_POPUPS", 1);
+   map_conditional(exports, "FEATURE_KILL_POPUPS", 1);
 #else /* ifndef FEATURE_KILL_POPUPS */
-   exports = map_conditional(exports, "FEATURE_KILL_POPUPS", 0);
+   map_conditional(exports, "FEATURE_KILL_POPUPS", 0);
 #endif /* ndef FEATURE_KILL_POPUPS */
 
 #ifdef FEATURE_PTHREAD
-   exports = map_conditional(exports, "FEATURE_PTHREAD", 1);
+   map_conditional(exports, "FEATURE_PTHREAD", 1);
 #else /* ifndef FEATURE_PTHREAD */
-   exports = map_conditional(exports, "FEATURE_PTHREAD", 0);
+   map_conditional(exports, "FEATURE_PTHREAD", 0);
 #endif /* ndef FEATURE_PTHREAD */
 
 #ifdef FEATURE_STATISTICS
-   exports = map_conditional(exports, "FEATURE_STATISTICS", 1);
+   map_conditional(exports, "FEATURE_STATISTICS", 1);
 #else /* ifndef FEATURE_STATISTICS */
-   exports = map_conditional(exports, "FEATURE_STATISTICS", 0);
+   map_conditional(exports, "FEATURE_STATISTICS", 0);
 #endif /* ndef FEATURE_STATISTICS */
 
 #ifdef FEATURE_TOGGLE
-   exports = map_conditional(exports, "FEATURE_TOGGLE", 1);
+   map_conditional(exports, "FEATURE_TOGGLE", 1);
 #else /* ifndef FEATURE_TOGGLE */
-   exports = map_conditional(exports, "FEATURE_TOGGLE", 0);
+   map_conditional(exports, "FEATURE_TOGGLE", 0);
 #endif /* ndef FEATURE_TOGGLE */
 
 #ifdef FEATURE_TRUST
-   exports = map_conditional(exports, "FEATURE_TRUST", 1);
+   map_conditional(exports, "FEATURE_TRUST", 1);
 #else /* ifndef FEATURE_TRUST */
-   exports = map_conditional(exports, "FEATURE_TRUST", 0);
+   map_conditional(exports, "FEATURE_TRUST", 0);
 #endif /* ndef FEATURE_TRUST */
 
 #ifdef REGEX_GNU
-   exports = map_conditional(exports, "REGEX_GNU", 1);
+   map_conditional(exports, "REGEX_GNU", 1);
 #else /* ifndef REGEX_GNU */
-   exports = map_conditional(exports, "REGEX_GNU", 0);
+   map_conditional(exports, "REGEX_GNU", 0);
 #endif /* def REGEX_GNU */
 
 #ifdef REGEX_PCRE
-   exports = map_conditional(exports, "REGEX_PCRE", 1);
+   map_conditional(exports, "REGEX_PCRE", 1);
 #else /* ifndef REGEX_PCRE */
-   exports = map_conditional(exports, "REGEX_PCRE", 0);
+   map_conditional(exports, "REGEX_PCRE", 0);
 #endif /* def REGEX_PCRE */
 
 #ifdef STATIC_PCRE
-   exports = map_conditional(exports, "STATIC_PCRE", 1);
+   map_conditional(exports, "STATIC_PCRE", 1);
 #else /* ifndef STATIC_PCRE */
-   exports = map_conditional(exports, "STATIC_PCRE", 0);
+   map_conditional(exports, "STATIC_PCRE", 0);
 #endif /* ndef STATIC_PCRE */
 
 #ifdef STATIC_PCRS
-   exports = map_conditional(exports, "STATIC_PCRS", 1);
+   map_conditional(exports, "STATIC_PCRS", 1);
 #else /* ifndef STATIC_PCRS */
-   exports = map_conditional(exports, "STATIC_PCRS", 0);
+   map_conditional(exports, "STATIC_PCRS", 0);
 #endif /* ndef STATIC_PCRS */
 
-   exports = map(exports, "FORCE_PREFIX", 1, FORCE_PREFIX, 1);
-
-   return exports;
+   map(exports, "FORCE_PREFIX", 1, FORCE_PREFIX, 1);
 }
 
 
index 33fc263..61cb6c0 100644 (file)
@@ -1,6 +1,6 @@
 #ifndef SHOWARGS_H_INCLUDED
 #define SHOWARGS_H_INCLUDED
-#define SHOWARGS_H_VERSION "$Id: showargs.h,v 1.6 2001/07/29 18:51:02 jongfoster Exp $"
+#define SHOWARGS_H_VERSION "$Id: showargs.h,v 1.7 2001/08/01 00:19:40 jongfoster Exp $"
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/showargs.h,v $
@@ -35,6 +35,9 @@
  *
  * Revisions   :
  *    $Log: showargs.h,v $
+ *    Revision 1.7  2001/08/01 00:19:40  jongfoster
+ *    Changing prototype of show_defines() to modify a map directly
+ *
  *    Revision 1.6  2001/07/29 18:51:02  jongfoster
  *    Adding editor control block, and renaming _SHOWARGS_H
  *
@@ -68,7 +71,7 @@ extern "C" {
 
 extern void savearg(char *c, char *o, struct configuration_spec * config);
 extern char *show_rcs(void);
-struct map * show_defines(struct map *exports);
+extern void show_defines(struct map *exports);
 
 /* Revision control strings from this header and associated .c file */
 extern const char showargs_rcs[];