Diff for /libaitwww/src/aitwww.c between versions 1.4 and 1.5

version 1.4, 2012/08/01 00:40:41 version 1.5, 2013/05/30 09:25:35
Line 12  terms: Line 12  terms:
 All of the documentation and software included in the ELWIX and AITNET  All of the documentation and software included in the ELWIX and AITNET
 Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>  Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
   
Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
         by Michael Pounov <misho@elwix.org>.  All rights reserved.          by Michael Pounov <misho@elwix.org>.  All rights reserved.
   
 Redistribution and use in source and binary forms, with or without  Redistribution and use in source and binary forms, with or without
Line 55  char www_Error[STRSIZ]; Line 55  char www_Error[STRSIZ];
 #pragma GCC visibility pop  #pragma GCC visibility pop
   
 // www_GetErrno() Get error code of last operation  // www_GetErrno() Get error code of last operation
inline intint
 www_GetErrno()  www_GetErrno()
 {  {
         return www_Errno;          return www_Errno;
 }  }
   
 // www_GetError() Get error text of last operation  // www_GetError() Get error text of last operation
inline const char *const char *
 www_GetError()  www_GetError()
 {  {
         return www_Error;          return www_Error;
 }  }
   
 // www_SetErr() Set error to variables for internal use!!!  // www_SetErr() Set error to variables for internal use!!!
inline voidvoid
 www_SetErr(int eno, char *estr, ...)  www_SetErr(int eno, char *estr, ...)
 {  {
         va_list lst;          va_list lst;
Line 130  www_initCGI(void) Line 130  www_initCGI(void)
                 }                  }
   
                 /* allocated space for post data */                  /* allocated space for post data */
                str = io_malloc(ctlen + 1);                str = e_malloc(ctlen + 1);
                 if (!str) {                  if (!str) {
                        www_SetErr(io_GetErrno(), "%s", io_GetError());                        www_SetErr(elwix_GetErrno(), "%s", elwix_GetError());
                         return NULL;                          return NULL;
                 } else                  } else
                         memset(str, 0, ctlen + 1);                          memset(str, 0, ctlen + 1);
Line 145  www_initCGI(void) Line 145  www_initCGI(void)
                 else if (!www_cmp(s, "multipart/form-data"))                  else if (!www_cmp(s, "multipart/form-data"))
                         cgi = www_parseMultiPart(str, ctlen, s);                          cgi = www_parseMultiPart(str, ctlen, s);
   
                io_free(str);                e_free(str);
         } else {          } else {
                 /* Unknown method */                  /* Unknown method */
                 www_SetErr(EFAULT, "Unknown request method");                  www_SetErr(EFAULT, "Unknown request method");
Line 170  www_closeCGI(cgi_t ** __restrict cgi) Line 170  www_closeCGI(cgi_t ** __restrict cgi)
                 return;                  return;
   
         while ((t = SLIST_FIRST(*cgi))) {          while ((t = SLIST_FIRST(*cgi))) {
                io_freeVar(&t->cgi_name);                ait_freeVar(&t->cgi_name);
                io_freeVar(&t->cgi_value);                ait_freeVar(&t->cgi_value);
   
                 SLIST_REMOVE_HEAD(*cgi, cgi_node);                  SLIST_REMOVE_HEAD(*cgi, cgi_node);
                io_free(t);                e_free(t);
         }          }
   
        io_free(*cgi);        e_free(*cgi);
         *cgi = NULL;          *cgi = NULL;
 }  }
   
Line 199  www_parseQuery(const char *str) Line 199  www_parseQuery(const char *str)
                 return NULL;                  return NULL;
         }          }
   
        cgi = io_malloc(sizeof(cgi_t));        cgi = e_malloc(sizeof(cgi_t));
         if (!cgi) {          if (!cgi) {
                www_SetErr(io_GetErrno(), "%s", io_GetError());                www_SetErr(elwix_GetErrno(), "%s", elwix_GetError());
                 return NULL;                  return NULL;
         } else {          } else {
                 memset(cgi, 0, sizeof(cgi_t));                  memset(cgi, 0, sizeof(cgi_t));
                 SLIST_INIT(cgi);                  SLIST_INIT(cgi);
         }          }
   
        base = wrk = io_strdup(str);        base = wrk = e_strdup(str);
   
         while (*wrk) {          while (*wrk) {
                t = io_malloc(sizeof(struct tagCGI));                t = e_malloc(sizeof(struct tagCGI));
                 if (!t) {                  if (!t) {
                        www_SetErr(io_GetErrno(), "%s", io_GetError());                        www_SetErr(elwix_GetErrno(), "%s", elwix_GetError());
                         www_closeCGI(&cgi);                          www_closeCGI(&cgi);
                         return NULL;                          return NULL;
                 } else                  } else
Line 232  www_parseQuery(const char *str) Line 232  www_parseQuery(const char *str)
                 old = t;                  old = t;
         }          }
   
        io_free(base);        e_free(base);
         return cgi;          return cgi;
 }  }
   
Line 243  www_parseQuery(const char *str) Line 243  www_parseQuery(const char *str)
  * @name = Name of cgi variable   * @name = Name of cgi variable
  * return: NULL not found or !=NULL value   * return: NULL not found or !=NULL value
  */   */
inline const char *const char *
 www_getValue(cgi_t * __restrict cgi, const char *name)  www_getValue(cgi_t * __restrict cgi, const char *name)
 {  {
         struct tagCGI *t;          struct tagCGI *t;
Line 292  www_addValue(cgi_t * __restrict cgi, const char *name, Line 292  www_addValue(cgi_t * __restrict cgi, const char *name,
         }          }
   
         /* add new one */          /* add new one */
        tmp = io_malloc(sizeof(struct tagCGI));        tmp = e_malloc(sizeof(struct tagCGI));
         if (!tmp) {          if (!tmp) {
                www_SetErr(io_GetErrno(), "%s", io_GetError());                www_SetErr(elwix_GetErrno(), "%s", elwix_GetError());
                 return -1;                  return -1;
         } else          } else
                 memset(tmp, 0, sizeof(struct tagCGI));                  memset(tmp, 0, sizeof(struct tagCGI));
   
        tmp->cgi_name = io_allocVar();        tmp->cgi_name = ait_allocVar();
         if (!tmp->cgi_name) {          if (!tmp->cgi_name) {
                www_SetErr(io_GetErrno(), "%s", io_GetError());                www_SetErr(elwix_GetErrno(), "%s", elwix_GetError());
                io_free(tmp);                e_free(tmp);
                 return -1;                  return -1;
         } else          } else
                 AIT_SET_STR(tmp->cgi_name, name);                  AIT_SET_STR(tmp->cgi_name, name);
        tmp->cgi_value = io_allocVar();        tmp->cgi_value = ait_allocVar();
         if (!tmp->cgi_name) {          if (!tmp->cgi_name) {
                www_SetErr(io_GetErrno(), "%s", io_GetError());                www_SetErr(elwix_GetErrno(), "%s", elwix_GetError());
                io_freeVar(&tmp->cgi_name);                ait_freeVar(&tmp->cgi_name);
                io_free(tmp);                e_free(tmp);
                 return -1;                  return -1;
         } else          } else
                 AIT_SET_STR(tmp->cgi_value, value);                  AIT_SET_STR(tmp->cgi_value, value);
Line 344  www_delPair(cgi_t * __restrict cgi, const char *name) Line 344  www_delPair(cgi_t * __restrict cgi, const char *name)
                 if (t->cgi_name && !strcmp(name, AIT_GET_STR(t->cgi_name))) {                  if (t->cgi_name && !strcmp(name, AIT_GET_STR(t->cgi_name))) {
                         SLIST_REMOVE(cgi, t, tagCGI, cgi_node);                          SLIST_REMOVE(cgi, t, tagCGI, cgi_node);
   
                        io_freeVar(&t->cgi_name);                        ait_freeVar(&t->cgi_name);
                        io_freeVar(&t->cgi_value);                        ait_freeVar(&t->cgi_value);
                        io_free(t);                        e_free(t);
                         return 1;                          return 1;
                 }                  }
   
Line 361  www_delPair(cgi_t * __restrict cgi, const char *name) Line 361  www_delPair(cgi_t * __restrict cgi, const char *name)
  * @arg = Optional argument pass through callback   * @arg = Optional argument pass through callback
  * return: -1 error or >-1 number of elements   * return: -1 error or >-1 number of elements
  */   */
inline intint
 www_listPairs(cgi_t * __restrict cgi, list_cb_t func, void *arg)  www_listPairs(cgi_t * __restrict cgi, list_cb_t func, void *arg)
 {  {
         register int ret = 0;          register int ret = 0;
Line 388  www_listPairs(cgi_t * __restrict cgi, list_cb_t func,  Line 388  www_listPairs(cgi_t * __restrict cgi, list_cb_t func, 
  * @output = file handle   * @output = file handle
  * return: <1 error or >0 writed bytes   * return: <1 error or >0 writed bytes
  */   */
inline intint
 www_header(FILE *output)  www_header(FILE *output)
 {  {
         FILE *f = output ? output : stdout;          FILE *f = output ? output : stdout;
Line 408  quotStr(const char *str, const char **end) Line 408  quotStr(const char *str, const char **end)
         if (*str != '"') {          if (*str != '"') {
                 n = strspn(str, "!#$%&'*+-.0123456789?ABCDEFGHIJKLMNOPQRSTUVWXYZ"                  n = strspn(str, "!#$%&'*+-.0123456789?ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                                 "^_`abcdefghijklmnopqrstuvwxyz{|}~");                                  "^_`abcdefghijklmnopqrstuvwxyz{|}~");
                s = io_allocVar();                s = ait_allocVar();
                 if (!s) {                  if (!s) {
                        www_SetErr(io_GetErrno(), "%s", io_GetError());                        www_SetErr(elwix_GetErrno(), "%s", elwix_GetError());
                         return NULL;                          return NULL;
                 } else {                  } else {
                         AIT_SET_STRSIZ(s, n + 1);                          AIT_SET_STRSIZ(s, n + 1);
Line 426  quotStr(const char *str, const char **end) Line 426  quotStr(const char *str, const char **end)
         else          else
                 len = e - str;                  len = e - str;
   
        s = io_allocVar();        s = ait_allocVar();
         if (!s) {          if (!s) {
                www_SetErr(io_GetErrno(), "%s", io_GetError());                www_SetErr(elwix_GetErrno(), "%s", elwix_GetError());
                 return NULL;                  return NULL;
         } else {          } else {
                 AIT_SET_STRSIZ(s, len + 1);                  AIT_SET_STRSIZ(s, len + 1);
Line 466  addAttr(const char **ct) Line 466  addAttr(const char **ct)
         if (!(eq = strchr(c, '=')))          if (!(eq = strchr(c, '=')))
                 return NULL;                  return NULL;
   
        a = io_malloc(sizeof(struct tagCGI));        a = e_malloc(sizeof(struct tagCGI));
         if (!a) {          if (!a) {
                www_SetErr(io_GetErrno(), "%s", io_GetError());                www_SetErr(elwix_GetErrno(), "%s", elwix_GetError());
                 return NULL;                  return NULL;
         }          }
        a->cgi_name = io_allocVar();        a->cgi_name = ait_allocVar();
         if (!a->cgi_name) {          if (!a->cgi_name) {
                www_SetErr(io_GetErrno(), "%s", io_GetError());                www_SetErr(elwix_GetErrno(), "%s", elwix_GetError());
                io_free(a);                e_free(a);
                 return NULL;                  return NULL;
         }          }
   
Line 482  addAttr(const char **ct) Line 482  addAttr(const char **ct)
         AIT_SET_STR(a->cgi_name, c);          AIT_SET_STR(a->cgi_name, c);
         a->cgi_value = quotStr(eq, &c);          a->cgi_value = quotStr(eq, &c);
         if (!a->cgi_value) {          if (!a->cgi_value) {
                io_freeVar(&a->cgi_name);                ait_freeVar(&a->cgi_name);
                io_free(a);                e_free(a);
                 return NULL;                  return NULL;
         }          }
   
Line 515  www_parseMultiPart(const char *str, int ctlen, const c Line 515  www_parseMultiPart(const char *str, int ctlen, const c
                 return NULL;                  return NULL;
         }          }
   
        cgi = io_malloc(sizeof(cgi_t));        cgi = e_malloc(sizeof(cgi_t));
         if (!cgi) {          if (!cgi) {
                www_SetErr(io_GetErrno(), "%s", io_GetError());                www_SetErr(elwix_GetErrno(), "%s", elwix_GetError());
                 return NULL;                  return NULL;
         } else {          } else {
                 memset(cgi, 0, sizeof(cgi_t));                  memset(cgi, 0, sizeof(cgi_t));
Line 546  www_parseMultiPart(const char *str, int ctlen, const c Line 546  www_parseMultiPart(const char *str, int ctlen, const c
                         continue;                          continue;
                 }                  }
   
                t = io_malloc(sizeof(struct tagCGI));                t = e_malloc(sizeof(struct tagCGI));
                 if (!t) {                  if (!t) {
                        www_SetErr(io_GetErrno(), "%s", io_GetError());                        www_SetErr(elwix_GetErrno(), "%s", elwix_GetError());
                         mime_close(&mime);                          mime_close(&mime);
                         www_closeCGI(&cgi);                          www_closeCGI(&cgi);
                         return NULL;                          return NULL;
Line 557  www_parseMultiPart(const char *str, int ctlen, const c Line 557  www_parseMultiPart(const char *str, int ctlen, const c
   
                 AIT_COPY_VAL(t->cgi_name, www_getAttribute(attr, "name"));                  AIT_COPY_VAL(t->cgi_name, www_getAttribute(attr, "name"));
                 len = mime_calcRawSize(m);                  len = mime_calcRawSize(m);
                t->cgi_value = io_allocVar();                t->cgi_value = ait_allocVar();
                 if (!t->cgi_value) {                  if (!t->cgi_value) {
                        www_SetErr(io_GetErrno(), "%s", io_GetError());                        www_SetErr(elwix_GetErrno(), "%s", elwix_GetError());
                        io_freeVar(&t->cgi_name);                        ait_freeVar(&t->cgi_name);
                        io_free(t);                        e_free(t);
                         mime_close(&mime);                          mime_close(&mime);
                         www_closeCGI(&cgi);                          www_closeCGI(&cgi);
                         return NULL;                          return NULL;
Line 589  www_parseMultiPart(const char *str, int ctlen, const c Line 589  www_parseMultiPart(const char *str, int ctlen, const c
  * @ct = Content type   * @ct = Content type
  * return: NULL error or !=NULL attributes   * return: NULL error or !=NULL attributes
  */   */
inline cgi_t *cgi_t *
 www_parseAttributes(const char **ct)  www_parseAttributes(const char **ct)
 {  {
         struct tagCGI *t, *old = NULL;          struct tagCGI *t, *old = NULL;
Line 600  www_parseAttributes(const char **ct) Line 600  www_parseAttributes(const char **ct)
                 return NULL;                  return NULL;
         }          }
   
        attr = io_malloc(sizeof(cgi_t));        attr = e_malloc(sizeof(cgi_t));
         if (!attr) {          if (!attr) {
                www_SetErr(io_GetErrno(), "%s", io_GetError());                www_SetErr(elwix_GetErrno(), "%s", elwix_GetError());
                 return NULL;                  return NULL;
         } else {          } else {
                 memset(attr, 0, sizeof(cgi_t));                  memset(attr, 0, sizeof(cgi_t));
Line 628  www_parseAttributes(const char **ct) Line 628  www_parseAttributes(const char **ct)
  * @name = Name of attribute variable   * @name = Name of attribute variable
  * return: NULL not found or !=NULL value   * return: NULL not found or !=NULL value
  */   */
inline ait_val_t *ait_val_t *
 www_getAttribute(cgi_t * __restrict cgi, const char *name)  www_getAttribute(cgi_t * __restrict cgi, const char *name)
 {  {
         struct tagCGI *t;          struct tagCGI *t;

Removed from v.1.4  
changed lines
  Added in v.1.5


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>