Make improvements for Actually Portable Emacs

- Get SIGWINCH working again on the New Technology
- Correctly handle O_NOFOLLOW in open() on Windows
- Implement synthetic umask() functionality on Windows
- Do a better job managing file execute access on Windows
- Fill in `st_uid` and `st_gid` with username hash on Windows
- Munge UNICODE control pictures into control codes on Windows
- Do a better job ensuring Windows console settings are restored
- Introduce KPRINTF_LOG environment variable to log kprintf to a file
This commit is contained in:
Justine Tunney 2023-08-19 06:41:06 -07:00
parent 9c7b81ee0f
commit 965516e313
No known key found for this signature in database
GPG key ID: BE714B4575D6E328
108 changed files with 1126 additions and 807 deletions

View file

@ -55,10 +55,10 @@ int rawmode(void) {
static bool once;
struct termios t;
if (!once) {
if (tcgetattr(1, &oldterm) != -1) {
if (tcgetattr(1, &oldterm)) {
atexit(restoretty);
} else {
return -1;
perror("tcgetattr");
}
once = true;
}
@ -82,7 +82,10 @@ int rawmode(void) {
t.c_cflag |= CS8;
t.c_iflag |= IUTF8;
tcsetattr(1, TCSANOW, &t);
if (tcsetattr(1, TCSANOW, &t)) {
perror("tcsetattr");
}
WRITE(1, ENABLE_SAFE_PASTE);
WRITE(1, ENABLE_MOUSE_TRACKING);
WRITE(1, PROBE_DISPLAY_SIZE);
@ -94,7 +97,7 @@ void getsize(void) {
printf("termios says terminal size is %hu×%hu\r\n", wsize.ws_col,
wsize.ws_row);
} else {
printf("%s\n", strerror(errno));
perror("tcgetwinsize");
}
}
@ -157,12 +160,13 @@ int main(int argc, char *argv[]) {
getsize();
resized = false;
}
bzero(code, sizeof(code));
if ((n = readansi(0, code, sizeof(code))) == -1) {
if (errno == EINTR) continue;
printf("ERROR: READ: %s\r\n", strerror(errno));
perror("read");
exit(1);
}
printf("%`'.*s ", n, code);
printf("%`'.*s (got %d) ", n, code, n);
if (iscntrl(code[0]) && !code[1]) {
printf("is CTRL-%c a.k.a. ^%c\r\n", CTRL(code[0]), CTRL(code[0]));
if (code[0] == CTRL('C') || code[0] == CTRL('D')) break;