libbb: make xmalloc_sockaddr2dotted use NI_NUMERICSCOPE
No binary (build failed)
—
(log yok)
| @@ -496,12 +496,15 @@ char* FAST_FUNC xmalloc_sockaddr2hostonly_noport(const struct sockaddr *sa) | |
| { | |
| return sockaddr2str(sa, NI_NAMEREQD | IGNORE_PORT); | |
| } | |
| + | #ifndef NI_NUMERICSCOPE |
| + | # define NI_NUMERICSCOPE 0 |
| + | #endif |
| char* FAST_FUNC xmalloc_sockaddr2dotted(const struct sockaddr *sa) | |
| { | |
| - | return sockaddr2str(sa, NI_NUMERICHOST); |
| + | return sockaddr2str(sa, NI_NUMERICHOST | NI_NUMERICSCOPE); |
| } | |
| char* FAST_FUNC xmalloc_sockaddr2dotted_noport(const struct sockaddr *sa) | |
| { | |
| - | return sockaddr2str(sa, NI_NUMERICHOST | IGNORE_PORT); |
| + | return sockaddr2str(sa, NI_NUMERICHOST | NI_NUMERICSCOPE | IGNORE_PORT); |
| } | |
| @@ -1975,6 +1975,12 @@ static int singlemount(struct mntent *mp, int ignore_busy) | |
| dotted = xmalloc_sockaddr2dotted_noport(&lsa->u.sa); | |
| if (ENABLE_FEATURE_CLEAN_UP) free(lsa); | |
| ip = xasprintf("ip=%s", dotted); | |
| + | // Note: IPv6 scoped addresses ("name%iface", see RFC 4007) should be |
| + | // handled by libc in getnameinfo() (inside xmalloc_sockaddr2dotted_noport()). |
| + | // Currently, glibc does not support that (has no NI_NUMERICSCOPE), |
| + | // musl apparently does. This results in "ip=numericIPv6%iface_name" |
| + | // (instead of _numeric_ iface_id) with glibc. |
| + | // This probalby should be fixed in glibc, not here. |
| if (ENABLE_FEATURE_CLEAN_UP) free(dotted); | |
| parse_mount_options(ip, &filteropts); | |
| if (ENABLE_FEATURE_CLEAN_UP) free(ip); | |