# HG changeset patch # User Bram Moolenaar # Date 1319138881 -7200 # Node ID 7ba2f171cdaca18571b5e73dece426411c4f124a # Parent 5da0b66c52a71d3537a85738a64e9a2ae8473b29 updated for version 7.3.344 Problem: Problem with GUI startup related to XInitThreads. Solution: Use read() and write() instead of fputs() and fread(). (James Vega) diff --git a/src/gui.c b/src/gui.c --- a/src/gui.c +++ b/src/gui.c @@ -212,7 +212,6 @@ gui_do_fork() int status; int exit_status; pid_t pid = -1; - FILE *parent_file; /* Setup a pipe between the child and the parent, so that the parent * knows when the child has done the setsid() call and is allowed to @@ -290,19 +289,17 @@ gui_do_fork() gui_mch_forked(); # endif - if (!pipe_error) - parent_file = fdopen(pipefd[1], "w"); - else - parent_file = NULL; - /* Try to start the GUI */ gui_attempt_start(); /* Notify the parent */ - if (parent_file != NULL) + if (!pipe_error) { - fputs(gui.in_use ? "ok" : "fail", parent_file); - fclose(parent_file); + if (gui.in_use) + write_eintr(pipefd[1], "ok", 3); + else + write_eintr(pipefd[1], "fail", 5); + close(pipefd[1]); } /* If we failed to start the GUI, exit now. */ @@ -323,17 +320,16 @@ gui_do_fork() static int gui_read_child_pipe(int fd) { - size_t bytes_read; - FILE *file; - char buffer[10]; - - file = fdopen(fd, "r"); - if (!file) + long bytes_read; +#define READ_BUFFER_SIZE 10 + char buffer[READ_BUFFER_SIZE]; + + bytes_read = read_eintr(fd, buffer, READ_BUFFER_SIZE - 1); +#undef READ_BUFFER_SIZE + close(fd); + if (bytes_read < 0) return GUI_CHILD_IO_ERROR; - - bytes_read = fread(buffer, sizeof(char), sizeof(buffer)-1, file); - buffer[bytes_read] = '\0'; - fclose(file); + buffer[bytes_read] = NUL; if (strcmp(buffer, "ok") == 0) return GUI_CHILD_OK; return GUI_CHILD_FAILED; diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -715,6 +715,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 344, +/**/ 343, /**/ 342,