diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 1999-10-27 12:50:33 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 1999-10-27 12:50:33 +0000 |
commit | c1cdaa0ce8017b075487e6670f89eb4e715258ea (patch) | |
tree | d4571a02595d6cf6a24d40d6968d83ece3b7a574 /c/src/libnetworking/rtems_webserver/webcomp.c | |
parent | New files created by split of old imfs_handlers.c. (diff) | |
download | rtems-c1cdaa0ce8017b075487e6670f89eb4e715258ea.tar.bz2 |
Patch from Emmanuel Raguet <raguet@crf.canon.fr> and Eric Valette
<valette@crf.canon.fr> to add a port of the GoAhead web server
(httpd) to the RTEMS build tree. They have successfully used
this BSP on i386/pc386 and PowerPC/mcp750.
Mark and Joel spoke with Nick Berliner <nickb@goahead.com> on
26 Oct 1999 about this port and got verbal approval to include
it in RTEMS distributions.
Diffstat (limited to 'c/src/libnetworking/rtems_webserver/webcomp.c')
-rw-r--r-- | c/src/libnetworking/rtems_webserver/webcomp.c | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/c/src/libnetworking/rtems_webserver/webcomp.c b/c/src/libnetworking/rtems_webserver/webcomp.c new file mode 100644 index 0000000000..90767da01f --- /dev/null +++ b/c/src/libnetworking/rtems_webserver/webcomp.c @@ -0,0 +1,177 @@ +/* + * webcomp -- Compile web pages into C source + * + * Copyright (c) Go Ahead Software Inc., 1995-1999. All Rights Reserved. + * + * See the file "license.txt" for usage and redistribution license requirements + */ + +/******************************** Description *********************************/ + +/* + * Usage: webcomp prefix filelist >webrom.c + * + * filelist is a file containing the pathnames of all web pages + * prefix is a path prefix to remove from all the web page pathnames + * webrom.c is the resulting C source file to compile and link. + */ + +/********************************* Includes ***********************************/ + +#include "wsIntrn.h" + +/**************************** Forward Declarations ****************************/ + +static int compile(char_t *fileList, char_t *prefix); +static void usage(); + +/*********************************** Code *************************************/ +/* + * Main program for webpack test harness + */ + +int gmain(int argc, char_t* argv[]) +{ + char_t *fileList, *prefix; + + fileList = NULL; + + if (argc != 3) { + usage(); + } + + prefix = argv[1]; + fileList = argv[2]; + + if (compile(fileList, prefix) < 0) { + return -1; + } + return 0; +} + +/******************************************************************************/ +/* + * Output usage message + */ + +static void usage() +{ + fprintf(stderr, "usage: webcomp prefix filelist >output.c\n"); + exit(2); +} + +/******************************************************************************/ +/* + * Compile the web pages + */ + +static int compile(char_t *fileList, char_t *prefix) +{ + gstat_t sbuf; + FILE *lp; + time_t now; + char_t file[FNAMESIZE]; + char_t *cp; + char buf[512]; + unsigned char *p; + int j, i, len, fd, nFile; + +/* + * Open list of files + */ + if ((lp = fopen(fileList, "r")) == NULL) { + fprintf(stderr, "Can't open file list %s\n", fileList); + return -1; + } + + time(&now); + fprintf(stdout, "/*\n * webrom.c -- Compiled Web Pages\n *\n"); + fprintf(stdout, " * Compiled by GoAhead WebCompile: %s */\n\n", + ctime(&now)); + fprintf(stdout, "#include \"wsIntrn.h\"\n\n"); + fprintf(stdout, "#ifndef WEBS_PAGE_ROM\n"); + fprintf(stdout, "websRomPageIndexType websRomPageIndex[] = {\n"); + fprintf(stdout, " { 0, 0, 0 },\n};\n"); + fprintf(stdout, "#else\n"); + +/* + * Open each input file and compile each web page + */ + nFile = 0; + while (fgets(file, sizeof(file), lp) != NULL) { + if ((p = strchr(file, '\n')) || (p = strchr(file, '\r'))) { + *p = '\0'; + } + if (gstat(file, &sbuf) == 0 && sbuf.st_mode & S_IFDIR) { + continue; + } + if ((fd = gopen(file, O_RDONLY | O_BINARY)) < 0) { + fprintf(stderr, "Can't open file %s\n", file); + return -1; + } + fprintf(stdout, "static unsigned char page_%d[] = {\n", nFile); + + while ((len = read(fd, buf, sizeof(buf))) > 0) { + p = buf; + for (i = 0; i < len; ) { + fprintf(stdout, " "); + for (j = 0; p < &buf[len] && j < 16; j++, p++) { + fprintf(stdout, "%3d,", *p); + } + i += j; + fprintf(stdout, "\n"); + } + } + fprintf(stdout, " 0 };\n\n"); + + close(fd); + nFile++; + } + fclose(lp); + +/* + * Now output the page index + */ + fprintf(stdout, "websRomPageIndexType websRomPageIndex[] = {\n"); + + if ((lp = fopen(fileList, "r")) == NULL) { + fprintf(stderr, "Can't open file list %s\n", fileList); + return -1; + } + nFile = 0; + while (fgets(file, sizeof(file), lp) != NULL) { + if ((p = strchr(file, '\n')) || (p = strchr(file, '\r'))) { + *p = '\0'; + } +/* + * Remove the prefix and add a leading "/" when we print the path + */ + if (strncmp(file, prefix, gstrlen(prefix)) == 0) { + cp = &file[gstrlen(prefix)]; + } else { + cp = file; + } + if (*cp == '/') { + cp++; + } + + if (gstat(file, &sbuf) == 0 && sbuf.st_mode & S_IFDIR) { + fprintf(stdout, " { T(\"/%s\"), 0, 0 },\n", cp); + continue; + } + fprintf(stdout, " { T(\"/%s\"), page_%d, %d },\n", cp, nFile, + sbuf.st_size); + nFile++; + } + fclose(lp); + + fprintf(stdout, " { 0, 0, 0 },\n"); + fprintf(stdout, "};\n"); + fprintf(stdout, "#endif /* WEBS_PAGE_ROM */\n"); + + fclose(lp); + fflush(stdout); + return 0; +} + +/******************************************************************************/ |