This is the mail archive of the cygwin@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

LOCALE ERROR


Hi,
I have a program that needs the locale support, so I include 'locale.h'. I make the program but the output was wrong.
With the cygwin library the setlocale function do not work, but if I link with mingw library it is ok I am sending a sample program that demonstrate the error.


Linking with CYGWIN:
marcelo@est01 /usr/src/testes/locale/msdn
$ gcc -o crt_locale crt_locale.c marcelo@est01 /usr/src/testes/locale/msdn
$
$ ./crt_locale.exe
In German locale, strftime returns 'x'
No Brasil locale, strftime retorna 'x'
In 'C' locale, strftime returns 'x'
marcelo@est01 /usr/src/testes/locale/msdn
$


Linking with MINGW (-mno-cygwin)
   marcelo@est01 /usr/src/testes/locale/msdn
   $ gcc -mno-cygwin -o crt_locale crt_locale.c
   marcelo@est01 /usr/src/testes/locale/msdn
   $
   $ ./crt_locale.exe
   In German locale, strftime returns 'Sonntag, 07. Dezember 2003'
   No Brasil locale, strftime retorna 'domingo, 07 de dezembro de 2003'
   In 'C' locale, strftime returns 'Sunday, December 07, 2003'
   marcelo@est01 /usr/src/testes/locale/msdn
   $

Thanks,
Marcelo Modolo
// crt_locale.c
/* Sets the current locale to "Germany" using the
 * setlocale function and demonstrates its effect on the strftime
 * function.
 */

#include <stdio.h>
#include <locale.h>
#include <time.h>

int main(void)
{
       time_t ltime;
       struct tm *thetime;
       unsigned char str[100];

       setlocale(LC_ALL, "German");
       time (&ltime);
       thetime = gmtime(&ltime);

       /* %#x is the long date representation, appropriate to
        * the current locale
        */
       if (!strftime((char *)str, 100, "%#x", 
                     (const struct tm *)thetime))
               printf("strftime failed!\n");
       else
               printf("In German locale, strftime returns '%s'\n", 
                      str);
       
/* portuguese-brazil */

       setlocale(LC_ALL, "portuguese-brazil");
       time (&ltime);
       thetime = gmtime(&ltime);

       /* %#x is the long date representation, appropriate to
        * the current locale
        */
       if (!strftime((char *)str, 100, "%#x", 
                     (const struct tm *)thetime))
               printf("strftime failed!\n");
       else
               printf("No Brasil locale, strftime retorna '%s'\n", 
                      str);
       
       /* Set the locale back to the default environment */
       setlocale(LC_ALL, "C");
       time (&ltime);
       thetime = gmtime(&ltime);

       if (!strftime((char *)str, 100, "%#x", 
                     (const struct tm *)thetime))
               printf("strftime failed!\n");
       else
               printf("In 'C' locale, strftime returns '%s'\n", 
                      str);
}

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]