}
/*
+ * When setting up X forwarding, we should send the screen number
+ * from the specified local display. This function extracts it from
+ * the display string.
+ */
+int x11_get_screen_number(char *display)
+{
+ int n;
+
+ n = strcspn(display, ":");
+ if (!display[n])
+ return 0;
+ n = strcspn(display, ".");
+ if (!display[n])
+ return 0;
+ return atoi(display + n + 1);
+}
+
+/*
* Called to set up the raw connection.
*
* Returns an error message, or NULL on success.
displaynum = 0; /* sensible default */
if (n > sizeof(host) - 1)
n = sizeof(host) - 1;
- strncpy(host, display, n);
- host[n] = '\0';
+ if (n > 0) {
+ strncpy(host, display, n);
+ host[n] = '\0';
+ } else {
+ /*
+ * Local display numbers, particularly on Unix, often omit
+ * the display part completely.
+ */
+ strcpy(host, "localhost");
+ }
/*
* Try to find host.