From 1b43702731178ae8c2e4d5155e20ae1be6aa49c0 Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Tue, 11 Aug 2026 21:05:49 +0200 Subject: LSP: use 0 (NULL) as the invalid value for GPid Should fix Windows builds. --- src/lsp.c | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) (limited to 'src/lsp.c') diff --git a/src/lsp.c b/src/lsp.c index 0b33885..bc594df 100644 --- a/src/lsp.c +++ b/src/lsp.c @@ -64,14 +64,17 @@ typedef struct { } teco_lsp_result_t; static struct { - /** Pid of the language server */ + /** + * Pid of the language server. + * This can be a pointer on Windows, + * so use 0 as an invalid Pid. + */ GPid pid; GIOChannel *stdin_chan, *stdout_chan; teco_stailq_head_t list; teco_lsp_result_t *current; } teco_lsp = { - .pid = -1, .list = TECO_STAILQ_HEAD_INITIALIZER(&teco_lsp.list) }; @@ -227,7 +230,7 @@ teco_lsp_cleanup(void) g_io_channel_unref(teco_lsp.stdout_chan); teco_lsp.stdout_chan = NULL; - if (teco_lsp.pid >= 0) { + if (teco_lsp.pid) { /* * Sometimes, clangd will refuse to exit gracefully * even after the shutdown procedure, so we kill it @@ -240,7 +243,7 @@ teco_lsp_cleanup(void) TerminateProcess(teco_lsp.pid, 1); #endif g_spawn_close_pid(teco_lsp.pid); - teco_lsp.pid = -1; + teco_lsp.pid = 0; } teco_lsp_list_clear(&teco_lsp.list); @@ -568,7 +571,7 @@ teco_lsp_launch(GError **error) gboolean teco_lsp_didopen(teco_buffer_t *buffer, GError **error) { - if (teco_lsp.pid < 0) + if (!teco_lsp.pid) /* do nothing until the user queries something */ return TRUE; @@ -614,7 +617,7 @@ gboolean teco_lsp_didchange_insert(teco_buffer_t *buffer, gsize pos, gsize len, const gchar *text, GError **error) { - if (teco_lsp.pid < 0) + if (!teco_lsp.pid) /* do nothing until the user queries something */ return TRUE; @@ -682,7 +685,7 @@ teco_lsp_didchange_insert(teco_buffer_t *buffer, gsize pos, gsize len, gboolean teco_lsp_didchange_delete(teco_buffer_t *buffer, gsize pos, gsize len, GError **error) { - if (teco_lsp.pid < 0) + if (!teco_lsp.pid) /* do nothing until the user queries something */ return TRUE; @@ -739,7 +742,7 @@ teco_lsp_sync(teco_buffer_t *buffer, GError **error) { g_assert(buffer->filename != NULL); - if (teco_lsp.pid < 0) + if (!teco_lsp.pid) /* do nothing until the user queries something */ return TRUE; @@ -772,7 +775,7 @@ teco_lsp_sync(teco_buffer_t *buffer, GError **error) gboolean teco_lsp_didclose(teco_buffer_t *buffer, GError **error) { - if (teco_lsp.pid < 0) + if (!teco_lsp.pid) /* do nothing until the user queries something */ return TRUE; @@ -883,7 +886,7 @@ teco_lsp_parse_location(sj_Reader reader, sj_Value obj, GError **error) static gboolean teco_lsp_lookup_symbol(teco_string_t str, gboolean match_exact, GError **error) { - g_assert(teco_lsp.pid >= 0); + g_assert(teco_lsp.pid); teco_undo_restore_lsp_list(); teco_lsp.list = TECO_STAILQ_HEAD_INITIALIZER(&teco_lsp.list); @@ -975,7 +978,7 @@ teco_lsp_symbol_auto_complete(const gchar *symbol, teco_string_t *insert) memset(insert, 0, sizeof(*insert)); /* server is started on demand */ - if (G_UNLIKELY(teco_lsp.pid < 0) && !teco_lsp_launch(NULL)) + if (G_UNLIKELY(!teco_lsp.pid) && !teco_lsp_launch(NULL)) return FALSE; if (!symbol) @@ -1066,7 +1069,7 @@ static gboolean teco_lsp_lookup_definition(teco_buffer_t *buffer, teco_int_t pos, GError **error) { g_assert(buffer->filename != NULL); - g_assert(teco_lsp.pid >= 0); + g_assert(teco_lsp.pid); teco_undo_restore_lsp_list(); teco_lsp.list = TECO_STAILQ_HEAD_INITIALIZER(&teco_lsp.list); @@ -1137,7 +1140,7 @@ static gboolean teco_lsp_lookup_references(teco_buffer_t *buffer, teco_int_t pos, GError **error) { g_assert(buffer->filename != NULL); - g_assert(teco_lsp.pid >= 0); + g_assert(teco_lsp.pid); teco_undo_restore_lsp_list(); teco_lsp.list = TECO_STAILQ_HEAD_INITIALIZER(&teco_lsp.list); @@ -1205,7 +1208,7 @@ teco_lsp_lookup_references(teco_buffer_t *buffer, teco_int_t pos, GError **error static gboolean teco_lsp_shutdown(GError **error) { - if (teco_lsp.pid < 0) + if (!teco_lsp.pid) return TRUE; static const gchar req[] = "{" @@ -1250,7 +1253,7 @@ teco_state_lsp_lookup_done(teco_machine_main_t *ctx, teco_string_t str, GError * } /* server is started on demand */ - if (G_UNLIKELY(teco_lsp.pid < 0) && !teco_lsp_launch(error)) + if (G_UNLIKELY(!teco_lsp.pid) && !teco_lsp_launch(error)) return NULL; if (str.len && !teco_lsp_lookup_symbol(str, !have_colon, error)) @@ -1281,7 +1284,7 @@ teco_state_lsp_lookup_done(teco_machine_main_t *ctx, teco_string_t str, GError * } /* server is started on demand */ - if (G_UNLIKELY(teco_lsp.pid < 0) && !teco_lsp_launch(error)) + if (G_UNLIKELY(!teco_lsp.pid) && !teco_lsp_launch(error)) return NULL; gboolean rc = have_colon ? teco_lsp_lookup_references(teco_ring_current, v, error) -- cgit v1.2.3