=============================
StdIO Functions in LLVM-libc
=============================

-------
Summary
-------

This document tracks the status of the implementation of stdio functions in LLVM
Libc.

---------------
Source location
---------------

-   The main source for string functions is located at:
    ``libc/src/stdio`` with subdirectories for internal implementations.

---------------------
Implementation Status
---------------------

Formatted Input/Output Functions
================================

These functions take in format strings and arguments of various types and
convert either to or from those arguments. These functions are the current focus
(owner: michaelrj).

=============  =========
Function_Name  Available
=============  =========
\*printf       WIP
\*scanf
=============  =========

``FILE`` Access
===============

These functions are used to interact with the ``FILE`` object type, which is an
I/O stream, often used to represent a file on the host's hard drive. Currently
the ``FILE`` object is only available on linux.

=============  =========
Function_Name  Available
=============  =========
fopen          YES
freopen
fclose         YES
fflush         YES
setbuf
setvbuf
ftell
fgetpos
fseek          YES
fsetpos
rewind
tmpfile
clearerr       YES
feof           YES
ferror         YES
flockfile      YES
funlockfile    YES
=============  =========

Operations on system files
==========================

These functions operate on files on the host's system, without using the 
``FILE`` object type. They only take the name of the file being operated on.

=============  =========
Function_Name  Available
=============  =========
remove
rename
tmpnam
=============  =========

Unformatted ``FILE`` Input/Output Functions
===========================================

The ``gets`` function was removed in C11 for having no bounds checking and
therefor being impossible to use safely.

=============  =========
Function_Name  Available
=============  =========
(f)getc
fgets
getchar
fread          YES
(f)putc
(f)puts
putchar
fwrite         YES
ungetc
=============  =========
