MFC r292337, r292552, r292553:
Build mount_smbfs for arm. Also sort the subdirs. Avoid unaligned memory accesses when encoding netbios names in libsmb. The current code for encoding a netbios name converts each byte to a 16-bit value and stores the result by casting a char* to u_short*, resulting in alignment faults on strict-alignment platforms. This change reimplements the encoding routine using only byte accesses to memory. There is no particular reason to work with 16-bit values just because the encoding process creates two bytes of output for every byte of input. Working a byte at at time also avoids endian problems for big-endian platforms. Make the building of libsmb and mount_smbfs unconditional, now that r292552 has eliminated alignment and endian problems that were making it fail on some platforms. PR: 180438 PR: 189415 Relnotes: Yes
This commit is contained in:
parent
223081e0c8
commit
2651e6b1c6
@ -143,15 +143,13 @@ nb_encname_len(const char *str)
|
||||
return len;
|
||||
}
|
||||
|
||||
#define NBENCODE(c) (htole16((u_short)(((u_char)(c) >> 4) | \
|
||||
(((u_char)(c) & 0xf) << 8)) + 0x4141))
|
||||
|
||||
static void
|
||||
memsetw(char *dst, int n, u_short word)
|
||||
static inline void
|
||||
nb_char_encode(u_char **ptr, u_char c, int n)
|
||||
{
|
||||
|
||||
while (n--) {
|
||||
*(u_short*)dst = word;
|
||||
dst += 2;
|
||||
*(*ptr)++ = 0x41 + (c >> 4);
|
||||
*(*ptr)++ = 0x41 + (c & 0x0f);
|
||||
}
|
||||
}
|
||||
|
||||
@ -165,19 +163,15 @@ nb_name_encode(struct nb_name *np, u_char *dst)
|
||||
*cp++ = NB_ENCNAMELEN;
|
||||
name = np->nn_name;
|
||||
if (name[0] == '*' && name[1] == 0) {
|
||||
*(u_short*)cp = NBENCODE('*');
|
||||
memsetw(cp + 2, NB_NAMELEN - 1, NBENCODE(' '));
|
||||
cp += NB_ENCNAMELEN;
|
||||
nb_char_encode(&cp, '*', 1);
|
||||
nb_char_encode(&cp, ' ', NB_NAMELEN - 1);
|
||||
} else {
|
||||
for (i = 0; *name && i < NB_NAMELEN - 1; i++, cp += 2, name++)
|
||||
*(u_short*)cp = NBENCODE(toupper(*name));
|
||||
i = NB_NAMELEN - i - 1;
|
||||
if (i > 0) {
|
||||
memsetw(cp, i, NBENCODE(' '));
|
||||
cp += i * 2;
|
||||
}
|
||||
*(u_short*)cp = NBENCODE(np->nn_type);
|
||||
cp += 2;
|
||||
for (i = 0; i < NB_NAMELEN - 1; i++)
|
||||
if (*name != 0)
|
||||
nb_char_encode(&cp, toupper(*name++), 1);
|
||||
else
|
||||
nb_char_encode(&cp, ' ', 1);
|
||||
nb_char_encode(&cp, np->nn_type, 1);
|
||||
}
|
||||
*cp = 0;
|
||||
if (np->nn_scope == NULL)
|
||||
|
@ -84,7 +84,7 @@ SUBDIR= ${SUBDIR_ORDERED} \
|
||||
libsbuf \
|
||||
${_libsdp} \
|
||||
${_libsm} \
|
||||
${_libsmb} \
|
||||
libsmb \
|
||||
${_libsmdb} \
|
||||
${_libsmutil} \
|
||||
libstand \
|
||||
@ -214,7 +214,6 @@ _libypclnt= libypclnt
|
||||
.endif
|
||||
|
||||
.if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64"
|
||||
_libsmb= libsmb
|
||||
_libvgl= libvgl
|
||||
_libproc= libproc
|
||||
_librtld_db= librtld_db
|
||||
@ -228,7 +227,6 @@ _libvmmapi= libvmmapi
|
||||
|
||||
.if ${MACHINE_CPUARCH} == "ia64"
|
||||
_libefi= libefi
|
||||
_libsmb= libsmb
|
||||
.endif
|
||||
|
||||
.if ${MACHINE_CPUARCH} == "mips"
|
||||
@ -239,11 +237,6 @@ _librtld_db= librtld_db
|
||||
.if ${MACHINE_CPUARCH} == "powerpc"
|
||||
_libproc= libproc
|
||||
_librtld_db= librtld_db
|
||||
_libsmb= libsmb
|
||||
.endif
|
||||
|
||||
.if ${MACHINE_CPUARCH} == "sparc64"
|
||||
_libsmb= libsmb
|
||||
.endif
|
||||
|
||||
.if ${MK_OPENSSL} != "no"
|
||||
|
@ -44,6 +44,7 @@ SUBDIR= adduser \
|
||||
mixer \
|
||||
mlxcontrol \
|
||||
mountd \
|
||||
mount_smbfs \
|
||||
mptutil \
|
||||
mtest \
|
||||
${_mtree} \
|
||||
|
@ -25,7 +25,6 @@ SUBDIR+= hyperv
|
||||
.endif
|
||||
SUBDIR+= kgmon
|
||||
SUBDIR+= lptcontrol
|
||||
SUBDIR+= mount_smbfs
|
||||
SUBDIR+= mptable
|
||||
.if ${MK_NDIS} != "no"
|
||||
SUBDIR+= ndiscvt
|
||||
|
@ -1,4 +1,4 @@
|
||||
# $FreeBSD$
|
||||
|
||||
SUBDIR+= ofwdump
|
||||
SUBDIR+= kgmon
|
||||
SUBDIR+= ofwdump
|
||||
|
@ -15,7 +15,6 @@ SUBDIR+= hyperv
|
||||
SUBDIR+= kgmon
|
||||
SUBDIR+= kgzip
|
||||
SUBDIR+= lptcontrol
|
||||
SUBDIR+= mount_smbfs
|
||||
SUBDIR+= mptable
|
||||
.if ${MK_NDIS} != "no"
|
||||
SUBDIR+= ndiscvt
|
||||
|
@ -4,6 +4,5 @@
|
||||
SUBDIR+= acpi
|
||||
.endif
|
||||
SUBDIR+= kgmon
|
||||
SUBDIR+= mount_smbfs
|
||||
SUBDIR:= ${SUBDIR:Nuathload}
|
||||
SUBDIR+= zzz
|
||||
|
@ -1,5 +1,4 @@
|
||||
# $FreeBSD$
|
||||
|
||||
SUBDIR+= mount_smbfs
|
||||
SUBDIR+= nvram
|
||||
SUBDIR+= ofwdump
|
||||
|
@ -1,5 +1,4 @@
|
||||
# $FreeBSD$
|
||||
|
||||
SUBDIR+= eeprom
|
||||
SUBDIR+= mount_smbfs
|
||||
SUBDIR+= ofwdump
|
||||
|
Loading…
x
Reference in New Issue
Block a user