× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Afternoon all,

        I am sitting here attempting to get an ILE-C routine to work and
having some issues with the unescape code !

        Test Message from the HTML (code) to see what unescape [will] do
with the characters..

        Results in this ---

        Test Message from the HTML  codeá to see what unescape qwillr do
with the characters..

        Note that ( ) [ ] are lost / mistranslated....in the routine x2c().
        Using  a standard cgilib.c (below) from the web, and I have
attempted translating back to ascii in the routine with the same results...

        Any direction ????  Rewrite ??

/* cgilib-c  **/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max_input 100
#define max_login 9


/** Convert a two-char hex string into the char it represents **/
char x2c(char *what) {
register char digit;
digit = (what[0] >= 'A' ? ((what[0] & 0xdf) - 'A')+10 : (what[0] - '0'));
digit *= 16;
digit += (what[1] >= 'A' ? ((what[1] & 0xdf) - 'A')+10 : (what[1] - '0'));
return(digit);
}

/** Reduce any %xx escape sequences to the characters they represent **/
void unescape_url(char *url) {
register int i,j;
for(i=0,j=0; url[j]; ++i,++j) {
if((url[i] = url[j]) == '%') {
url[i] = x2c(&url[j+1]) ;
j+= 2 ;
}
}
url[i] = '\0' ;
}

/** Read the CGI input and place all name/val pairs into list. **/
/** Returns list containing name1, value1, name2, value2, ... , NULL **/
char **getcgivars() {
register int i ;
char *request_method ;
int content_length;
char *cgiinput ;
char **cgivars ;
char **pairlist ;
int paircount ;
char *nvpair ;
char *eqpos ;

/** Depending on the request method, read all CGI input into cgiinput **/
/** (really should produce HTML error messages, instead of exit()ing) **/
request_method= getenv("REQUEST_METHOD") ;
if (!strcmp(request_method, "GET") || !strcmp(request_method, "HEAD") ) {
cgiinput= strdup(getenv("QUERY_STRING")) ;
}
else if (!strcmp(request_method, "POST")) {
/* strcasecmp() is not supported in Windows-- use strcmpi() instead */
if ( strcasecmp(getenv("CONTENT_TYPE"),
"application/x-www-form-urlencoded")) {
printf("getcgivars(): Unsupported Content-Type.\n") ;
exit(1) ;
}
if ( !(content_length = atoi(getenv("CONTENT_LENGTH"))) ) {
printf("getcgivars(): No Content-Length was sent with the POST request.\n")
;
exit(1) ;
}
if ( !(cgiinput= (char *) malloc(content_length+1)) ) {
printf("getcgivars(): Could not malloc for cgiinput.\n") ;
exit(1) ;
}
if (!fread(cgiinput, content_length, 1, stdin)) {
printf("Couldn't read CGI input from STDIN.\n") ;
exit(1) ;
}
cgiinput[content_length]='\0' ;
}
else {
printf("getcgivars(): unsupported REQUEST_METHOD\n") ;
exit(1) ;
}
/** Change all plusses back to spaces **/
for(i=0; cgiinput[i]; i++) if(cgiinput[i] == '+') cgiinput[i] = ' ' ;
/** First, split on "&" to extract the name-value pairs into pairlist **/
pairlist= (char **) malloc(256*sizeof(char **)) ;
paircount= 0 ;
nvpair= strtok(cgiinput, "&") ;
while (nvpair) {
pairlist[paircount++]= strdup(nvpair) ;
if (!(paircount%256))
pairlist= (char **) realloc(pairlist,(paircount+256)*sizeof(char **)) ;
nvpair= strtok(NULL, "&") ;
}
pairlist[paircount]= 0 ; /* terminate the list with NULL */
/** Then, from the list of pairs, extract the names and values **/
cgivars= (char **) malloc((paircount*2+1)*sizeof(char **)) ;
for (i= 0; i<paircount; i++) {
if (eqpos=strchr(pairlist[i], '=')) {
*eqpos= '\0' ;
unescape_url(cgivars[i*2+1]= strdup(eqpos+1)) ;
} else {
unescape_url(cgivars[i*2+1]= strdup("")) ;
}
unescape_url(cgivars[i*2]= strdup(pairlist[i])) ;
}
cgivars[paircount*2]= 0 ; /* terminate the list with NULL */
/** Free anything that needs to be freed **/
free(cgiinput) ;
for (i=0; pairlist[i]; i++) free(pairlist[i]) ;
free(pairlist) ;
/** Return the list of name-value strings **/
return cgivars ;
}
void print_head()
{
printf("Content-type: text/html\n\n") ;
//printf("<html>\n") ;
//printf("<head><title>CGI Results</title></head>\n") ;
//printf("<body>\n") ;
}
void print_tail()
{
printf("</body>\n") ;
printf("</html>\n") ;
}
struct user {
char loginname[9];
char uid[9];
char gid[9];
char comment[31];
char homedir[31];
char shell[31];
};




As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.