mirror of
git://git.gnupg.org/gnupg.git
synced 2024-12-31 11:41:32 +01:00
* dynload.h: Always use it for _WIN32.
* LINGUAS: Better don't have comments in this file. * mk-w32-dist: Use utf-8 encoding for all MO files. * simple-gettext.c: Removed windows.h. (get_string): On the fly translation from utf-8 to active character set. * strgutil.c (load_libiconv) [_WIN32]: new. (set_native_charset) [_WIN32]: Call it here and autodetect the used code page. (native_to_utf8, utf8_to_native): Reverted arguments for iconv_open. (handle_iconv_error): Made this function match iconv_open argumnet ordering. (utf8_to_native): Disable all quoting for DELIM == -1.
This commit is contained in:
parent
ea62673cdc
commit
e216c20f40
@ -1,3 +1,7 @@
|
||||
2004-10-27 Werner Koch <wk@g10code.com>
|
||||
|
||||
* dynload.h: Always use it for _WIN32.
|
||||
|
||||
2004-10-21 Werner Koch <wk@g10code.com>
|
||||
|
||||
* util.h [!HAVE_VASPRINTF]: Removed prototype.
|
||||
|
@ -20,7 +20,7 @@
|
||||
|
||||
#ifndef GNUPG_DYNLOAD_H
|
||||
#define GNUPG_DYNLOAD_H
|
||||
#ifdef ENABLE_CARD_SUPPORT
|
||||
#if defined (ENABLE_CARD_SUPPORT) || defined(_WIN32)
|
||||
#ifndef _WIN32
|
||||
#include <dlfcn.h>
|
||||
#else
|
||||
@ -68,6 +68,6 @@ dlclose (void * hd)
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
#endif /*__MINGW32__*/
|
||||
#endif /*ENABLE_CARD_SUPPORT*/
|
||||
#endif /*_WIN32*/
|
||||
#endif /*ENABLE_CARD_SUPPORT||_WIN32*/
|
||||
#endif /*GNUPG_DYNLOAD_H*/
|
||||
|
@ -1,3 +1,7 @@
|
||||
2004-10-27 Werner Koch <wk@g10code.com>
|
||||
|
||||
* LINGUAS: Better don't have comments in this file.
|
||||
|
||||
2004-10-15 Werner Koch <wk@g10code.com>
|
||||
|
||||
* POTFILES.in: Updated.
|
||||
|
@ -1,4 +1,3 @@
|
||||
# Set of available languages.
|
||||
en@quot en@boldquot
|
||||
be
|
||||
ca cs
|
||||
|
379
po/pt_BR.po
379
po/pt_BR.po
File diff suppressed because it is too large
Load Diff
379
po/zh_CN.po
379
po/zh_CN.po
File diff suppressed because it is too large
Load Diff
379
po/zh_TW.po
379
po/zh_TW.po
File diff suppressed because it is too large
Load Diff
@ -1,3 +1,7 @@
|
||||
2004-10-27 Werner Koch <wk@g10code.com>
|
||||
|
||||
* mk-w32-dist: Use utf-8 encoding for all MO files.
|
||||
|
||||
2004-10-26 Werner Koch <wk@g10code.com>
|
||||
|
||||
* autogen.sh: Detect the Debian mingw32 package.
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2000, 2001, 2002, 2004 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; as a special exception the author gives
|
||||
# unlimited permission to copy and/or distribute it, with or without
|
||||
@ -31,21 +31,28 @@ else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
version=$(sed -n 's/^#[ ]*define[ ][ ]*VERSION[ ][ ]*\"\([0-9.]*\)\"/\1/p' $bindir/config.h)
|
||||
if i586-mingw32msvc-strip --version >/dev/null 2>&1 ; then
|
||||
STRIP=i586-mingw32msvc-strip
|
||||
else
|
||||
STRIP="mingw32 strip"
|
||||
fi
|
||||
|
||||
|
||||
version=$(sed -n 's/^#[ ]*define[ ][ ]*VERSION[ ][ ]*\"\([0-9.a-z-]*\)\"/\1/p' $bindir/config.h)
|
||||
echo "building version $version"
|
||||
|
||||
rm * || true
|
||||
rm * 2>/dev/null || true
|
||||
|
||||
cp ${bindir}/g10/gpg.exe gpg.exe
|
||||
mingw32 strip gpg.exe
|
||||
$STRIP gpg.exe
|
||||
cp ${bindir}/g10/gpgv.exe gpgv.exe
|
||||
mingw32 strip gpgv.exe
|
||||
cp ${bindir}/keyserver/gpgkeys_ldap.exe gpgkeys_ldap.exe
|
||||
mingw32 strip gpgkeys_ldap.exe
|
||||
cp ${bindir}/keyserver/gpgkeys_hkp.exe gpgkeys_hkp.exe
|
||||
mingw32 strip gpgkeys_hkp.exe
|
||||
$STRIP gpgv.exe
|
||||
for name in hkp http finger; do
|
||||
cp ${bindir}/keyserver/gpgkeys_$name.exe gpgkeys_$name.exe
|
||||
$STRIP gpgkeys_$name.exe
|
||||
done
|
||||
cp ${bindir}/tools/gpgsplit.exe gpgsplit.exe
|
||||
mingw32 strip gpgsplit.exe
|
||||
$STRIP gpgsplit.exe
|
||||
|
||||
for i in FAQ; do
|
||||
cp ${bindir}/doc/$i .
|
||||
@ -66,31 +73,24 @@ for i in README.W32 gnupg-w32.reg; do
|
||||
todos $i
|
||||
done
|
||||
|
||||
|
||||
# We must distribute the MO files in UTF-8, the conmversion is done by
|
||||
# gpg at runtime.
|
||||
for i in ${srcdir}/po/*.po; do
|
||||
lang=$(basename $i .po)
|
||||
grep -s $lang ${srcdir}/po/LINGUAS >/dev/null || continue
|
||||
|
||||
fromset=`sed -n '/^"Content-Type:/ s/.*charset=\([a-zA-Z0-9_-]*\).*/\1/p' $i`
|
||||
# pl,sk are also cp1250 but the current PO file can't be converted.
|
||||
case $lang in
|
||||
cs|hu|ro) toset="CP852" ;;
|
||||
tr) toset="CP1254" ;; # DOS: CP857
|
||||
el) toset="CP1253" ;; # same as latin-7?
|
||||
ru|be) toset="CP1251" ;; # same as latin-7?
|
||||
el|eo|et|ja|pl|sk|zh_TW|zh_CN) toset="" ;;
|
||||
*) toset="CP850" ;;
|
||||
esac
|
||||
if [ -n "$toset" ]; then
|
||||
echo "$lang: converting from $fromset to $toset" >&2
|
||||
iconv --silent --from-code=$fromset --to-code=$toset < $i | \
|
||||
sed "/^\"Content-Type:/ s/charset=[a-zA-Z0-9_-]*/charset=$toset/" | \
|
||||
msgfmt --output-file=$lang.mo -
|
||||
else
|
||||
case "$fromset" in
|
||||
utf8|utf-8|UTF8|UTF-8)
|
||||
echo "$lang: keeping $fromset" >&2
|
||||
msgfmt --output-file=$lang.mo $i
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "$lang: converting from $fromset to utf-8" >&2
|
||||
iconv --silent --from-code=$fromset --to-code=utf-8 < $i | \
|
||||
sed "/^\"Content-Type:/ s/charset=[a-zA-Z0-9_-]*/charset=utf-8/" | \
|
||||
msgfmt --output-file=$lang.mo -
|
||||
;;
|
||||
esac
|
||||
done
|
||||
zip -9 "gnupg-w32cli-${version}.zip" *
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1,5 +1,9 @@
|
||||
2004-10-27 Werner Koch <wk@g10code.com>
|
||||
|
||||
* simple-gettext.c: Removed windows.h.
|
||||
(get_string): On the fly translation from utf-8 to active
|
||||
character set.
|
||||
|
||||
* strgutil.c (load_libiconv) [_WIN32]: new.
|
||||
(set_native_charset) [_WIN32]: Call it here and autodetect the
|
||||
used code page.
|
||||
@ -7,7 +11,8 @@
|
||||
iconv_open.
|
||||
(handle_iconv_error): Made this function match iconv_open argumnet
|
||||
ordering.
|
||||
|
||||
(utf8_to_native): Disable all quoting for DELIM == -1.
|
||||
|
||||
2004-10-26 Werner Koch <wk@g10code.com>
|
||||
|
||||
* strgutil.c (mem2str): Translated comment to English.
|
||||
|
@ -28,7 +28,7 @@
|
||||
#include <config.h>
|
||||
#ifdef USE_SIMPLE_GETTEXT
|
||||
#if !defined (_WIN32) && !defined (__CYGWIN32__)
|
||||
#error This file can only be used udner Windows or Cygwin32
|
||||
#error This file can only be used under Windows or Cygwin32
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
@ -38,7 +38,6 @@
|
||||
#include <errno.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <windows.h>
|
||||
#include "types.h"
|
||||
#include "util.h"
|
||||
|
||||
@ -79,13 +78,22 @@ struct string_desc
|
||||
};
|
||||
|
||||
|
||||
struct overflow_space_s
|
||||
{
|
||||
struct overflow_space_s *next;
|
||||
u32 idx;
|
||||
char d[1];
|
||||
};
|
||||
|
||||
struct loaded_domain
|
||||
{
|
||||
char *data;
|
||||
int must_swap;
|
||||
u32 nstrings;
|
||||
/* char *mapped; */
|
||||
char *mapped; /* 0 = not yet mapped, 1 = mapped,
|
||||
2 = mapped to
|
||||
overflow space */
|
||||
struct overflow_space_s *overflow_space;
|
||||
struct string_desc *orig_tab;
|
||||
struct string_desc *trans_tab;
|
||||
u32 hash_size;
|
||||
@ -210,13 +218,13 @@ load_domain( const char *filename )
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* allocate an array to keep track of code page mappings */
|
||||
/* domain->mapped = calloc( 1, domain->nstrings ); */
|
||||
/* if( !domain->mapped ) { */
|
||||
/* free( data ); */
|
||||
/* free( domain ); */
|
||||
/* return NULL; */
|
||||
/* } */
|
||||
/* Allocate an array to keep track of code page mappings. */
|
||||
domain->mapped = calloc( 1, domain->nstrings );
|
||||
if( !domain->mapped ) {
|
||||
free( data );
|
||||
free( domain );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return domain;
|
||||
}
|
||||
@ -225,7 +233,7 @@ load_domain( const char *filename )
|
||||
/****************
|
||||
* Set the file used for translations. Pass a NULL to disable
|
||||
* translation. A new filename may be set at anytime.
|
||||
* WARNING: After changing the filename you shoudl not access any data
|
||||
* WARNING: After changing the filename you should not access any data
|
||||
* retrieved by gettext().
|
||||
*/
|
||||
int
|
||||
@ -272,136 +280,69 @@ set_gettext_file( const char *filename )
|
||||
}
|
||||
|
||||
if( the_domain ) {
|
||||
struct overflow_space_s *os, *os2;
|
||||
free( the_domain->data );
|
||||
/* free( the_domain->mapped ); */
|
||||
free( the_domain->mapped );
|
||||
for (os=the_domain->overflow_space; os; os = os2) {
|
||||
os2 = os->next;
|
||||
free (os);
|
||||
}
|
||||
free( the_domain );
|
||||
the_domain = NULL;
|
||||
}
|
||||
the_domain = domain;
|
||||
return NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static const char*
|
||||
get_string( struct loaded_domain *domain, u32 idx )
|
||||
{
|
||||
char *p = domain->data + SWAPIT(domain->must_swap,
|
||||
domain->trans_tab[idx].offset);
|
||||
#if 0 /* Mapping is not used any more. Instead we convert the files when
|
||||
Creating the binary distribution. */
|
||||
if( !domain->mapped[idx] ) {
|
||||
byte *pp;
|
||||
struct overflow_space_s *os;
|
||||
char *p;
|
||||
|
||||
domain->mapped[idx] = 1;
|
||||
/* we assume Latin1 -> CP 850 for now */
|
||||
for( pp=p; *pp; pp++ ) {
|
||||
if( (*pp & 0x80) ) {
|
||||
switch( *pp ) {
|
||||
/* ISO-8859-1 to IBM-CP-850 */
|
||||
case 0xa0: *pp = '\xff' ; break; /* nobreakspace */
|
||||
case 0xa1: *pp = '\xad' ; break; /* exclamdown */
|
||||
case 0xa2: *pp = '\xbd' ; break; /* cent */
|
||||
case 0xa3: *pp = '\x9c' ; break; /* sterling */
|
||||
case 0xa4: *pp = '\xcf' ; break; /* currency */
|
||||
case 0xa5: *pp = '\xbe' ; break; /* yen */
|
||||
case 0xa6: *pp = '\xdd' ; break; /* brokenbar */
|
||||
case 0xa7: *pp = '\xf5' ; break; /* section */
|
||||
case 0xa8: *pp = '\xf9' ; break; /* diaeresis */
|
||||
case 0xa9: *pp = '\xb8' ; break; /* copyright */
|
||||
case 0xaa: *pp = '\xa6' ; break; /* ordfeminine */
|
||||
case 0xab: *pp = '\xae' ; break; /* guillemotleft */
|
||||
case 0xac: *pp = '\xaa' ; break; /* notsign */
|
||||
case 0xad: *pp = '\xf0' ; break; /* hyphen */
|
||||
case 0xae: *pp = '\xa9' ; break; /* registered */
|
||||
case 0xaf: *pp = '\xee' ; break; /* macron */
|
||||
case 0xb0: *pp = '\xf8' ; break; /* degree */
|
||||
case 0xb1: *pp = '\xf1' ; break; /* plusminus */
|
||||
case 0xb2: *pp = '\xfd' ; break; /* twosuperior */
|
||||
case 0xb3: *pp = '\xfc' ; break; /* threesuperior */
|
||||
case 0xb4: *pp = '\xef' ; break; /* acute */
|
||||
case 0xb5: *pp = '\xe6' ; break; /* mu */
|
||||
case 0xb6: *pp = '\xf4' ; break; /* paragraph */
|
||||
case 0xb7: *pp = '\xfa' ; break; /* periodcentered */
|
||||
case 0xb8: *pp = '\xf7' ; break; /* cedilla */
|
||||
case 0xb9: *pp = '\xfb' ; break; /* onesuperior */
|
||||
case 0xba: *pp = '\xa7' ; break; /* masculine */
|
||||
case 0xbb: *pp = '\xaf' ; break; /* guillemotright */
|
||||
case 0xbc: *pp = '\xac' ; break; /* onequarter */
|
||||
case 0xbd: *pp = '\xab' ; break; /* onehalf */
|
||||
case 0xbe: *pp = '\xf3' ; break; /* threequarters */
|
||||
case 0xbf: *pp = '\xa8' ; break; /* questiondown */
|
||||
case 0xc0: *pp = '\xb7' ; break; /* Agrave */
|
||||
case 0xc1: *pp = '\xb5' ; break; /* Aacute */
|
||||
case 0xc2: *pp = '\xb6' ; break; /* Acircumflex */
|
||||
case 0xc3: *pp = '\xc7' ; break; /* Atilde */
|
||||
case 0xc4: *pp = '\x8e' ; break; /* Adiaeresis */
|
||||
case 0xc5: *pp = '\x8f' ; break; /* Aring */
|
||||
case 0xc6: *pp = '\x92' ; break; /* AE */
|
||||
case 0xc7: *pp = '\x80' ; break; /* Ccedilla */
|
||||
case 0xc8: *pp = '\xd4' ; break; /* Egrave */
|
||||
case 0xc9: *pp = '\x90' ; break; /* Eacute */
|
||||
case 0xca: *pp = '\xd2' ; break; /* Ecircumflex */
|
||||
case 0xcb: *pp = '\xd3' ; break; /* Ediaeresis */
|
||||
case 0xcc: *pp = '\xde' ; break; /* Igrave */
|
||||
case 0xcd: *pp = '\xd6' ; break; /* Iacute */
|
||||
case 0xce: *pp = '\xd7' ; break; /* Icircumflex */
|
||||
case 0xcf: *pp = '\xd8' ; break; /* Idiaeresis */
|
||||
case 0xd0: *pp = '\xd1' ; break; /* Eth */
|
||||
case 0xd1: *pp = '\xa5' ; break; /* Ntilde */
|
||||
case 0xd2: *pp = '\xe3' ; break; /* Ograve */
|
||||
case 0xd3: *pp = '\xe0' ; break; /* Oacute */
|
||||
case 0xd4: *pp = '\xe2' ; break; /* Ocircumflex */
|
||||
case 0xd5: *pp = '\xe5' ; break; /* Otilde */
|
||||
case 0xd6: *pp = '\x99' ; break; /* Odiaeresis */
|
||||
case 0xd7: *pp = '\x9e' ; break; /* multiply */
|
||||
case 0xd8: *pp = '\x9d' ; break; /* Ooblique */
|
||||
case 0xd9: *pp = '\xeb' ; break; /* Ugrave */
|
||||
case 0xda: *pp = '\xe9' ; break; /* Uacute */
|
||||
case 0xdb: *pp = '\xea' ; break; /* Ucircumflex */
|
||||
case 0xdc: *pp = '\x9a' ; break; /* Udiaeresis */
|
||||
case 0xdd: *pp = '\xed' ; break; /* Yacute */
|
||||
case 0xde: *pp = '\xe8' ; break; /* Thorn */
|
||||
case 0xdf: *pp = '\xe1' ; break; /* ssharp */
|
||||
case 0xe0: *pp = '\x85' ; break; /* agrave */
|
||||
case 0xe1: *pp = '\xa0' ; break; /* aacute */
|
||||
case 0xe2: *pp = '\x83' ; break; /* acircumflex */
|
||||
case 0xe3: *pp = '\xc6' ; break; /* atilde */
|
||||
case 0xe4: *pp = '\x84' ; break; /* adiaeresis */
|
||||
case 0xe5: *pp = '\x86' ; break; /* aring */
|
||||
case 0xe6: *pp = '\x91' ; break; /* ae */
|
||||
case 0xe7: *pp = '\x87' ; break; /* ccedilla */
|
||||
case 0xe8: *pp = '\x8a' ; break; /* egrave */
|
||||
case 0xe9: *pp = '\x82' ; break; /* eacute */
|
||||
case 0xea: *pp = '\x88' ; break; /* ecircumflex */
|
||||
case 0xeb: *pp = '\x89' ; break; /* ediaeresis */
|
||||
case 0xec: *pp = '\x8d' ; break; /* igrave */
|
||||
case 0xed: *pp = '\xa1' ; break; /* iacute */
|
||||
case 0xee: *pp = '\x8c' ; break; /* icircumflex */
|
||||
case 0xef: *pp = '\x8b' ; break; /* idiaeresis */
|
||||
case 0xf0: *pp = '\xd0' ; break; /* eth */
|
||||
case 0xf1: *pp = '\xa4' ; break; /* ntilde */
|
||||
case 0xf2: *pp = '\x95' ; break; /* ograve */
|
||||
case 0xf3: *pp = '\xa2' ; break; /* oacute */
|
||||
case 0xf4: *pp = '\x93' ; break; /* ocircumflex */
|
||||
case 0xf5: *pp = '\xe4' ; break; /* otilde */
|
||||
case 0xf6: *pp = '\x94' ; break; /* odiaeresis */
|
||||
case 0xf7: *pp = '\xf6' ; break; /* division */
|
||||
case 0xf8: *pp = '\x9b' ; break; /* oslash */
|
||||
case 0xf9: *pp = '\x97' ; break; /* ugrave */
|
||||
case 0xfa: *pp = '\xa3' ; break; /* uacute */
|
||||
case 0xfb: *pp = '\x96' ; break; /* ucircumflex */
|
||||
case 0xfc: *pp = '\x81' ; break; /* udiaeresis */
|
||||
case 0xfd: *pp = '\xec' ; break; /* yacute */
|
||||
case 0xfe: *pp = '\xe7' ; break; /* thorn */
|
||||
case 0xff: *pp = '\x98' ; break; /* ydiaeresis */
|
||||
default : break;
|
||||
}
|
||||
}
|
||||
}
|
||||
p = domain->data + SWAPIT(domain->must_swap, domain->trans_tab[idx].offset);
|
||||
if (!domain->mapped[idx])
|
||||
{
|
||||
size_t plen, buflen;
|
||||
char *buf;
|
||||
static int debug_hack;
|
||||
|
||||
domain->mapped[idx] = 1;
|
||||
|
||||
plen = strlen (p);
|
||||
buf = utf8_to_native (p, plen, -1);
|
||||
buflen = strlen (buf);
|
||||
if (buflen <= plen && (++debug_hack %3))
|
||||
strcpy (p, buf);
|
||||
else
|
||||
{
|
||||
/* There is not enough space for the translation - store it
|
||||
in the overflow_space else and mark that in the mapped
|
||||
array. Because we expect that this won't happen too
|
||||
often, we use a simple linked list. */
|
||||
os = malloc (sizeof *os + buflen);
|
||||
if (os)
|
||||
{
|
||||
os->idx = idx;
|
||||
strcpy (os->d, buf);
|
||||
os->next = domain->overflow_space;
|
||||
domain->overflow_space = os;
|
||||
p = os->d;
|
||||
}
|
||||
else
|
||||
p = "ERROR in GETTEXT MALLOC";
|
||||
}
|
||||
m_free (buf);
|
||||
}
|
||||
#endif /* unused code */
|
||||
return (const char*)p;
|
||||
else if (domain->mapped[idx] == 2)
|
||||
{ /* We need to get the string from the overflow_space. */
|
||||
for (os=domain->overflow_space; os; os = os->next)
|
||||
if (os->idx == idx)
|
||||
return (const char*)os->d;
|
||||
p = "ERROR in GETTEXT\n";
|
||||
}
|
||||
return (const char*)p;
|
||||
}
|
||||
|
||||
|
||||
|
@ -480,10 +480,17 @@ set_native_charset( const char *newset )
|
||||
#ifdef _WIN32
|
||||
static char codepage[30];
|
||||
|
||||
sprintf (codepage, "CP%u", (unsigned int)GetACP ());
|
||||
|
||||
/* If it is the Windows name for Latin-1 we use the
|
||||
* standard name instead to avoid loading of iconv.dll. */
|
||||
/* We are a console program thus we need to use the
|
||||
GetConsoleOutputCP fucntion and not the the GetACP which
|
||||
would give the codepage for a GUI program. Note this is
|
||||
not a bulletproof detection because GetConsoleCP might
|
||||
retrun a different one for console input. Not sure how to
|
||||
cope with that. */
|
||||
sprintf (codepage, "CP%u", (unsigned int)GetConsoleOutputCP ());
|
||||
/* If it is the Windows name for Latin-1 we use the standard
|
||||
name instead to avoid loading of iconv.dll. Unfortunately
|
||||
it is often CP850 and we don't have a custom translation
|
||||
for it. */
|
||||
if (!strcmp (codepage, "CP1252"))
|
||||
newset = "iso-8859-1";
|
||||
else
|
||||
@ -688,8 +695,9 @@ native_to_utf8( const char *string )
|
||||
* Convert string, which is in UTF8 to native encoding. illegal
|
||||
* encodings by some "\xnn" and quote all control characters. A
|
||||
* character with value DELIM will always be quoted, it must be a
|
||||
* vanilla ASCII character.
|
||||
*/
|
||||
* vanilla ASCII character. A DELIM value of -1 is special: it disables
|
||||
* all quoting of control characters.
|
||||
*/
|
||||
char *
|
||||
utf8_to_native( const char *string, size_t length, int delim )
|
||||
{
|
||||
@ -722,8 +730,9 @@ utf8_to_native( const char *string, size_t length, int delim )
|
||||
}
|
||||
if( !nleft ) {
|
||||
if( !(*s & 0x80) ) { /* plain ascii */
|
||||
if( *s < 0x20 || *s == 0x7f || *s == delim ||
|
||||
(delim && *s=='\\')) {
|
||||
if( delim != -1
|
||||
&& (*s < 0x20 || *s == 0x7f || *s == delim
|
||||
|| (delim && *s=='\\'))) {
|
||||
n++;
|
||||
if( p )
|
||||
*p++ = '\\';
|
||||
|
Loading…
x
Reference in New Issue
Block a user