Improve system call support on NT

- Improve i/o perf on New Technology
- Code cleanup on read() for New Technology
- Fix bad bug with dup() of socket on New Technology
- Clean up some more strace errors on New Technology
This commit is contained in:
Justine Tunney 2022-04-07 20:30:04 -07:00
parent 29bf8b1a30
commit 4f98ad1054
79 changed files with 707 additions and 197 deletions

View file

@ -16,12 +16,36 @@
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
*/
#include "libc/bits/safemacros.internal.h"
#include "libc/bits/weaken.h"
#include "libc/calls/calls.h"
#include "libc/calls/strace.internal.h"
#include "libc/errno.h"
#include "libc/log/log.h"
#include "libc/mem/mem.h"
#include "libc/str/str.h"
#include "libc/x/x.h"
static int MakeDirs(const char *path, unsigned mode, int e) {
int rc;
char *dir;
if (mkdir(path, mode) != -1) {
errno = e;
return 0;
}
if (errno != ENOENT) return -1;
dir = xdirname(path);
if (strcmp(dir, path)) {
rc = MakeDirs(dir, mode, e);
} else {
rc = -1;
}
free(dir);
if (rc == -1) return -1;
errno = e;
return mkdir(path, mode);
}
/**
* Recursively creates directory a.k.a. folder.
*
@ -31,19 +55,5 @@
* @see mkdir()
*/
int makedirs(const char *path, unsigned mode) {
int e, rc;
char *dir;
e = errno;
if (mkdir(path, mode) != -1) return 0;
if (errno != ENOENT) return -1;
dir = xdirname(path);
if (strcmp(dir, path)) {
rc = makedirs(dir, mode);
} else {
rc = -1;
}
free(dir);
if (rc == -1) return -1;
errno = e;
return mkdir(path, mode);
return MakeDirs(path, mode, errno);
}