--- parser3/src/include/pa_common.h 2011/02/18 06:01:21 1.144 +++ parser3/src/include/pa_common.h 2013/03/09 23:34:07 1.149 @@ -1,14 +1,14 @@ /** @file Parser: commonly used functions. - Copyright (c) 2001-2009 ArtLebedev Group (http://www.artlebedev.com) + Copyright (c) 2001-2012 Art. Lebedev Studio (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) */ #ifndef PA_COMMON_H #define PA_COMMON_H -static const char * const IDENT_COMMON_H="$Date: 2011/02/18 06:01:21 $"; +#define IDENT_PA_COMMON_H "$Id: pa_common.h,v 1.149 2013/03/09 23:34:07 misha Exp $" #include "pa_string.h" #include "pa_hash.h" @@ -41,6 +41,8 @@ class Request; #define CONTENT_DISPOSITION_INLINE "inline" #define CONTENT_DISPOSITION_FILENAME_NAME "filename" +#define BASE64_STRICT_OPTION_NAME "strict" + const String http_content_type(HTTP_CONTENT_TYPE); const String content_transfer_encoding_name(CONTENT_TRANSFER_ENCODING_NAME); @@ -217,12 +219,12 @@ void file_write( delete specified file throws an exception in case of problems */ -bool file_delete(const String& file_spec, bool fail_on_problem=true); +bool file_delete(const String& file_spec, bool fail_on_problem=true, bool keep_empty_dirs=false); /** move specified file throws an exception in case of problems */ -void file_move(const String& old_spec, const String& new_spec); +void file_move(const String& old_spec, const String& new_spec, bool keep_empty_dirs=false); bool entry_exists(const char* fname, struct stat *afinfo=0); bool entry_exists(const String& file_spec); @@ -254,6 +256,8 @@ size_t stdout_write(const void *buf, siz 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); + #ifdef WIN32 void back_slashes_to_slashes(char *s); //void slashes_to_back_slashes(char *s); @@ -284,7 +288,7 @@ inline bool pa_isalnum(unsigned char c) void check_safe_mode(struct stat finfo, const String& file_spec, const char* fname); -void pa_base64_decode(const char *in, size_t in_size, char*& result, size_t& result_size); +void pa_base64_decode(const char *in, size_t in_size, char*& result, size_t& result_size, bool strict=false); char* pa_base64_encode(const char *in, size_t in_size); struct File_base64_action_info { unsigned char** base64; @@ -384,21 +388,6 @@ static String::C date_gmt_string(tm* tms tms->tm_hour,tms->tm_min,tms->tm_sec)); } -static int lastposafter(const String& s, size_t after, const char* substr, size_t substr_size, bool beforelast=false) { - size_t size=0; // just to calm down compiler - if(beforelast) - size=s.length(); - size_t at; - while((at=s.pos(String::Body(substr), after))!=STRING_NOT_FOUND) { - size_t newafter=at+substr_size/*skip substr*/; - if(beforelast && newafter==size) - break; - after=newafter; - } - - return after; -} - // globals extern const String file_status_name;