Replace the magic constant 127 in the loop interation count with
"PROMPTLEN - 1".
gethostname() is not guaranteed to NUL terminate the destination
string if it is too short. Decrease the length passed to
gethostname() by one, and add a NUL at the end of the buffer to
make sure the following loop to find the end of the name properly
terminates.
The default: case is the likely cause of Coverity CID 1008328.
If i is 126 at the top of the loop interation where the default
case is triggered, i will be incremented to 127 by the default
case, then incremented to 128 at the top of the loop before being
compared to 127 (PROMPTLENT - 1) and terminating the loop. Then
the NUL termination code after the loop will write to ps[128].
These fixes are not guaranteed to satisfy Coverity. The code that
increments i in the 'h'/'H' and 'w'/'W' cases may be beyond its
capability to analyze.
BTW, the 'h' and 'H' implementions are reversed vs the man page.
I did not attempt to fix that as part of this patch.