| To: vim_dev@googlegroups.com |
| Subject: Patch 7.3.344 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| Patch 7.3.344 |
| Problem: Problem with GUI startup related to XInitThreads. |
| Solution: Use read() and write() instead of fputs() and fread(). (James |
| Vega) |
| Files: src/gui.c |
| |
| |
| |
| |
| |
| *** 212,218 **** |
| 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 |
| --- 212,217 ---- |
| |
| *** 290,308 **** |
| 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) |
| { |
| ! fputs(gui.in_use ? "ok" : "fail", parent_file); |
| ! fclose(parent_file); |
| } |
| |
| /* If we failed to start the GUI, exit now. */ |
| --- 289,305 ---- |
| gui_mch_forked(); |
| # endif |
| |
| /* Try to start the GUI */ |
| gui_attempt_start(); |
| |
| /* Notify the parent */ |
| ! if (!pipe_error) |
| { |
| ! 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,339 **** |
| static int |
| gui_read_child_pipe(int fd) |
| { |
| ! size_t bytes_read; |
| ! FILE *file; |
| ! char buffer[10]; |
| ! |
| ! file = fdopen(fd, "r"); |
| ! if (!file) |
| return GUI_CHILD_IO_ERROR; |
| ! |
| ! bytes_read = fread(buffer, sizeof(char), sizeof(buffer)-1, file); |
| ! buffer[bytes_read] = '\0'; |
| ! fclose(file); |
| if (strcmp(buffer, "ok") == 0) |
| return GUI_CHILD_OK; |
| return GUI_CHILD_FAILED; |
| --- 320,335 ---- |
| static int |
| gui_read_child_pipe(int fd) |
| { |
| ! 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; |
| ! buffer[bytes_read] = NUL; |
| if (strcmp(buffer, "ok") == 0) |
| return GUI_CHILD_OK; |
| return GUI_CHILD_FAILED; |
| |
| |
| |
| *** 716,717 **** |
| --- 716,719 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 344, |
| /**/ |
| |
| -- |
| From "know your smileys": |
| *<|:-) Santa Claus (Ho Ho Ho) |
| |
| /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ |
| /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ |
| \\\ an exciting new programming language -- http://www.Zimbu.org /// |
| \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |