/*
 * fflush — сбросить буфер потока: накопленную запись — write()'ом,
 * readahead — откатом позиции fd (стандартная POSIX-семантика fflush
 * для читаемых потоков).  fflush(NULL) сбрасывает ВСЕ открытые потоки
 * таблицы (по стандарту).  Консольные псевдопотоки небуферизованы —
 * всегда успех.
 */

#include "_file.h"

int fflush(FILE *fp)
{
    if (!fp) {
        int rc = 0;
        for (uint8_t i = 0; i < OPEN_MAX; i++) {
            if (_file_slots[i].flags && _file_sync(&_file_slots[i])) rc = EOF;
        }
        return rc;
    }
    if (fp->flags & (_F_CONIN | _F_CONOUT)) return 0;
    return _file_sync(fp);
}
