Diff for /parser3/src/include/pa_common.h between versions 1.156 and 1.172

version 1.156, 2015/01/12 12:22:02 version 1.172, 2017/01/23 09:33:02
Line 1 Line 1
 /** @file  /** @file
         Parser: commonly used functions.          Parser: commonly used functions.
   
         Copyright (c) 2001-2012 Art. Lebedev Studio (http://www.artlebedev.com)          Copyright (c) 2001-2015 Art. Lebedev Studio (http://www.artlebedev.com)
         Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)          Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
 */  */
   
Line 16 Line 16
 class Request;  class Request;
   
 // defines  // defines
 #define HTTP_USER_AGENT "user-agent"  #define HTTP_STATUS             "status"
   
 #define HTTP_STATUS     "status"  
 #define HTTP_STATUS_CAPITALIZED "Status"  #define HTTP_STATUS_CAPITALIZED "Status"
   
 #define HTTP_CONTENT_LENGTH     "content-length"  #define HTTP_CONTENT_LENGTH             "content-length"
 #define HTTP_CONTENT_LENGTH_CAPITALIZED "Content-Length"  #define HTTP_CONTENT_LENGTH_CAPITALIZED "Content-Length"
   
 #define HTTP_CONTENT_TYPE       "content-type"  #define HTTP_CONTENT_TYPE               "content-type"
 #define HTTP_CONTENT_TYPE_UPPER "CONTENT-TYPE"  #define HTTP_CONTENT_TYPE_UPPER         "CONTENT-TYPE"
 #define HTTP_CONTENT_TYPE_CAPITALIZED   "Content-Type"  #define HTTP_CONTENT_TYPE_CAPITALIZED   "Content-Type"
   
   #define CONTENT_DISPOSITION             "content-disposition"
   #define CONTENT_DISPOSITION_UPPER       "CONTENT-DISPOSITION"
   #define CONTENT_DISPOSITION_CAPITALIZED "Content-Disposition"
   
   #define CONTENT_DISPOSITION_ATTACHMENT  "attachment"
   #define CONTENT_DISPOSITION_INLINE      "inline"
   #define CONTENT_DISPOSITION_FILENAME_NAME "filename"
   
 #define HTTP_CONTENT_TYPE_FORM_URLENCODED       "application/x-www-form-urlencoded"  #define HTTP_CONTENT_TYPE_FORM_URLENCODED       "application/x-www-form-urlencoded"
 #define HTTP_CONTENT_TYPE_MULTIPART_FORMDATA    "multipart/form-data"  #define HTTP_CONTENT_TYPE_MULTIPART_FORMDATA    "multipart/form-data"
 #define HTTP_CONTENT_TYPE_MULTIPART_RELATED     "multipart/related"  #define HTTP_CONTENT_TYPE_MULTIPART_RELATED     "multipart/related"
 #define HTTP_CONTENT_TYPE_MULTIPART_MIXED       "multipart/mixed"  #define HTTP_CONTENT_TYPE_MULTIPART_MIXED       "multipart/mixed"
   
 #define CONTENT_TRANSFER_ENCODING_NAME "content-transfer-encoding"  
 #define CONTENT_TRANSFER_ENCODING_CAPITALIZED "Content-Transfer-Encoding"  
   
 #define CONTENT_DISPOSITION     "content-disposition"  
 #define CONTENT_DISPOSITION_CAPITALIZED "Content-Disposition"  
 #define CONTENT_DISPOSITION_ATTACHMENT "attachment"  
 #define CONTENT_DISPOSITION_INLINE "inline"  
 #define CONTENT_DISPOSITION_FILENAME_NAME "filename"  
   
 #define BASE64_STRICT_OPTION_NAME "strict"  #define BASE64_STRICT_OPTION_NAME "strict"
   
 const String http_content_type(HTTP_CONTENT_TYPE);  
   
 const String content_transfer_encoding_name(CONTENT_TRANSFER_ENCODING_NAME);  
   
 const String content_disposition(CONTENT_DISPOSITION);  
 const String content_disposition_inline(CONTENT_DISPOSITION_INLINE);  
 const String content_disposition_attachment(CONTENT_DISPOSITION_ATTACHMENT);  
 const String content_disposition_filename_name(CONTENT_DISPOSITION_FILENAME_NAME);  const String content_disposition_filename_name(CONTENT_DISPOSITION_FILENAME_NAME);
   
   
 #define HASH_ORDER  #define HASH_ORDER
   
 #ifdef HASH_ORDER  #ifdef HASH_ORDER
Line 65  typedef HASH_STRING<Value*> HashStringVa Line 55  typedef HASH_STRING<Value*> HashStringVa
   
 // replace system s*nprintf with our versions  // replace system s*nprintf with our versions
 #undef vsnprintf   #undef vsnprintf 
 int __vsnprintf(char *, size_t, const char* , va_list);  int pa_vsnprintf(char *, size_t, const char* , va_list);
 #define vsnprintf __vsnprintf   #define vsnprintf pa_vsnprintf 
 #undef snprintf  #undef snprintf
 int __snprintf(char *, size_t, const char* , ...);  int pa_snprintf(char *, size_t, const char* , ...);
 #define snprintf __snprintf  #define snprintf pa_snprintf
   
 #ifdef _MSC_VER  #ifdef _MSC_VER
   
Line 83  int __snprintf(char *, size_t, const cha Line 73  int __snprintf(char *, size_t, const cha
 #       define strcasecmp _stricmp  #       define strcasecmp _stricmp
 #endif  #endif
   
   #ifndef strncasecmp
   #       define strncasecmp _strnicmp
   #endif
   
   #define stat __stat64
   #define pa_stat _stat64
   #define pa_fstat _fstat64
   
   #else
   
   #define pa_stat stat
   #define pa_fstat fstat
   
 #endif  #endif
   
 /**   /** 
Line 100  void create_dir_for_file(const String& f Line 103  void create_dir_for_file(const String& f
   
 int pa_get_valid_file_options_count(HashStringValue& options);  int pa_get_valid_file_options_count(HashStringValue& options);
   
 typedef void (*File_read_action)(  typedef void (*File_read_action)(struct stat& finfo, int f, const String& file_spec, void *context);
                                 struct stat& finfo,  
                                 int f,   
                                 const String& file_spec, const char* fname, bool as_text,  
                                 void *context);  
   
 /**  /**
         shared-lock specified file,           shared-lock specified file, 
Line 213  bool dir_exists(const String& file_spec) Line 212  bool dir_exists(const String& file_spec)
 const String* file_exist(const String& path, const String& name);  const String* file_exist(const String& path, const String& name);
 bool file_executable(const String& file_spec);  bool file_executable(const String& file_spec);
   
 bool file_stat(const String& file_spec,   bool file_stat(const String& file_spec, uint64_t& rsize, time_t& ratime, time_t& rmtime, time_t& rctime, bool fail_on_read_problem=true);
                                 size_t& rsize,   size_t check_file_size(uint64_t size, const String& file_spec);
                                 time_t& ratime,  
                                 time_t& rmtime,  
                                 time_t& rctime,  
                                 bool fail_on_read_problem=true);  
   
 size_t stdout_write(const void *buf, size_t size);  size_t stdout_write(const void *buf, size_t size);
   
Line 230  int file_block_read(const int f, unsigne Line 225  int file_block_read(const int f, unsigne
         String related functions          String related functions
 */  */
   
 const char* capitalize(const char* s);  
   
 /** under WIN32 "t" mode fixes DOS chars OK,   /** under WIN32 "t" mode fixes DOS chars OK, 
         can't say that about other systems/ line break styles          can't say that about other systems/ line break styles
 */  */
Line 241  char *getrow(char **row_ref,char delim=' Line 234  char *getrow(char **row_ref,char delim='
 char *lsplit(char *string, char delim);  char *lsplit(char *string, char delim);
 char *lsplit(char **string_ref,char delim);  char *lsplit(char **string_ref,char delim);
 char *rsplit(char *string, char delim);  char *rsplit(char *string, char delim);
   
 const char* format(double value, const char *fmt);  const char* format(double value, const char *fmt);
   
 char* unescape_chars(const char* cp, int len, Charset* client_charset=0, bool js=false/*true==decode \uXXXX and don't convert '+' to space*/);  char* unescape_chars(const char* cp, int len, Charset* client_charset=0, bool js=false/*true==decode \uXXXX and don't convert '+' to space*/);
   
 char *search_stop(char*& current, char cstop_at);  char *search_stop(char*& current, char cstop_at);
   
   inline int pa_strncasecmp(const char* str, const char* substr, size_t count=0) {
           return strncasecmp(str, substr, count ? count : strlen(substr));
   }
   
 #ifdef WIN32  #ifdef WIN32
 void back_slashes_to_slashes(char *s);  void back_slashes_to_slashes(char *s);
 #endif  #endif
   
 bool StrStartFromNC(const char* str, const char* substr);  
 size_t strpos(const char *str, const char *substr);  size_t strpos(const char *str, const char *substr);
   
 int remove_crlf(char *start, char *end);  int remove_crlf(char *start, char *end);
   
 inline bool pa_isalpha(unsigned char c) {  inline bool pa_isalpha(unsigned char c) { return (((c>='A') && (c<='Z')) || ((c>='a') && (c<='z'))); }
         return (((c>='A') && (c<='Z')) || ((c>='a') && (c<='z')));  inline bool pa_isalnum(unsigned char c) { return (((c>='0') && (c<='9')) || pa_isalpha(c)); }
 }  
   
 inline bool pa_isalnum(unsigned char c) {  const char* capitalize(const char* s);
         return (((c>='0') && (c<='9')) || pa_isalpha(c));  char *str_lower(const char *s, size_t helper_length=0);
 }  char *str_upper(const char *s, size_t helper_length=0);
   
 const char* hex_string(unsigned char* bytes, size_t size, bool upcase);  const char* hex_string(unsigned char* bytes, size_t size, bool upcase);
 extern const char* hex_digits;  extern const char* hex_digits;
Line 271  void pa_base64_decode(const char *in, si Line 267  void pa_base64_decode(const char *in, si
 char* pa_base64_encode(const char *in, size_t in_size);  char* pa_base64_encode(const char *in, size_t in_size);
 char* pa_base64_encode(const String& file_spec);  char* pa_base64_encode(const String& file_spec);
   
 const unsigned long pa_crc32(const char *in, size_t in_size);  const char *pa_idna_encode(const char *in, Charset &source);
 const unsigned long pa_crc32(const String& file_spec);  const char *pa_idna_decode(const char *in, Charset &source);
   
   unsigned long pa_crc32(const char *in, size_t in_size);
   unsigned long pa_crc32(const String& file_spec);
   
 /**   /** 
         Mix functions          Mix functions
 */  */
   
 // some stuff for use with .for_each  #define PA_DEFAULT(A,B) ((A) ? (A):(B) )
 static void copy_all_overwrite_to(  
                                                                 HashStringValue::key_type key,   
                                                                 HashStringValue::value_type value,   
                                                                 HashStringValue* dest) {  
         dest->put(key, value);  
 }  
   
 static void remove_key_from(  
                                                         HashStringValue::key_type key,   
                                                         HashStringValue::value_type /*value*/,   
                                                         HashStringValue* dest) {  
         dest->remove(key);  
 }  
   
 Charset* detect_charset(const char* content_type);  Charset* detect_charset(const char* content_type);
   
 #define SECS_PER_DAY (60*60*24)  
   
 int getMonthDays(int year, int month);  
   
 String::C date_gmt_string(tm* tms);  
   
 // globals  // globals
   
 extern const String file_status_name;  extern const String file_status_name;
Line 323  extern const String file_status_name; Line 303  extern const String file_status_name;
   
 #ifndef DOXYGEN  #ifndef DOXYGEN
 enum Table2hash_distint { D_ILLEGAL, D_FIRST };  enum Table2hash_distint { D_ILLEGAL, D_FIRST };
 enum Table2hash_value_type { C_HASH, C_STRING, C_TABLE };  enum Table2hash_value_type { C_HASH, C_STRING, C_TABLE, C_CODE };
 #endif  #endif
   
 #endif  #endif

Removed from v.1.156  
changed lines
  Added in v.1.172


E-mail: