mongoose/test/index_cgi.c
Dmitry Frank 8742fac5d8 Publish mongoose src and tests
CL: Mongoose Web Server: Publish sources and tests

Resolves https://github.com/cesanta/mongoose/issues/745

PUBLISHED_FROM=7ecd7a3c518cfa614a6ba0838678dcb91b75a8c0
2018-02-02 15:49:55 +00:00

86 lines
1.8 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ccgi.h>
extern char **environ;
#ifdef _WIN32
#define EOL "\n"
#else
#define EOL "\r\n"
#endif
int alpha_cmp(const void *a, const void *b) {
return strcmp(*(const char **) a, *(const char **) b);
}
int main(void) {
puts("Content-Type: text/html" EOL "Status: 201 Created" EOL EOL);
puts("<pre>" EOL "<h1>Environment</h1>" EOL);
{
const char *sorted_env[500];
size_t i, num_env;
for (num_env = 0; environ[num_env] != 0; num_env++) {
sorted_env[num_env] = environ[num_env];
}
qsort(sorted_env, num_env, sizeof(const char *), alpha_cmp);
for (i = 0; i < num_env; i++) {
printf("E: %s" EOL, sorted_env[i]);
}
}
puts(EOL "<h1>Query string</h1>" EOL);
{
const char *k;
CGI_varlist *vl = CGI_get_query(NULL);
for (k = CGI_first_name(vl); k != NULL; k = CGI_next_name(vl)) {
printf("Q: %s=%s" EOL, k, CGI_lookup(vl, k));
}
CGI_free_varlist(vl);
}
puts(EOL "<h1>Form variables</h1>" EOL);
{
const char *k;
CGI_varlist *vl = CGI_get_post(NULL, NULL);
for (k = CGI_first_name(vl); k != NULL; k = CGI_next_name(vl)) {
printf("P: %s=%s" EOL, k, CGI_lookup(vl, k));
}
CGI_free_varlist(vl);
}
puts(EOL "</pre>" EOL);
return 0;
}
/* Some functions for libccgi that are missing on Windows (VC6). */
#ifdef _WIN32
static int lowercase(const char *s) {
return tolower(*(const unsigned char *) s);
}
int strncasecmp(const char *s1, const char *s2, size_t len) {
int diff = 0;
if (len > 0) do {
diff = lowercase(s1++) - lowercase(s2++);
} while (diff == 0 && s1[-1] != '\0' && --len > 0);
return diff;
}
int strcasecmp(const char *s1, const char *s2) {
return strncasecmp(s1, s2, (size_t) ~0);
}
int mkstemp(char *template) {
return -1; /* Not used by us. */
}
#endif