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.
Related PRs:
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=180438
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=189415