Fix some bugs

- addr2line backtrace should continue on eintr
- lua crashes if we try to iterate a non-table
This commit is contained in:
Justine Tunney 2022-04-27 20:18:34 -07:00
parent 6a145a9262
commit cc0d1ec076
3 changed files with 22 additions and 10 deletions

View file

@ -116,7 +116,17 @@ static int PrintBacktraceUsingAddr2line(int fd, const struct StackFrame *bp) {
_exit(127); _exit(127);
} }
close(pipefds[1]); close(pipefds[1]);
while ((got = read(pipefds[0], buf, kBacktraceBufSize)) > 0) { for (;;) {
got = read(pipefds[0], buf, kBacktraceBufSize);
if (!got) break;
if (got == -1 && errno == EINTR) {
errno = 0;
continue;
}
if (got == -1) {
kprintf("error reading backtrace %m\n");
break;
}
p1 = buf; p1 = buf;
p3 = p1 + got; p3 = p1 + got;
/* /*

View file

@ -1834,7 +1834,7 @@ void linenoiseEnd(struct linenoiseState *l) {
} }
static int CompareStrings(const void *a, const void *b) { static int CompareStrings(const void *a, const void *b) {
return strcasecmp(*(const char **)a, *(const char **)b); return strcmp(*(const char **)a, *(const char **)b);
} }
/** /**

View file

@ -140,18 +140,20 @@ void lua_readline_completions (const char *p, linenoiseCompletions *c) {
} }
// search final object // search final object
lua_pushnil(L); if (lua_type(L, -1) == LUA_TTABLE) {
while (lua_next(L, -2)) { lua_pushnil(L);
if (lua_type(L, -2) == LUA_TSTRING) { while (lua_next(L, -2)) {
name = lua_tostring(L, -2); if (lua_type(L, -2) == LUA_TSTRING) {
if (startswithi(name, a)) { name = lua_tostring(L, -2);
lua_readline_addcompletion(c, xasprintf("%.*s%s", a - p, p, name)); if (startswithi(name, a)) {
lua_readline_addcompletion(c, xasprintf("%.*s%s", a - p, p, name));
}
} }
lua_pop(L, 1);
} }
lua_pop(L, 1);
} }
lua_pop(L, 1); lua_pop(L, 1); // pop table
for (i = 0; i < ARRAYLEN(kKeywordHints); ++i) { for (i = 0; i < ARRAYLEN(kKeywordHints); ++i) {
if (startswithi(kKeywordHints[i], p)) { if (startswithi(kKeywordHints[i], p)) {