X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=macosx%2Fosxmain.m;h=d8202e24960cdda4949c2be01a63313f3bfc3e2f;hb=406e62f77b3603f3efd2827930513b8c92e83dae;hp=bd579852acf00e115f51ef13f5a81f45d10b6913;hpb=46bfde32e84f331f65fac3fc6e9948d78a723d95;p=PuTTY.git diff --git a/macosx/osxmain.m b/macosx/osxmain.m index bd579852..d8202e24 100644 --- a/macosx/osxmain.m +++ b/macosx/osxmain.m @@ -20,8 +20,6 @@ AppController *controller; * and Unix PuTTY code. */ -const char platform_x11_best_transport[] = "unix"; - char *platform_get_x_display(void) { return NULL; } @@ -60,28 +58,47 @@ char *x_get_default(const char *key) return NULL; /* this is a stub */ } -void modalfatalbox(char *p, ...) +static void commonfatalbox(char *p, va_list ap) +{ + char errorbuf[2048]; + NSAlert *alert; + + /* + * We may have come here because we ran out of memory, in which + * case it's entirely likely that that further memory + * allocations will fail. So (a) we use vsnprintf to format the + * error message rather than the usual dupvprintf; and (b) we + * have a fallback way to get the message out via stderr if + * even creating an NSAlert fails. + */ + vsnprintf(errorbuf, lenof(errorbuf), p, ap); + + alert = [NSAlert alloc]; + if (!alert) { + fprintf(stderr, "fatal error (and NSAlert failed): %s\n", errorbuf); + } else { + alert = [[alert init] autorelease]; + [alert addButtonWithTitle:@"Terminate"]; + [alert setInformativeText:[NSString stringWithCString:errorbuf]]; + [alert runModal]; + } + exit(1); +} + +void fatalbox(char *p, ...) { - /* FIXME: proper OS X GUI stuff */ va_list ap; - fprintf(stderr, "FATAL ERROR: "); va_start(ap, p); - vfprintf(stderr, p, ap); + commonfatalbox(p, ap); va_end(ap); - fputc('\n', stderr); - exit(1); } -void fatalbox(char *p, ...) +void modalfatalbox(char *p, ...) { - /* FIXME: proper OS X GUI stuff */ va_list ap; - fprintf(stderr, "FATAL ERROR: "); va_start(ap, p); - vfprintf(stderr, p, ap); + commonfatalbox(p, ap); va_end(ap); - fputc('\n', stderr); - exit(1); } void cmdline_error(char *p, ...)