Subject: Re: bug#24531: process-send-string seems to truncate lines over 4096 characters

From: Spencer Baugh <[email-masked]>
Date: Thu, 27 Jul 2023 09:59:53 -0400

Eli Zaretskii <[email-masked]> writes:
>> Date: Thu, 27 Jul 2023 04:48:18 +0300
>> Cc: [email-masked], [email-masked],
>>  Stefan Monnier <[email-masked]>, [email-masked]
>> From: Dmitry Gutov <[email-masked]>
>> 
>> If some syscall or etc limits the length of a string to 4096, can't we 
>> detect this case, split the string and emit said call multiple times?
>> 
>> This function's docstring already mentions the case of
>> 
>>    If STRING is larger than the input buffer of the process, ...
>>    it is sent in several bunches

Alas it's far more cursed than that.  The length of a *line* is limited
to 4096 characters.  So regardless of how big or small your buffers for
writing are, if you write more than 4095 characters before writing a
newline, the remaining characters will be discarded.  There is no way to
prevent this with ptys.

So even if we wrote one character at a time, characters would start
getting dropped after writing 4095 non-newline characters.

>
> AFAIU, that is based on the errno value returned by a 'write' call
> which attempts to write too many bytes (see the would_block function).
> I guess writes to PTYs don't do that?

Writes to PTYs do tell us when the data has been truncated.  There's
just nothing we can do with that information.