return value of EthernetUDP::read(packetBuffer, maxSize)?

Q1: Does the long form of EthernetUDP::read also return char like the short form? If so, what char is it?

Q2: If there are N bytes in the most recently parsed packet, and you call EthernetUDP::read(packetBuffer, maxSize) where maxSize > N (data smaller than buffer), are the bytes in the buffer beyond the first N overwritten with anything? I would guess that only the first N bytes will be valid.

Q3: If there are N bytes in the most recently parsed packet, and you call EthernetUDP::read(packetBuffer, maxSize) where maxSize < N (data larger than buffer), would EthernetUDP::available return N before the read, and (N - maxSize) after the read? I would assume so because that sounds like proper Stream behavior.

Q1: Does the long form of EthernetUDP::read also return char like the short form? If so, what char is it?

Neither form of read() returns a char. Both return an int. Feel free to look at the source code to see what the value means.

Q2: If there are N bytes in the most recently parsed packet, and you call EthernetUDP::read(packetBuffer, maxSize) where maxSize > N (data smaller than buffer), are the bytes in the buffer beyond the first N overwritten with anything? I would guess that only the first N bytes will be valid.

Only the first N bytes are overwritten.

Q3: If there are N bytes in the most recently parsed packet, and you call EthernetUDP::read(packetBuffer, maxSize) where maxSize < N (data larger than buffer), would EthernetUDP::available return N before the read, and (N - maxSize) after the read? I would assume so because that sounds like proper Stream behavior.

There is no reason to assume anything when you have the source code available to look at.

Unfortunately I didn't have access to the source codes when I asked my questions. I was going by the Arduino Reference pages, which say the read with no parameters returns a char, and doesn't distinguish between the return types for the two read forms.