HEX
Server: Apache/2
System: Linux ctr1224126.novalocal 4.9.241-37.el7.x86_64 #1 SMP Mon Nov 2 13:55:04 UTC 2020 x86_64
User: gokitchen (1017)
PHP: 8.0.30
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //usr/include/dovecot/istream-try.h
#ifndef ISTREAM_TRY_H
#define ISTREAM_TRY_H

/* Read from the first input stream that doesn't fail with EINVAL. If any of
   the streams fail with non-EINVAL, it's treated as a fatal failure and the
   error is immediately returned. If a stream returns 0, more data is waited
   for before continuing to the next stream. This allows the last stream to
   be a fallback stream that always succeeds.

   Once the stream is detected, all the other streams are unreferenced.
   The streams should usually be children of the same parent tee-istream.

   Detecting whether istream-tee buffer is full or not is a bit tricky.
   There's no visible difference between non-blocking istream returning 0 and
   istream-tee buffer being full. To work around this, we treat used buffer
   sizes <= min_buffer_full_size as being non-blocking istreams, while
   buffer sizes > min_buffer_full_size are assumed to be due to istream-tee
   max buffer size being reached. Practically this means that
   min_buffer_full_size must be smaller than the smallest of the istreams'
   maximum buffer sizes, but large enough that all the istreams would have
   returned EINVAL on invalid input by that position. */
struct istream *istream_try_create(struct istream *const input[],
				   size_t min_buffer_full_size);

#endif