Diff for /parser3/src/main/pa_uue.C between versions 1.5 and 1.12

version 1.5, 2003/07/24 11:31:24 version 1.12, 2009/09/27 22:07:58
Line 1 Line 1
 /** @file  /** @file
         Parser: uuencoding impl.          Parser: uuencoding impl.
   
         Copyright(c) 2000,2001-2003 ArtLebedev Group(http://www.artlebedev.com)          Copyright(c) 2000-2009 ArtLebedev Group(http://www.artlebedev.com)
         Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)          Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
   
         @todo setrlimit          @todo setrlimit
 */  */
   
 static const char* IDENT_UUE_C="$Date$";  static const char * const IDENT_UUE_C="$Date$";
   
 #include "pa_config_includes.h"  #include "pa_config_includes.h"
   
Line 23  static unsigned char uue_table[64] = { Line 23  static unsigned char uue_table[64] = {
   'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',    'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
   'X', 'Y', 'Z', '[', '\\',']', '^', '_'    'X', 'Y', 'Z', '[', '\\',']', '^', '_'
 };  };
 void pa_uuencode(String& result, const String& file_name, const VFile& vfile) {  
         //header  
         result << "content-transfer-encoding: x-uuencode\n" << "\n";  
         result << "begin 644 " << file_name << "\n";  
   
         //body  const char* pa_uuencode(const String& file_name, const VFile& vfile) {
         const unsigned char *in=(const unsigned char *)vfile.value_ptr();          const unsigned char *in=(const unsigned char *)vfile.value_ptr();
         size_t in_length=vfile.value_size();          size_t in_length=vfile.value_size();
   
           const char* file_name_cstr = file_name.cstr();
   
           size_t new_size=((in_length / 3 + 1) * 4);
           new_size += 2 * new_size / 60/*chars in line + new lines*/;
           new_size += strlen(file_name_cstr) + 11/*header*/ + 6/*footer*/ + 1/*zero terminator*/;
   
           const char* result=new(PointerFreeGC) char[new_size];
           char* optr=(char*)result;
   
           //header
           optr += sprintf(optr, "begin 644 %s\n", file_name_cstr);
   
           //body
         int count=45;          int count=45;
         for(const unsigned char *itemp=in; itemp<(in+in_length); itemp+=count) {          for(const unsigned char *itemp=in; itemp<(in+in_length); itemp+=count) {
                 int index;                        int index;      
Line 39  void pa_uuencode(String& result, const S Line 48  void pa_uuencode(String& result, const S
                 if((itemp+count)>(in+in_length))                   if((itemp+count)>(in+in_length)) 
                         count=in_length-(itemp-in);                          count=in_length-(itemp-in);
   
                 char *buf=new(PointerFreeGC) char[MAX_STRING];  
                 char *optr=buf;  
                   
                 /*                  /*
                 * for UU and XX, encode the number of bytes as first character                  * for UU and XX, encode the number of bytes as first character
                 */                  */
Line 76  void pa_uuencode(String& result, const S Line 82  void pa_uuencode(String& result, const S
                 * end of line                  * end of line
                 */                  */
                 *optr++ = '\n';                   *optr++ = '\n'; 
                 *optr = 0;  
                 result << buf;  
         }          }
                   
         //footer          //footer
         result.append_know_length((const char* )uue_table, 1/* one char */, String::L_AS_IS) << "\n"          optr += sprintf(optr, "`\nend\n");
                 "end\n";  
 }          *optr = 0;
   
           //throw Exception(PARSER_RUNTIME, 0, "%d %d %d", in_length, new_size, (size_t)(optr-result));
           assert((size_t)(optr-result) < new_size);
   
           return result;
   }
   

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


E-mail: