diff --git a/ChangeLog b/ChangeLog index 7d9be9b20..28e27a16a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -12,6 +12,8 @@ default cString encoding ... the default cString encoding must consist of 7 or 8 bit characters, and must contain ASCII as a subset. We really should think of a generalised test for that. + Use GetDefEncoding() throughout rather than defaultCStringEncoding. + * Source/GSString.m: Use GetDefEncoding() to get c string encoding. 2001-04-11 Nicola Pero diff --git a/Documentation/gsdoc/NSString.html b/Documentation/gsdoc/NSString.html index 2144fcad7..120eea884 100644 --- a/Documentation/gsdoc/NSString.html +++ b/Documentation/gsdoc/NSString.html @@ -185,6 +185,15 @@ NSISOLatin1StringEncoding is assumed.

+

+ + The default C string encoding must be a characterset containing + 7 or 8 bit characters, and where the characters are a superset + of the 7-bit ASCII characterset. In particular, this means + that NSUTF8StringEncoding and NSUnicodeStringEncoding are not + permissable. +

+

localizedNameOfStringEncoding:

diff --git a/Source/GSString.m b/Source/GSString.m index fdc09fc9e..6512783be 100644 --- a/Source/GSString.m +++ b/Source/GSString.m @@ -226,6 +226,8 @@ setup() if (beenHere == NO) { + extern NSStringEncoding GetDefEncoding(); + beenHere = YES; /* @@ -262,7 +264,7 @@ setup() /* * Cache the default string encoding. */ - defEnc = [NSString defaultCStringEncoding]; + defEnc = GetDefEncoding(); } } diff --git a/Source/Unicode.m b/Source/Unicode.m index 76433d0d7..2597561ef 100644 --- a/Source/Unicode.m +++ b/Source/Unicode.m @@ -177,80 +177,83 @@ NSStringEncoding *GetAvailableEncodings() NSStringEncoding GetDefEncoding() { - char *encoding; - unsigned int count; - NSStringEncoding ret; - NSStringEncoding tmp; - NSStringEncoding *availableEncodings; - - availableEncodings = GetAvailableEncodings(); - - encoding = getenv("GNUSTEP_STRING_ENCODING"); - if (encoding != 0) + if (defEnc == GSUndefinedEncoding) { - count = 0; - while (str_encoding_table[count].enc - && strcmp(str_encoding_table[count].ename,encoding)) + char *encoding; + unsigned int count; + NSStringEncoding tmp; + NSStringEncoding *availableEncodings; + + availableEncodings = GetAvailableEncodings(); + + encoding = getenv("GNUSTEP_STRING_ENCODING"); + if (encoding != 0) { - count++; - } - if (str_encoding_table[count].enc) - { - ret = str_encoding_table[count].enc; - if ((ret == NSUnicodeStringEncoding) - || (ret == NSUTF8StringEncoding) - || (ret == NSSymbolStringEncoding)) + count = 0; + while (str_encoding_table[count].enc + && strcmp(str_encoding_table[count].ename,encoding)) { - fprintf(stderr, "WARNING: %s - encoding not supported as " - "default c string encoding.\n", encoding); - fprintf(stderr, "NSISOLatin1StringEncoding set as default.\n"); - ret = NSISOLatin1StringEncoding; + count++; } - else /*encoding should be supported but is it implemented?*/ + if (str_encoding_table[count].enc) { - count = 0; - tmp = 0; - while (availableEncodings[count] != 0) + defEnc = str_encoding_table[count].enc; + if ((defEnc == NSUnicodeStringEncoding) + || (defEnc == NSUTF8StringEncoding) + || (defEnc == NSSymbolStringEncoding)) { - if (ret != availableEncodings[count]) - { - tmp = 0; - } - else - { - tmp = ret; - break; - } - count++; - } - if (tmp == 0 && ret != NSISOLatin1StringEncoding) - { - fprintf(stderr, "WARNING: %s - encoding not yet " - "implemented.\n", encoding); + fprintf(stderr, "WARNING: %s - encoding not supported as " + "default c string encoding.\n", encoding); fprintf(stderr, "NSISOLatin1StringEncoding set as default.\n"); - ret = NSISOLatin1StringEncoding; + defEnc = NSISOLatin1StringEncoding; + } + else /*encoding should be supported but is it implemented?*/ + { + count = 0; + tmp = 0; + while (availableEncodings[count] != 0) + { + if (defEnc != availableEncodings[count]) + { + tmp = 0; + } + else + { + tmp = defEnc; + break; + } + count++; + } + if (tmp == 0 && defEnc != NSISOLatin1StringEncoding) + { + fprintf(stderr, + "WARNING: %s - encoding not yet implemented.\n", + encoding); + fprintf(stderr, + "NSISOLatin1StringEncoding set as default.\n"); + defEnc = NSISOLatin1StringEncoding; + } } } + else /* encoding not found */ + { + fprintf(stderr, + "WARNING: %s - encoding not supported.\n", encoding); + fprintf(stderr, "NSISOLatin1StringEncoding set as default.\n"); + defEnc = NSISOLatin1StringEncoding; + } } - else /* encoding not found */ + else /* environment var not found */ { - fprintf(stderr, "WARNING: %s - encoding not supported.\n", encoding); - fprintf(stderr, "NSISOLatin1StringEncoding set as default.\n"); - ret = NSISOLatin1StringEncoding; + /* shouldn't be required. It really should be in UserDefaults - asf */ + //fprintf(stderr, "WARNING: GNUSTEP_STRING_ENCODING environment"); + //fprintf(stderr, " variable not found.\n"); + //fprintf(stderr, "NSISOLatin1StringEncoding set as default.\n"); + defEnc = NSISOLatin1StringEncoding; } } - else /* environment var not found */ - { - /* shouldn't be required. It really should be in UserDefaults - asf */ - //fprintf(stderr,"WARNING: GNUSTEP_STRING_ENCODING environment found\n"); - //fprintf(stderr, "NSISOLatin1StringEncoding set as default.\n"); - ret = NSISOLatin1StringEncoding; - } - - // Cache the encoding - defEnc = ret; - return ret; + return defEnc; } NSString* @@ -621,7 +624,7 @@ chartouni(char c) { if (defEnc == GSUndefinedEncoding) { - defEnc = [NSString defaultCStringEncoding]; + defEnc = GetDefEncoding(); } return encode_chartouni(c, defEnc); } @@ -631,7 +634,7 @@ unitochar(unichar u) { if (defEnc == GSUndefinedEncoding) { - defEnc = [NSString defaultCStringEncoding]; + defEnc = GetDefEncoding(); } return encode_unitochar(u, defEnc); } @@ -641,7 +644,7 @@ strtoustr(unichar *u1, const char *s1, int size) { if (defEnc == GSUndefinedEncoding) { - defEnc = [NSString defaultCStringEncoding]; + defEnc = GetDefEncoding(); } return encode_strtoustr(u1, s1, size, defEnc); @@ -652,7 +655,7 @@ ustrtostr(char *s2, unichar *u1, int size) { if (defEnc == GSUndefinedEncoding) { - defEnc = [NSString defaultCStringEncoding]; + defEnc = GetDefEncoding(); } return encode_ustrtostr(s2, u1, size, defEnc);