+#define _GNU_SOURCE
+#define __USE_GNU
+
#include <stdlib.h>
+#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
+#include <sys/ioctl.h>
#include <pwd.h>
#include <unistd.h>
#include <dirent.h>
#include <grp.h>
#include <security/pam_appl.h>
#include <fcntl.h>
-#define __USE_GNU
#include <dlfcn.h>
+#include <utmpx.h>
#ifdef __linux__
#include <linux/vt.h>
#endif
#include <xcb/xcb.h>
#include <gio/gunixsocketaddress.h>
+#include "status.h"
+
#define LOGIN_PROMPT "login:"
static int console_fd = -1;
static gchar *
redirect_path (const gchar *path)
{
- size_t offset;
- gboolean matches;
-
// Don't redirect if inside the running directory
if (g_str_has_prefix (path, g_getenv ("LIGHTDM_TEST_ROOT")))
return g_strdup (path);
}
int
-stat64 (const char *path, struct stat *buf)
+stat64 (const char *path, struct stat64 *buf)
{
- int (*_stat64) (const char *path, struct stat *buf);
+ int (*_stat64) (const char *path, struct stat64 *buf);
gchar *new_path = NULL;
int ret;
- _stat64 = (int (*)(const char *path, struct stat *buf)) dlsym (RTLD_NEXT, "stat64");
+ _stat64 = (int (*)(const char *path, struct stat64 *buf)) dlsym (RTLD_NEXT, "stat64");
new_path = redirect_path (path);
ret = _stat64 (new_path, buf);
}
int
-__xstat64 (int version, const char *path, struct stat *buf)
+__xstat64 (int version, const char *path, struct stat64 *buf)
{
- int (*___xstat64) (int version, const char *path, struct stat *buf);
+ int (*___xstat64) (int version, const char *path, struct stat64 *buf);
gchar *new_path = NULL;
int ret;
- ___xstat64 = (int (*)(int version, const char *path, struct stat *buf)) dlsym (RTLD_NEXT, "__xstat64");
+ ___xstat64 = (int (*)(int version, const char *path, struct stat64 *buf)) dlsym (RTLD_NEXT, "__xstat64");
new_path = redirect_path (path);
ret = ___xstat64 (version, new_path, buf);
}
int
-ioctl (int d, int request, void *data)
+ioctl (int d, unsigned long request, ...)
{
- int (*_ioctl) (int d, int request, void *data);
+ int (*_ioctl) (int d, int request, ...);
- _ioctl = (int (*)(int d, int request, void *data)) dlsym (RTLD_NEXT, "ioctl");
+ _ioctl = (int (*)(int d, int request, ...)) dlsym (RTLD_NEXT, "ioctl");
if (d > 0 && d == console_fd)
{
struct vt_stat *console_state;
- int *n;
int vt;
+ va_list ap;
switch (request)
{
case VT_GETSTATE:
- console_state = data;
+ va_start (ap, request);
+ console_state = va_arg (ap, struct vt_stat *);
+ va_end (ap);
console_state->v_active = active_vt;
break;
case VT_ACTIVATE:
- vt = GPOINTER_TO_INT (data);
+ va_start (ap, request);
+ vt = va_arg (ap, int);
+ va_end (ap);
if (vt != active_vt)
{
active_vt = vt;
return 0;
}
else
+ {
+ va_list ap;
+ void *data;
+
+ va_start (ap, request);
+ data = va_arg (ap, void *);
+ va_end (ap);
return _ioctl (d, request, data);
+ }
}
int
}
static void
-load_passwd_file ()
+load_passwd_file (void)
{
gchar *path, *data = NULL, **lines;
gint i;
}
static void
-load_group_file ()
+load_group_file (void)
{
gchar *path, *data = NULL, **lines;
gint i;
{
}
-struct utmp *
-pututxline (struct utmp *ut)
+struct utmpx *
+pututxline (const struct utmpx *ut)
{
- return ut;
+ return (struct utmpx *)ut;
}
void