Back to index

courier  0.68.2
Functions
cgiinput.c File Reference
#include "cgi.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

Go to the source code of this file.

Functions

void cgi_output_unicode_escapes (const unicode_char *value, const char *escapes, void(*output_func)(const char *, size_t, void *), void *output_arg)
static void do_cgi_input (const char *name, const unicode_char *value, int size, int maxlength, const char *flags, void(*output_func)(const char *, size_t, void *), void *output_arg)
static void cnt_bytes (const char *str, size_t cnt, void *arg)
static void save_bytes (const char *str, size_t cnt, void *arg)
char * cgi_input (const char *name, const unicode_char *value, int size, int maxlength, const char *flags)

Function Documentation

char* cgi_input ( const char *  name,
const unicode_char value,
int  size,
int  maxlength,
const char *  flags 
)

Definition at line 130 of file cgiinput.c.

{
       size_t cnt=1;
       char *buf;
       char *ptr;

       if (!flags)
              flags="";

       do_cgi_input(name, value, size, maxlength, flags, cnt_bytes, &cnt);

       buf=malloc(cnt);

       if (!buf)
              return NULL;

       ptr=buf;
       do_cgi_input(name, value, size, maxlength, flags, save_bytes, &ptr);
       *ptr=0;
       return buf;
}

Here is the call graph for this function:

void cgi_output_unicode_escapes ( const unicode_char value,
const char *  escapes,
void(*)(const char *, size_t, void *)  output_func,
void *  output_arg 
)

Definition at line 15 of file cgiinput.c.

{
       while (value && *value)
       {
              size_t i;

              for (i=0; value[i]; i++)
              {
                     if (value[i] > 127 ||
                         strchr(escapes, value[i]))
                            break;
              }

              while (i)
              {
                     char buf[100];

                     size_t n=sizeof(buf);
                     size_t j;

                     if (n > i)
                            n=i;

                     for (j=0; j<n; j++)
                            buf[j]=value[j];

                     (*output_func)(buf, j, output_arg);

                     value += j;
                     i -= j;
              }

              if (*value)
              {
                     char buf[100];

                     sprintf(buf, "&#%lu;", (unsigned long)value[i]);

                     (*output_func)(buf, 0, output_arg);
                     ++value;
              }
       }
}

Here is the caller graph for this function:

static void cnt_bytes ( const char *  str,
size_t  cnt,
void *  arg 
) [static]

Definition at line 110 of file cgiinput.c.

{
       if (!cnt)
              cnt=strlen(str);

       *(size_t *)arg += cnt;
}

Here is the caller graph for this function:

static void do_cgi_input ( const char *  name,
const unicode_char value,
int  size,
int  maxlength,
const char *  flags,
void(*)(const char *, size_t, void *)  output_func,
void *  output_arg 
) [static]

Definition at line 64 of file cgiinput.c.

{
       (*output_func)("<input name='", 0, output_arg);
       (*output_func)(name, 0, output_arg);
       (*output_func)("'", 0, output_arg);

       if (strchr(flags, 'r'))
              (*output_func)(" readonly='readonly'", 0, output_arg);
       if (strchr(flags, 'd'))
              (*output_func)(" disabled='disabled'", 0, output_arg);

       (*output_func)("'", 0, output_arg);

       if (size)
       {
              char buf[100];

              sprintf(buf, " size=%d", size);

              (*output_func)(buf, 0, output_arg);
       }

       if (maxlength)
       {
              char buf[100];

              sprintf(buf, " maxlength=%d", maxlength);

              (*output_func)(buf, 0, output_arg);
       }

       (*output_func)(" value='", 0, output_arg);

       cgi_output_unicode_escapes(value, "<>'&", output_func, output_arg);

       (*output_func)("' />", 0, output_arg);
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void save_bytes ( const char *  str,
size_t  cnt,
void *  arg 
) [static]

Definition at line 118 of file cgiinput.c.

{
       char **p=(char **)arg;

       if (!cnt)
              cnt=strlen(str);

       memcpy(*p, str, cnt);

       *p += cnt;
}

Here is the caller graph for this function: