To allow a using of Tcl scripts in cgi
Sergei Gavrikov
w3sg@SoftHome.net
Tue Jul 25 11:01:00 GMT 2006
With that I have a fun with the cgi scripts in Tcl. Anthony, it quiet
works under 1M of RAM on my small memory footprint board.
Sergei
-------------- next part --------------
diff -ur athttpd.orig/current/ChangeLog athttpd/current/ChangeLog
--- athttpd.orig/current/ChangeLog 2006-07-21 17:11:54.000000000 +0300
+++ athttpd/current/ChangeLog 2006-07-25 13:54:10.000000000 +0300
@@ -1,3 +1,19 @@
+2006-07-25 Sergei Gavrikov <w3sg@SoftHome.net>
+
+ * cdl/httpd.cdl: CYGDAT_NET_ATHTTPD_SERVEROPT_CGIDIR is changed
+ to allow a using of the CGI scripts in Tcl.
+ * doc/athttpd.sgml: Fixed typos.
+ * include/jim.h: The Jim_InitExtension() function is declared
+ as inline against a compiler warning.
+ * src/cgi.c: Included a <cyg/athttpd/jim.h> header is
+ needed for a CYGOPT_NET_ATHTTPD_USE_CGIBIN_TCL condition;
+ cyg_httpd_exec_cgi_tcl(): missed in some conditions
+ cyg_ldr_malloc() replaced by malloc() against a compiler
+ error; A prototyping of the ExportedJimCreateInterp removed.
+ * src/forms.c: cyg_httpd_handle_method_POST(): allowed a using
+ the Tcl scripts.
+ * src/httpd.c: cyg_httpd_handle_method_GET(): Ditto.
+
2006-07-19 Anthony Tonizzo <atonizzo@gmail.com>
* src/socket.c: Corrected a typo that generated an assertion.
diff -ur athttpd.orig/current/cdl/httpd.cdl athttpd/current/cdl/httpd.cdl
--- athttpd.orig/current/cdl/httpd.cdl 2006-07-18 19:37:23.000000000 +0300
+++ athttpd/current/cdl/httpd.cdl 2006-07-25 12:48:23.000000000 +0300
@@ -130,7 +130,7 @@
cdl_option CYGDAT_NET_ATHTTPD_SERVEROPT_CGIDIR {
display "cgi-bin directory"
- active_if { 0 != CYGOPT_NET_ATHTTPD_USE_CGIBIN_OBJLOADER }
+ active_if { 0 != CYGOPT_NET_ATHTTPD_USE_CGIBIN_OBJLOADER || 0 != CYGOPT_NET_ATHTTPD_USE_CGIBIN_TCL }
flavor data
default_value {"\"cgi-bin/\""}
description "This is the path, relative to CYGDAT_NET_ATHTTPD_SERVEROPT_ROOTDIR,
diff -ur athttpd.orig/current/doc/athttpd.sgml athttpd/current/doc/athttpd.sgml
--- athttpd.orig/current/doc/athttpd.sgml 2006-07-20 10:20:56.000000000 +0300
+++ athttpd/current/doc/athttpd.sgml 2006-07-25 10:56:00.000000000 +0300
@@ -106,7 +106,7 @@
inside the body of the callback function.
The following is an example of how to add a callback to a function myForm()
-whenever the /myform.gci is called.
+whenever the /myform.cgi is called.
</para>
<programlisting width=72>
@@ -336,7 +336,7 @@
form variable called foo, and during the GET request we are defining foo
as being "1":</para>
-<programlisting width=72>GET /myForm.gci?foo=1</programlisting>
+<programlisting width=72>GET /myForm.cgi?foo=1</programlisting>
<para>then tcl will be able to access the variable foo as $foo.</para>
diff -ur athttpd.orig/current/include/jim.h athttpd/current/include/jim.h
--- athttpd.orig/current/include/jim.h 2006-07-18 19:37:24.000000000 +0300
+++ athttpd/current/include/jim.h 2006-07-25 11:26:27.000000000 +0300
@@ -798,7 +798,7 @@
#if defined JIM_EXTENSION || defined JIM_EMBEDDED
/* This must be included "inline" inside the extension */
-static void Jim_InitExtension(Jim_Interp *interp)
+static __inline__ void Jim_InitExtension(Jim_Interp *interp)
{
Jim_GetApi = interp->getApiFuncPtr;
diff -ur athttpd.orig/current/src/cgi.c athttpd/current/src/cgi.c
--- athttpd.orig/current/src/cgi.c 2006-07-18 19:37:24.000000000 +0300
+++ athttpd/current/src/cgi.c 2006-07-25 13:04:11.000000000 +0300
@@ -72,6 +72,10 @@
#include <cyg/objloader/objelf.h>
#endif
+#ifdef CYGOPT_NET_ATHTTPD_USE_CGIBIN_TCL
+#include <cyg/athttpd/jim.h>
+#endif
+
// =============================================================================
// Objloader CGI Support
// =============================================================================
@@ -179,7 +183,7 @@
return 0;
}
- char* tcl_buffer = (char*)cyg_ldr_malloc(sp.st_size);
+ char* tcl_buffer = (char*)malloc(sp.st_size);
CYG_ASSERT(tcl_buffer != NULL, "Cannot malloc() for tcl CGI");
if (tcl_buffer == NULL)
{
@@ -210,7 +214,6 @@
return 0;
}
-Jim_Interp *ExportedJimCreateInterp(void);
static void Jim_InitEmbedded(void) {
Jim_Interp *i = ExportedJimCreateInterp();
Jim_InitExtension(i);
@@ -304,7 +307,7 @@
#ifdef CYGOPT_NET_ATHTTPD_USE_CGIBIN_TCL
if ( strcmp(extension, CYG_HTTPD_DEFAULT_CGIBIN_TCL_EXTENSION) == 0)
{
- // Load a cgibin via OBJLOADER.
+ // Load a cgibin via TCL.
cyg_int32 rc = cyg_httpd_exec_cgi_tcl(file_name);
return rc;
}
diff -ur athttpd.orig/current/src/forms.c athttpd/current/src/forms.c
--- athttpd.orig/current/src/forms.c 2006-07-18 19:37:24.000000000 +0300
+++ athttpd/current/src/forms.c 2006-07-25 12:30:32.000000000 +0300
@@ -214,7 +214,7 @@
return;
}
-#ifdef CYGOPT_NET_ATHTTPD_USE_CGIBIN_OBJLOADER
+#if defined(CYGOPT_NET_ATHTTPD_USE_CGIBIN_OBJLOADER) || defined(CYGOPT_NET_ATHTTPD_USE_CGIBIN_TCL)
// If we did not find a c language callback handler for this URL see if
// we are trying to execute a CGI via the OBJLOADER package.
if (httpstate.url[0] == '/' &&
diff -ur athttpd.orig/current/src/http.c athttpd/current/src/http.c
--- athttpd.orig/current/src/http.c 2006-07-18 19:37:24.000000000 +0300
+++ athttpd/current/src/http.c 2006-07-25 12:29:42.000000000 +0300
@@ -722,7 +722,7 @@
#endif
}
-#ifdef CYGOPT_NET_ATHTTPD_USE_CGIBIN_OBJLOADER
+#if defined(CYGOPT_NET_ATHTTPD_USE_CGIBIN_OBJLOADER) || defined(CYGOPT_NET_ATHTTPD_USE_CGIBIN_TCL)
// If the URL is a CGI script, there is a different directory...
if (httpstate.url[0] == '/' &&
!strncmp(httpstate.url + 1,
diff -ur athttpd.orig/current/src/socket.c athttpd/current/src/socket.c
--- athttpd.orig/current/src/socket.c 2006-07-21 17:11:56.000000000 +0300
+++ athttpd/current/src/socket.c 2006-07-25 11:49:27.000000000 +0300
@@ -336,6 +336,9 @@
#ifdef CYGOPT_NET_ATHTTPD_USE_CGIBIN_TCL
cyg_httpd_init_tcl_interpreter();
+#if CYGOPT_NET_ATHTTPD_DEBUG_LEVEL > 0
+ diag_printf("Tcl interpreter Initialized...\n");
+#endif
#endif
cyg_httpd_initialize();
More information about the Ecos-patches
mailing list