Issue #1711 has been updated by Sascha Wildner.

Status changed from New to Closed
Assignee deleted (0)

All issues fixed, closing.

----------------------------------------
Bug #1711: memmem() in string.h should be more or less VISIBLE on x86_64?
http://bugs.dragonflybsd.org/issues/1711

Author: David Shao
Status: Closed
Priority: Normal
Assignee: 
Category: 
Target version: 


The memmem() function has a prototype given in /usr/include/string.h, (and
/usr/src/lib/libc/string/memmem.c exists) only it is required that __BSD_VISIBLE
be defined.  Unfortunately a check of gcc 4.1.2

gcc -E -dM - < /dev/null | sort

shows no sign of any *VISIBLE.

Suppose on x86_64 some package, say scmgit-base, detects the existence of
memmem() yet because it too  does not define any *VISIBLE uses an implicit
definition of memmem(), as is indicated in the build messages:

    checking for memmem... yes
    checking for library containing memmem... none required
and
    
    diff.c:369: warning: implicit declaration of function 'memmem'

>From scmgit-base's configure it is just a simple test for memmem(), 
>essentially just

    char memmem ();
    int
    main ()
    {
        return memmem ();
        ;
        return 0;
    }

Then the return value of the actual memmem() that should be (void *) I believe
suddenly becomes an int, so that what used to be a valid pointer after the
return is now possibly not a valid pointer on x86_64 if it is truncated and then
sign extended to a negative 64-bit number.  For example, using

    git diff HEAD^ HEAD

produces segmentation fault errors.

So far setting
    NO_MEMMEM = YesPlease
in git's entry for DragonFly in its Makefile does not appear to have solved the
problem.


-- 
You have received this notification because you have either subscribed to it, 
or are involved in it.
To change your notification preferences, please click here: 
http://bugs.dragonflybsd.org/my/account

Reply via email to