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