Probably an elementary question stemming from my lack of C expertise.

I am trying to complile some C code that includes its own "bcrypt"
function. This is conflicting with the declaration in pwd.h.

    error: conflicting types for 'bcrypt'
    int bcrypt(char *, const char *, const char *);
        ^
    /usr/include/pwd.h:112:8: note: previous declaration is here
    char            *bcrypt(const char *, const char *);

In pwd.h I see that the bcrypt declaration is wrapped in a #if block:

    #if __BSD_VISIBLE
    int              setpassent(int);
    int              uid_from_user(const char *, uid_t *);
    const char      *user_from_uid(uid_t, int);
    char            *bcrypt_gensalt(u_int8_t);
    char            *bcrypt(const char *, const char *);
    int             bcrypt_newhash(const char *, int, char *, size_t);
    int             bcrypt_checkpass(const char *, const char *);
    struct passwd   *pw_dup(const struct passwd *);
    #endif

So I'm trying to work out why __BSD_VISIBLE is 1 when I'm compiling.

sys/cdefs.h says:

    /*
     * Finally deal with BSD-specific interfaces that are not covered
     * by any standards.  We expose these when none of the POSIX or XPG
     * macros is defined or if the user explicitly asks for them.
     */
    #if !defined(_BSD_SOURCE) && \
       (defined(_ANSI_SOURCE) || defined(__XPG_VISIBLE) || 
defined(__POSIX_VISIBLE))
    # define __BSD_VISIBLE          0
    #endif

__POSIX_VISIBLE is defined as 200809, so __BSD_VISIBLE should be 0 and
the pwd.h declaration for bcrypt should be skipped?

Allan






Reply via email to