rascal_reads

Justin Forest <[email protected]> Wed, 24 Mar 2004 13:28:08 +0300
Newsgroups gmane.comp.misc.faerion.devel
Message-ID <[email protected]>
Не нравится мне то, что текущая реализация обрезает строку при 
недостаточном размере выходного буфера.  Кроме того, реального размера 
строки, которую можно изъять, получить невозможно; можно получить размер 
всей очереди, но эта цифра может на порядки пресовходить реально 
необходимый размер.  Так и тянет к текущему прототипу:

rrid_t rascal_reads(rrid_t, char *to, unsigned int *size);

Добавить параметр "int flags" (битовую маску), и придумать для него 
следующие значения:

* RRF_TRUNCATE – текущее поведение, без этого флага функция возвращала 
бы код ошибки (скажме, REC_SMALL_BUFFER).

* RRF_MEASURE – на выходе параметр size содержит размер первой строки в 
буфере соединения.  При использовании этого флага ничего никуда не 
копируется, обрабатывается только параметр size.

* RRF_PEEK – получение данных без удаления их из очереди (в редких 
случаях, но понадобиться может).

Можно поступить проще, но менее очевидно и менее расширяемо: если 
параметр to на входе содержит NULL – обновляем size ничего из буфера не 
вырезая и ничего никуда не копируя.  Проще, хотя и тянет скорее на хак 
времён, когда изменения интерфейса уже невозможны, а возможность нужна.

У кого какие мысли?



-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click