gdm: update to 2.32.0.

This commit is contained in:
Juan RP 2010-10-24 21:56:57 +02:00
parent 149f467c33
commit fd7576910e
2 changed files with 123 additions and 3 deletions

View file

@ -0,0 +1,118 @@
diff --git a/daemon/gdm-server.c b/daemon/gdm-server.c
index 39def47..03488fd 100644
--- daemon/gdm-server.c.old
+++ daemon/gdm-server.c
@@ -33,6 +33,8 @@
#include <grp.h>
#include <signal.h>
#include <sys/resource.h>
+#include <sys/ioctl.h>
+#include <sys/vt.h>
#include <glib.h>
#include <glib/gi18n.h>
@@ -150,6 +152,92 @@ _gdm_server_query_ck_for_display_device (GdmServer *server)
return out;
}
+#ifndef O_NOCTTY
+# define O_NOCTTY 0
+#endif
+
+static int
+open_vt (int vtno)
+{
+ char *vtname;
+ int fd;
+
+ vtname = g_strdup_printf ("/dev/tty%d", vtno);
+
+ do {
+ errno = 0;
+ fd = open (vtname, O_RDWR | O_NOCTTY, 0);
+ } while (errno == EINTR);
+
+ g_free (vtname);
+ return fd;
+}
+
+static gint
+find_first_probably_free_vt (void)
+{
+ int fd, fdv;
+ int vtno;
+ unsigned short vtmask;
+ struct vt_stat vtstat;
+ guint v_state;
+
+ fdv = -1;
+
+ do {
+ errno = 0;
+ fd = open ("/dev/console", O_WRONLY | O_NOCTTY, 0);
+ } while (errno == EINTR);
+
+ if (fd >= 0) {
+ if (ioctl (fd, VT_GETSTATE, &vtstat) >= 0) {
+ v_state = vtstat.v_state;
+ } else {
+ close (fd);
+ v_state = 0;
+ fd = -1;
+ }
+ } else {
+ v_state = 0;
+ }
+
+ if (fd < 0) {
+ do {
+ errno = 0;
+ fd = open ("/dev/console", O_RDONLY | O_NOCTTY, 0);
+ } while (errno == EINTR);
+
+ if (fd >= 0) {
+ if (ioctl (fd, VT_GETSTATE, &vtstat) >= 0)
+ v_state = vtstat.v_state;
+ }
+ }
+
+ for (vtno = 7, vtmask = 1 << vtno; vtmask; vtno++, vtmask <<= 1) {
+ /* Is this console in use? */
+ if (v_state & vtmask)
+ continue;
+
+ /* No, try to open it */
+ fdv = open_vt (vtno);
+ if (fdv >= 0)
+ break;
+
+ /* If we're here, kernel indicated that the console was free,
+ * but we failed to open it. Just go on to higher VTs. */
+ }
+
+ if (fdv >= 0)
+ close (fdv);
+ else
+ vtno = -1;
+
+ if (fd >= 0)
+ close (fd);
+
+ return vtno;
+}
+
char *
gdm_server_get_display_device (GdmServer *server)
{
@@ -310,6 +398,11 @@ gdm_server_resolve_command_line (GdmServer *server,
if (vtarg != NULL && ! gotvtarg) {
argv[len++] = g_strdup (vtarg);
+ } else if (!query_in_arglist && !gotvtarg) {
+ gint vtnum = find_first_probably_free_vt ();
+
+ if (vtnum > 0)
+ argv [len++] = g_strdup_printf ("vt%d", vtnum);
}
argv[len++] = NULL;

View file

@ -1,7 +1,7 @@
# Template file for 'gdm' # Template file for 'gdm'
pkgname=gdm pkgname=gdm
version=2.30.2 version=2.32.0
distfiles="${GNOME_SITE}/$pkgname/2.30/$pkgname-$version.tar.bz2" distfiles="${GNOME_SITE}/$pkgname/2.32/$pkgname-$version.tar.bz2"
build_style=gnu_configure build_style=gnu_configure
configure_args="--disable-schemas-install --disable-scrollkeeper configure_args="--disable-schemas-install --disable-scrollkeeper
--with-gconf-schema-file-dir=/usr/share/gconf/schemas --with-gconf-schema-file-dir=/usr/share/gconf/schemas
@ -10,7 +10,7 @@ configure_args="--disable-schemas-install --disable-scrollkeeper
--with-user=gdm --with-group=gdm --with-xevie" --with-user=gdm --with-group=gdm --with-xevie"
short_desc="GNOME Display Manager" short_desc="GNOME Display Manager"
maintainer="Juan RP <xtraeme@gmail.com>" maintainer="Juan RP <xtraeme@gmail.com>"
checksum=884f4816a78f8f1eece8f1468f19dc01c5350d4a3513d3c0e854f45f870c1ec5 checksum=f47acd19ed10d6fbb37c3e2b54f5b392c7020db67f71db3f75567ead30ab2fa4
long_desc=" long_desc="
GDM is the GNOME Display Manager, it is the little proggie that runs GDM is the GNOME Display Manager, it is the little proggie that runs
in the background, runs your X sessions, presents you with a login box in the background, runs your X sessions, presents you with a login box
@ -49,6 +49,8 @@ Add_dependency run libgnomecanvas
Add_dependency run libgnome Add_dependency run libgnome
Add_dependency run popt Add_dependency run popt
Add_dependency run libart Add_dependency run libart
Add_dependency run libpng
Add_dependency run gdk-pixbuf
Add_dependency run gtk+ Add_dependency run gtk+
Add_dependency run atk Add_dependency run atk
Add_dependency run pango Add_dependency run pango