libc has a few interfaces with implicit global storage. This leads to lack of thread safety and other issues. A good library will let the caller provide storage for these cases, or provide the caller a handle with which to pass it later/free it.
A trivial example would be strtok vs strtok_r. There are some, like, say, asctime(), that operate against a global string buffer.
Sometimes interfaces "look like" they're returning a global buffer, for example readdir(), but that structure can hang off the DIR* struct ... Nonetheless there is readdir_r()
A trivial example would be strtok vs strtok_r. There are some, like, say, asctime(), that operate against a global string buffer.
Sometimes interfaces "look like" they're returning a global buffer, for example readdir(), but that structure can hang off the DIR* struct ... Nonetheless there is readdir_r()