Главная страница


ru.unix.bsd

 
 - RU.UNIX.BSD ------------------------------------------------------------------
 From : Vadim Guchenko                       2:5020/400     25 Mar 2005  20:55:31
 To : Anton V. Yuzhaninov
 Subject : Re: FTP с перекодировкой
 -------------------------------------------------------------------------------- 
 
 Hello, Anton!
 You wrote to Vadim Guchenko on Sat, 19 Mar 2005 09:38:09 +0000 (UTC):
 
  VG>> Существуют ли какие-нибудь FTP сервера с возможностью перекодировки
  VG>> имен файлов?
  AVY> http://www.opennet.ru/base/patch/ftp_charset_recode.txt.html
 
 Сделал патч для перекодировки на лету имен файлов из koi8-r в cp1251 и
 обратно для pure-ftpd. Проблема с буквой "я" отсутствует. Может кому-нибудь
 понадобится.
 
 - --- src/dynamic.h.orig Mon Mar  1 04:49:28 2004
 +++ src/dynamic.h Thu Mar 24 22:59:54 2005
 @@ -16,3 +16,6 @@
  #endif
 
  #endif
 +
 +void win2koi(char *s);
 +void koi2win(char *s);
 - --- src/dynamic.c.orig Mon Mar  1 04:49:27 2004
 +++ src/dynamic.c Thu Mar 24 22:59:54 2005
 @@ -130,3 +130,40 @@
  #else
  extern signed char v6ready;
  #endif
 +
 +void win2koi(char *s) {
 +    char w2k[] =
 {128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
 +
 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
 +
 160,161,162,163,164,165,166,167,179,169,170,171,172,173,174,175,
 +
 176,177,178,179,180,181,182,183,163,191,186,187,188,189,190,191,
 +
 225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240,
 +
 242,243,244,245,230,232,227,254,251,253,255,249,248,252,224,241,
 +
 193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208,
 +
 210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209};
 +
 +    while (*s) {
 +        if (*s & 128) {
 +            *s = w2k[*s & 127];
 +        }
 +        s++;
 +    }
 +}
 +
 +void koi2win(char *s) {
 +    char k2w[] =
 {128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
 +
 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
 +
 160,161,162,184,164,165,166,167,168,169,170,171,172,173,174,175,
 +
 176,177,178,168,180,181,182,183,184,185,186,187,188,189,190,185,
 +
 254,224,225,246,228,229,244,227,245,232,233,234,235,236,237,238,
 +
 239,255,240,241,242,243,230,226,252,251,231,248,253,249,247,250,
 +
 222,192,193,214,196,197,212,195,213,200,201,202,203,204,205,206,
 +
 207,223,208,209,210,211,198,194,220,219,199,216,221,217,215,218};
 +
 +    while (*s) {
 +        if (*s & 128) {
 +            *s = k2w[*s & 127];
 +        }
 +        s++;
 +    }
 +}
 +
 - --- src/ftp_parser.c.orig Sun Jun  6 18:40:28 2004
 +++ src/ftp_parser.c Thu Mar 24 22:56:59 2005
 @@ -256,6 +256,7 @@
              goto nop;
          }
  #endif
 +        win2koi(arg);
          if (logging != 0) {
  #ifdef DEBUG
              logfile(LOG_DEBUG, MSG_DEBUG_COMMAND " [%s] [%s]",
 - --- src/ls.c.orig Mon Mar  1 04:49:27 2004
 +++ src/ls.c Thu Mar 24 22:56:35 2005
 @@ -17,6 +17,7 @@
      static char outbuf[CONF_TCP_SO_SNDBUF];
      static size_t outcnt;
      size_t l;
 +    char *s1;
 
      if (s == NULL) {
          if (outcnt > (size_t) 0U) {
 @@ -30,9 +31,18 @@
      if ((l = strlen(s)) <= (size_t) 0U) {
          return;
      }
 +
 +    if ((s1 = malloc(l + 1)) == NULL) {
 +        die_mem();
 +    }
 +    strcpy(s1, s);
 +    koi2win(s1);
 +    s = s1;
 +
      if (l <= (sizeof outbuf - outcnt)) {
          memcpy(outbuf + outcnt, s, l); /* secure, see above */
          outcnt += l;
 +        free(s1);
          return;
      }
      if (outcnt < sizeof outbuf) {
 @@ -43,10 +53,12 @@
          l -= rest;
      }
      if (safe_write(f, outbuf, sizeof outbuf) != 0) {
 +        free(s1);
          return;
      }
      while (l > sizeof outbuf) {
          if (safe_write(f, s, sizeof outbuf) != 0) {
 +            free(s1);
              return;
          }
          s += sizeof outbuf;
 @@ -56,6 +68,7 @@
          memcpy(outbuf, s, l);          /* safe, l <= sizeof outbuf */
          outcnt = l;
      }
 +    free(s1);
  }
 
  #ifdef NO_FTP_USERS
 - --- src/ftpd.c.orig Sat Jul 17 21:28:22 2004
 +++ src/ftpd.c Thu Mar 24 23:16:04 2005
 @@ -603,6 +603,7 @@
      CORK_ON(1);
      do {
          nextentry = scannedentry->next;
 +        koi2win(scannedentry->line);
  #ifdef WITH_TLS
          if (tls_cnx != NULL) {
              char buf[MAX_SERVER_REPLY_LEN];
 With best regards, Vadim Guchenko.  E-mail: s0lver@kraslan.ru
 
 --- ifmail v.2.15dev5.3
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 FTP с перекодировкой   Vadim Guchenko   19 Mar 2005 11:59:40 
 Re: FTP с перекодировкой   Anton V. Yuzhaninov   19 Mar 2005 13:38:09 
 Re: FTP с перекодировкой   Golyashov Sergey   20 Mar 2005 05:39:23 
 Re: FTP с перекодировкой   Golyashov Sergey   20 Mar 2005 05:43:57 
 Re: FTP с перекодировкой   Vadim Guchenko   25 Mar 2005 20:55:31 
 Re: FTP с перекодировкой   Igorx Ivanov   03 Apr 2005 20:28:57 
 Re: FTP с перекодировкой   Vadim Guchenko   06 Apr 2005 15:45:13 
Архивное /ru.unix.bsd/9179802b76df.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional