|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/9179802b76df.html, оценка из 5, голосов 10
|