public inbox for cygwin-developers@cygwin.com
 help / color / mirror / Atom feed
* undefined reference to `strlwr' on 64bit Cygwin
@ 2013-03-17  2:09 Ken Brown
  2013-03-17  9:52 ` Corinna Vinschen
  0 siblings, 1 reply; 4+ messages in thread
From: Ken Brown @ 2013-03-17  2:09 UTC (permalink / raw)
  To: cygwin-developers

$ uname -a
CYGWIN_NT-6.1 fiona 1.7.18(0.263/5/3) 2013-03-15 16:35 x86_64 Cygwin

$ gcc --version
gcc (GCC) 4.8.0 20130307 (experimental)

$ cat strlwr_test.c
#include <string.h>
#include <stdio.h>

int
main ()
{
   char str[] = "FRED";
   printf ("%s\n", strlwr (str));
}

$ gcc strlwr_test.c
/tmp/ccW2SOn8.o:strlwr_test.c:(.text+0x20): undefined reference to `strlwr'
/tmp/ccW2SOn8.o:strlwr_test.c:(.text+0x20): relocation truncated to fit: 
R_X86_64_PC32 against undefined symbol `strlwr'
/usr/lib/gcc/x86_64-pc-cygwin/4.8.0/../../../../x86_64-pc-cygwin/bin/ld: 
/tmp/ccW2SOn8.o: bad reloc address 0x0 in section `.pdata'
/usr/lib/gcc/x86_64-pc-cygwin/4.8.0/../../../../x86_64-pc-cygwin/bin/ld: 
final link failed: Invalid operation
collect2: error: ld returned 1 exit status

Ken

P.S. Is this still the appropriate list for 64bit bug reports, or is it 
time to move to the main cygwin list?

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: undefined reference to `strlwr' on 64bit Cygwin
  2013-03-17  2:09 undefined reference to `strlwr' on 64bit Cygwin Ken Brown
@ 2013-03-17  9:52 ` Corinna Vinschen
  2013-03-17 12:54   ` Ken Brown
  0 siblings, 1 reply; 4+ messages in thread
From: Corinna Vinschen @ 2013-03-17  9:52 UTC (permalink / raw)
  To: cygwin-developers

On Mar 16 22:08, Ken Brown wrote:
> $ uname -a
> CYGWIN_NT-6.1 fiona 1.7.18(0.263/5/3) 2013-03-15 16:35 x86_64 Cygwin
> 
> $ gcc --version
> gcc (GCC) 4.8.0 20130307 (experimental)
> 
> $ cat strlwr_test.c
> #include <string.h>
> #include <stdio.h>
> 
> int
> main ()
> {
>   char str[] = "FRED";
>   printf ("%s\n", strlwr (str));
> }
> 
> $ gcc strlwr_test.c
> /tmp/ccW2SOn8.o:strlwr_test.c:(.text+0x20): undefined reference to `strlwr'
> /tmp/ccW2SOn8.o:strlwr_test.c:(.text+0x20): relocation truncated to
> fit: R_X86_64_PC32 against undefined symbol `strlwr'
> /usr/lib/gcc/x86_64-pc-cygwin/4.8.0/../../../../x86_64-pc-cygwin/bin/ld:
> /tmp/ccW2SOn8.o: bad reloc address 0x0 in section `.pdata'
> /usr/lib/gcc/x86_64-pc-cygwin/4.8.0/../../../../x86_64-pc-cygwin/bin/ld:
> final link failed: Invalid operation
> collect2: error: ld returned 1 exit status

Thanks for the hint, I added it back to cygwin64.din.

However, do you really use this function?  It's broken by design.  In
theory it's one of those functions which should never have been exported
since it only works on single-byte charsets and glibc rightfully doesn't
provide it at all.  If you use it with UTF-8 non-ASCII chars, the result
is random nonsense.

> Ken
> 
> P.S. Is this still the appropriate list for 64bit bug reports, or is
> it time to move to the main cygwin list?

No, that's fine.  Let's stick to the developers list (or cygwin-apps for
stuff which rather affects setup and packaging) until we do our first
official release.


Thanks,
Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: undefined reference to `strlwr' on 64bit Cygwin
  2013-03-17  9:52 ` Corinna Vinschen
@ 2013-03-17 12:54   ` Ken Brown
  2013-03-18 13:07     ` Corinna Vinschen
  0 siblings, 1 reply; 4+ messages in thread
From: Ken Brown @ 2013-03-17 12:54 UTC (permalink / raw)
  To: cygwin-developers; +Cc: Daniel Colascione

On 3/17/2013 5:51 AM, Corinna Vinschen wrote:
> On Mar 16 22:08, Ken Brown wrote:
>> $ uname -a
>> CYGWIN_NT-6.1 fiona 1.7.18(0.263/5/3) 2013-03-15 16:35 x86_64 Cygwin
>>
>> $ gcc --version
>> gcc (GCC) 4.8.0 20130307 (experimental)
>>
>> $ cat strlwr_test.c
>> #include <string.h>
>> #include <stdio.h>
>>
>> int
>> main ()
>> {
>>    char str[] = "FRED";
>>    printf ("%s\n", strlwr (str));
>> }
>>
>> $ gcc strlwr_test.c
>> /tmp/ccW2SOn8.o:strlwr_test.c:(.text+0x20): undefined reference to `strlwr'
>> /tmp/ccW2SOn8.o:strlwr_test.c:(.text+0x20): relocation truncated to
>> fit: R_X86_64_PC32 against undefined symbol `strlwr'
>> /usr/lib/gcc/x86_64-pc-cygwin/4.8.0/../../../../x86_64-pc-cygwin/bin/ld:
>> /tmp/ccW2SOn8.o: bad reloc address 0x0 in section `.pdata'
>> /usr/lib/gcc/x86_64-pc-cygwin/4.8.0/../../../../x86_64-pc-cygwin/bin/ld:
>> final link failed: Invalid operation
>> collect2: error: ld returned 1 exit status
>
> Thanks for the hint, I added it back to cygwin64.din.
>
> However, do you really use this function?  It's broken by design.  In
> theory it's one of those functions which should never have been exported
> since it only works on single-byte charsets and glibc rightfully doesn't
> provide it at all.  If you use it with UTF-8 non-ASCII chars, the result
> is random nonsense.

It's used in the cygw32 build of emacs, in w32font.c.  The native 
Windows build uses _strlwr, and Daniel added `#define _strlwr strlwr' 
for Cygwin.  Maybe he can comment on this.

Ken

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: undefined reference to `strlwr' on 64bit Cygwin
  2013-03-17 12:54   ` Ken Brown
@ 2013-03-18 13:07     ` Corinna Vinschen
  0 siblings, 0 replies; 4+ messages in thread
From: Corinna Vinschen @ 2013-03-18 13:07 UTC (permalink / raw)
  To: cygwin-developers

On Mar 17 08:53, Ken Brown wrote:
> On 3/17/2013 5:51 AM, Corinna Vinschen wrote:
> >On Mar 16 22:08, Ken Brown wrote:
> >>$ uname -a
> >>CYGWIN_NT-6.1 fiona 1.7.18(0.263/5/3) 2013-03-15 16:35 x86_64 Cygwin
> >>
> >>$ gcc --version
> >>gcc (GCC) 4.8.0 20130307 (experimental)
> >>
> >>$ cat strlwr_test.c
> >>#include <string.h>
> >>#include <stdio.h>
> >>
> >>int
> >>main ()
> >>{
> >>   char str[] = "FRED";
> >>   printf ("%s\n", strlwr (str));
> >>}
> >>
> >>$ gcc strlwr_test.c
> >>/tmp/ccW2SOn8.o:strlwr_test.c:(.text+0x20): undefined reference to `strlwr'
> >>/tmp/ccW2SOn8.o:strlwr_test.c:(.text+0x20): relocation truncated to
> >>fit: R_X86_64_PC32 against undefined symbol `strlwr'
> >>/usr/lib/gcc/x86_64-pc-cygwin/4.8.0/../../../../x86_64-pc-cygwin/bin/ld:
> >>/tmp/ccW2SOn8.o: bad reloc address 0x0 in section `.pdata'
> >>/usr/lib/gcc/x86_64-pc-cygwin/4.8.0/../../../../x86_64-pc-cygwin/bin/ld:
> >>final link failed: Invalid operation
> >>collect2: error: ld returned 1 exit status
> >
> >Thanks for the hint, I added it back to cygwin64.din.
> >
> >However, do you really use this function?  It's broken by design.  In
> >theory it's one of those functions which should never have been exported
> >since it only works on single-byte charsets and glibc rightfully doesn't
> >provide it at all.  If you use it with UTF-8 non-ASCII chars, the result
> >is random nonsense.
> 
> It's used in the cygw32 build of emacs, in w32font.c.  The native
> Windows build uses _strlwr, and Daniel added `#define _strlwr
> strlwr' for Cygwin.  Maybe he can comment on this.

Btw., a safe method to uppercase/lowercase a multibyte string is this:

  #include <stdlib.h>
  #include <wchar.h>
  #include <wctype.h>

  /* Return converted string in newly malloc'd buffer */
  char *
  safe_strupr (const char *str)
  {
    size_t len;
    wchar_t *wstr = NULL;
    char *res = NULL;

    len = mbstowcs (NULL, str, 0) + 1;
    if (len != (size_t) -1)
      wstr = (wchar_t *) malloc (len * sizeof (wchar_t));
    if (!wstr)
      return NULL;
    mbstowcs (wstr, str, len);
    while (len-- > 0)     /* Ignore WEOF here */
      wstr[len] = (wchar_t) towupper ((wint_t) wstr[len]);
    len = wcstombs (NULL, wstr, 0) + 1;
    if (len != (size_t) -1)
      {
	res = (char *) malloc (len);
	if (res)
	  wcstombs (res, wstr, len);
      }
    free (wstr);
    return res;
  }


Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2013-03-18 13:07 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-03-17  2:09 undefined reference to `strlwr' on 64bit Cygwin Ken Brown
2013-03-17  9:52 ` Corinna Vinschen
2013-03-17 12:54   ` Ken Brown
2013-03-18 13:07     ` Corinna Vinschen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).