Apply even more fixups

- Finish cleaning up the stdio unlocked APIs
- Make __cxa_finalize() properly thread safe
- Don't log locks if threads aren't being used
- Add some more mutex guards to places using _mmi
- Specific lock names now appear in the --ftrace logs
- Fix mkdeps.com generating invalid Makefiles sometimes
- Simplify and fix bugs in the test runner infrastructure
- Fix issue where sometimes some functions wouldn't be logged
This commit is contained in:
Justine Tunney 2022-06-12 11:47:20 -07:00
parent 4ddfc47d6e
commit 8cdec62f5b
87 changed files with 955 additions and 899 deletions

View file

@ -17,31 +17,15 @@
PERFORMANCE OF THIS SOFTWARE.
*/
#include "libc/stdio/stdio.h"
#include "libc/str/str.h"
#include "libc/str/tpenc.h"
/**
* Pushes wide character back to stream.
* @threadsafe
*/
wint_t ungetwc_unlocked(wint_t c, FILE *f) {
char b[6];
unsigned n;
uint64_t w;
if (c == -1) return -1;
n = 0;
w = tpenc(c);
do {
b[n++] = w;
} while ((w >>= 8));
if (f->beg >= n) {
f->beg -= n;
memcpy(f->buf + f->beg, b, n);
} else if (f->beg + f->end + n <= f->size) {
memmove(f->buf + f->beg + n, f->buf + f->beg, f->end - f->beg);
memcpy(f->buf + f->beg, b, n);
f->end += n;
} else {
return -1;
}
return c;
wint_t ungetwc(wint_t c, FILE *f) {
wint_t rc;
flockfile(f);
rc = ungetwc_unlocked(c, f);
funlockfile(f);
return rc;
}