mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2025-12-29 06:50:07 +01:00
Merge branch 'server-1.14-branch' of git://people.freedesktop.org/~whot/xserver into server-1.14-branch
This commit is contained in:
commit
a01839e8d3
11 changed files with 214 additions and 29 deletions
|
|
@ -2216,6 +2216,14 @@ AC_SUBST([prefix])
|
|||
|
||||
AC_CONFIG_COMMANDS([sdksyms], [touch hw/xfree86/sdksyms.dep])
|
||||
|
||||
if test "x$CONFIG_HAL" = xno && test "x$CONFIG_UDEV" = xno; then
|
||||
AC_WARN([
|
||||
***********************************************
|
||||
Neither HAL nor udev backend will be enabled.
|
||||
Input device hotplugging will not be available!
|
||||
***********************************************])
|
||||
fi
|
||||
|
||||
AC_OUTPUT([
|
||||
Makefile
|
||||
glx/Makefile
|
||||
|
|
|
|||
|
|
@ -501,9 +501,7 @@ appendValuatorInfo(DeviceChangedEvent *dce, xXIValuatorInfo * info,
|
|||
info->min.frac = 0;
|
||||
info->max.integral = dce->valuators[axisnumber].max;
|
||||
info->max.frac = 0;
|
||||
/* FIXME: value */
|
||||
info->value.integral = 0;
|
||||
info->value.frac = 0;
|
||||
info->value = double_to_fp3232(dce->valuators[axisnumber].value);
|
||||
info->resolution = dce->valuators[axisnumber].resolution;
|
||||
info->number = axisnumber;
|
||||
info->mode = dce->valuators[axisnumber].mode;
|
||||
|
|
|
|||
|
|
@ -277,6 +277,7 @@ CreateClassesChangedEvent(InternalEvent *event,
|
|||
dce->valuators[i].mode = slave->valuator->axes[i].mode;
|
||||
dce->valuators[i].name = slave->valuator->axes[i].label;
|
||||
dce->valuators[i].scroll = slave->valuator->axes[i].scroll;
|
||||
dce->valuators[i].value = slave->valuator->axisVal[i];
|
||||
}
|
||||
}
|
||||
if (slave->key) {
|
||||
|
|
|
|||
|
|
@ -885,7 +885,7 @@ glxDRILeaveVT(ScrnInfoPtr scrn)
|
|||
__GLXDRIscreen *screen = (__GLXDRIscreen *)
|
||||
glxGetScreen(xf86ScrnToScreen(scrn));
|
||||
|
||||
LogMessage(X_INFO, "AIGLX: Suspending AIGLX clients for VT switch\n");
|
||||
LogMessageVerbSigSafe(X_INFO, -1, "AIGLX: Suspending AIGLX clients for VT switch\n");
|
||||
|
||||
glxSuspendClients();
|
||||
|
||||
|
|
|
|||
|
|
@ -835,7 +835,7 @@ glxDRILeaveVT(ScrnInfoPtr scrn)
|
|||
__GLXDRIscreen *screen = (__GLXDRIscreen *)
|
||||
glxGetScreen(xf86ScrnToScreen(scrn));
|
||||
|
||||
LogMessage(X_INFO, "AIGLX: Suspending AIGLX clients for VT switch\n");
|
||||
LogMessageVerbSigSafe(X_INFO, -1, "AIGLX: Suspending AIGLX clients for VT switch\n");
|
||||
|
||||
glxSuspendClients();
|
||||
|
||||
|
|
|
|||
|
|
@ -237,13 +237,11 @@ ephyrMapFramebuffer(KdScreenInfo * screen)
|
|||
KdComputePointerMatrix(&m, ephyrRandr, screen->width, screen->height);
|
||||
KdSetPointerMatrix(&m);
|
||||
|
||||
priv->bytes_per_line =
|
||||
((screen->width * screen->fb.bitsPerPixel + 31) >> 5) << 2;
|
||||
|
||||
buffer_height = ephyrBufferHeight(screen);
|
||||
|
||||
priv->base =
|
||||
hostx_screen_init(screen, screen->width, screen->height, buffer_height);
|
||||
hostx_screen_init(screen, screen->width, screen->height, buffer_height,
|
||||
&priv->bytes_per_line, &screen->fb.bitsPerPixel);
|
||||
|
||||
if ((scrpriv->randr & RR_Rotate_0) && !(scrpriv->randr & RR_Reflect_All)) {
|
||||
scrpriv->shadow = FALSE;
|
||||
|
|
|
|||
|
|
@ -617,7 +617,8 @@ hostx_set_cmap_entry(unsigned char idx,
|
|||
*/
|
||||
void *
|
||||
hostx_screen_init(EphyrScreenInfo screen,
|
||||
int width, int height, int buffer_height)
|
||||
int width, int height, int buffer_height,
|
||||
int *bytes_per_line, int *bits_per_pixel)
|
||||
{
|
||||
int bitmap_pad;
|
||||
Bool shm_success = False;
|
||||
|
|
@ -694,6 +695,9 @@ hostx_screen_init(EphyrScreenInfo screen,
|
|||
malloc(host_screen->ximg->bytes_per_line * buffer_height);
|
||||
}
|
||||
|
||||
*bytes_per_line = host_screen->ximg->bytes_per_line;
|
||||
*bits_per_pixel = host_screen->ximg->bits_per_pixel;
|
||||
|
||||
XResizeWindow(HostX.dpy, host_screen->win, width, height);
|
||||
|
||||
/* Ask the WM to keep our size static */
|
||||
|
|
|
|||
|
|
@ -193,7 +193,8 @@ hostx_set_cmap_entry(unsigned char idx,
|
|||
unsigned char r, unsigned char g, unsigned char b);
|
||||
|
||||
void *hostx_screen_init(EphyrScreenInfo screen,
|
||||
int width, int height, int buffer_height);
|
||||
int width, int height, int buffer_height,
|
||||
int *bytes_per_line, int *bits_per_pixel);
|
||||
|
||||
void
|
||||
|
||||
|
|
|
|||
|
|
@ -175,6 +175,7 @@ struct _DeviceChangedEvent {
|
|||
struct {
|
||||
uint32_t min; /**< Minimum value */
|
||||
uint32_t max; /**< Maximum value */
|
||||
double value; /**< Current value */;
|
||||
/* FIXME: frac parts of min/max */
|
||||
uint32_t resolution; /**< Resolution counts/m */
|
||||
uint8_t mode; /**< Relative or Absolute */
|
||||
|
|
|
|||
115
os/log.c
115
os/log.c
|
|
@ -250,7 +250,7 @@ void
|
|||
LogClose(enum ExitCode error)
|
||||
{
|
||||
if (logFile) {
|
||||
ErrorF("Server terminated %s (%d). Closing log file.\n",
|
||||
ErrorFSigSafe("Server terminated %s (%d). Closing log file.\n",
|
||||
(error == EXIT_NO_ERROR) ? "successfully" : "with error", error);
|
||||
fclose(logFile);
|
||||
logFile = NULL;
|
||||
|
|
@ -279,6 +279,59 @@ LogSetParameter(LogParameter param, int value)
|
|||
}
|
||||
}
|
||||
|
||||
enum {
|
||||
LMOD_LONG = 0x1,
|
||||
LMOD_LONGLONG = 0x2,
|
||||
LMOD_SHORT = 0x4,
|
||||
LMOD_SIZET = 0x8,
|
||||
};
|
||||
|
||||
/**
|
||||
* Parse non-digit length modifiers and set the corresponding flag in
|
||||
* flags_return.
|
||||
*
|
||||
* @return the number of bytes parsed
|
||||
*/
|
||||
static int parse_length_modifier(const char *format, size_t len, int *flags_return)
|
||||
{
|
||||
int idx = 0;
|
||||
int length_modifier = 0;
|
||||
|
||||
while (idx < len) {
|
||||
switch (format[idx]) {
|
||||
case 'l':
|
||||
BUG_RETURN_VAL(length_modifier & LMOD_SHORT, 0);
|
||||
|
||||
if (length_modifier & LMOD_LONG)
|
||||
length_modifier |= LMOD_LONGLONG;
|
||||
else
|
||||
length_modifier |= LMOD_LONG;
|
||||
break;
|
||||
case 'h':
|
||||
BUG_RETURN_VAL(length_modifier & (LMOD_LONG|LMOD_LONGLONG), 0);
|
||||
length_modifier |= LMOD_SHORT;
|
||||
/* gcc says 'short int' is promoted to 'int' when
|
||||
* passed through '...', so ignored during
|
||||
* processing */
|
||||
break;
|
||||
case 'z':
|
||||
length_modifier |= LMOD_SIZET;
|
||||
break;
|
||||
default:
|
||||
goto out;
|
||||
}
|
||||
idx++;
|
||||
}
|
||||
|
||||
out:
|
||||
*flags_return = length_modifier;
|
||||
return idx;
|
||||
}
|
||||
|
||||
/**
|
||||
* Signal-safe snprintf, with some limitations over snprintf. Be careful
|
||||
* which directives you use.
|
||||
*/
|
||||
static int
|
||||
pnprintf(char *string, size_t size, const char *f, va_list args)
|
||||
{
|
||||
|
|
@ -293,6 +346,7 @@ pnprintf(char *string, size_t size, const char *f, va_list args)
|
|||
int64_t si;
|
||||
|
||||
for (; f_idx < f_len && s_idx < size - 1; f_idx++) {
|
||||
int length_modifier = 0;
|
||||
if (f[f_idx] != '%') {
|
||||
string[s_idx++] = f[f_idx];
|
||||
continue;
|
||||
|
|
@ -300,10 +354,18 @@ pnprintf(char *string, size_t size, const char *f, va_list args)
|
|||
|
||||
f_idx++;
|
||||
|
||||
/* silently swallow length modifiers */
|
||||
/* silently swallow digit length modifiers */
|
||||
while (f_idx < f_len && ((f[f_idx] >= '0' && f[f_idx] <= '9') || f[f_idx] == '.'))
|
||||
f_idx++;
|
||||
|
||||
/* non-digit length modifiers */
|
||||
if (f_idx < f_len) {
|
||||
int parsed_bytes = parse_length_modifier(&f[f_idx], f_len - f_idx, &length_modifier);
|
||||
if (parsed_bytes < 0)
|
||||
return 0;
|
||||
f_idx += parsed_bytes;
|
||||
}
|
||||
|
||||
if (f_idx >= f_len)
|
||||
break;
|
||||
|
||||
|
|
@ -317,7 +379,15 @@ pnprintf(char *string, size_t size, const char *f, va_list args)
|
|||
break;
|
||||
|
||||
case 'u':
|
||||
ui = va_arg(args, unsigned);
|
||||
if (length_modifier & LMOD_LONGLONG)
|
||||
ui = va_arg(args, unsigned long long);
|
||||
else if (length_modifier & LMOD_LONG)
|
||||
ui = va_arg(args, unsigned long);
|
||||
else if (length_modifier & LMOD_SIZET)
|
||||
ui = va_arg(args, size_t);
|
||||
else
|
||||
ui = va_arg(args, unsigned);
|
||||
|
||||
FormatUInt64(ui, number);
|
||||
p_len = strlen_sigsafe(number);
|
||||
|
||||
|
|
@ -326,7 +396,15 @@ pnprintf(char *string, size_t size, const char *f, va_list args)
|
|||
break;
|
||||
case 'i':
|
||||
case 'd':
|
||||
si = va_arg(args, int);
|
||||
if (length_modifier & LMOD_LONGLONG)
|
||||
si = va_arg(args, long long);
|
||||
else if (length_modifier & LMOD_LONG)
|
||||
si = va_arg(args, long);
|
||||
else if (length_modifier & LMOD_SIZET)
|
||||
si = va_arg(args, ssize_t);
|
||||
else
|
||||
si = va_arg(args, int);
|
||||
|
||||
FormatInt64(si, number);
|
||||
p_len = strlen_sigsafe(number);
|
||||
|
||||
|
|
@ -347,7 +425,15 @@ pnprintf(char *string, size_t size, const char *f, va_list args)
|
|||
break;
|
||||
|
||||
case 'x':
|
||||
ui = va_arg(args, unsigned);
|
||||
if (length_modifier & LMOD_LONGLONG)
|
||||
ui = va_arg(args, unsigned long long);
|
||||
else if (length_modifier & LMOD_LONG)
|
||||
ui = va_arg(args, unsigned long);
|
||||
else if (length_modifier & LMOD_SIZET)
|
||||
ui = va_arg(args, size_t);
|
||||
else
|
||||
ui = va_arg(args, unsigned);
|
||||
|
||||
FormatUInt64Hex(ui, number);
|
||||
p_len = strlen_sigsafe(number);
|
||||
|
||||
|
|
@ -364,7 +450,18 @@ pnprintf(char *string, size_t size, const char *f, va_list args)
|
|||
string[s_idx++] = number[i];
|
||||
}
|
||||
break;
|
||||
case 'c':
|
||||
{
|
||||
char c = va_arg(args, int);
|
||||
if (s_idx < size - 1)
|
||||
string[s_idx++] = c;
|
||||
}
|
||||
break;
|
||||
case '%':
|
||||
string[s_idx++] = '%';
|
||||
break;
|
||||
default:
|
||||
BUG_WARN_MSG(f[f_idx], "Unsupported printf directive '%c'\n", f[f_idx]);
|
||||
va_arg(args, char*);
|
||||
string[s_idx++] = '%';
|
||||
if (s_idx < size - 1)
|
||||
|
|
@ -781,9 +878,9 @@ FatalError(const char *f, ...)
|
|||
static Bool beenhere = FALSE;
|
||||
|
||||
if (beenhere)
|
||||
ErrorF("\nFatalError re-entered, aborting\n");
|
||||
ErrorFSigSafe("\nFatalError re-entered, aborting\n");
|
||||
else
|
||||
ErrorF("\nFatal server error:\n");
|
||||
ErrorFSigSafe("\nFatal server error:\n");
|
||||
|
||||
va_start(args, f);
|
||||
|
||||
|
|
@ -800,9 +897,9 @@ FatalError(const char *f, ...)
|
|||
va_end(apple_args);
|
||||
}
|
||||
#endif
|
||||
VErrorF(f, args);
|
||||
VErrorFSigSafe(f, args);
|
||||
va_end(args);
|
||||
ErrorF("\n");
|
||||
ErrorFSigSafe("\n");
|
||||
if (!beenhere)
|
||||
OsVendorFatalError(f, args2);
|
||||
va_end(args2);
|
||||
|
|
|
|||
|
|
@ -158,6 +158,8 @@ static void logging_format(void)
|
|||
char buf[1024];
|
||||
int i;
|
||||
unsigned int ui;
|
||||
long li;
|
||||
unsigned long lui;
|
||||
FILE *f;
|
||||
char read_buf[2048];
|
||||
char *logmsg;
|
||||
|
|
@ -194,6 +196,23 @@ static void logging_format(void)
|
|||
read_log_msg(logmsg);
|
||||
assert(strcmp(logmsg, "(EE) %s %d %u %% %p %i\n") == 0);
|
||||
|
||||
/* literal % */
|
||||
LogMessageVerbSigSafe(X_ERROR, -1, "test %%\n");
|
||||
read_log_msg(logmsg);
|
||||
assert(strcmp(logmsg, "(EE) test %\n") == 0);
|
||||
|
||||
/* character */
|
||||
LogMessageVerbSigSafe(X_ERROR, -1, "test %c\n", 'a');
|
||||
read_log_msg(logmsg);
|
||||
assert(strcmp(logmsg, "(EE) test a\n") == 0);
|
||||
|
||||
/* something unsupported % */
|
||||
LogMessageVerbSigSafe(X_ERROR, -1, "test %Q\n");
|
||||
read_log_msg(logmsg);
|
||||
assert(strstr(logmsg, "BUG") != NULL);
|
||||
LogMessageVerbSigSafe(X_ERROR, -1, "\n");
|
||||
fseek(f, 0, SEEK_END);
|
||||
|
||||
/* string substitution */
|
||||
LogMessageVerbSigSafe(X_ERROR, -1, "%s\n", "substituted string");
|
||||
read_log_msg(logmsg);
|
||||
|
|
@ -207,6 +226,14 @@ static void logging_format(void)
|
|||
LogMessageVerbSigSafe(X_ERROR, -1, "\n");
|
||||
fseek(f, 0, SEEK_END);
|
||||
|
||||
#warning Ignore compiler warning below "unknown conversion type character". This is intentional.
|
||||
/* %hld is bogus */
|
||||
LogMessageVerbSigSafe(X_ERROR, -1, "%hld\n", 4);
|
||||
read_log_msg(logmsg);
|
||||
assert(strstr(logmsg, "BUG") != NULL);
|
||||
LogMessageVerbSigSafe(X_ERROR, -1, "\n");
|
||||
fseek(f, 0, SEEK_END);
|
||||
|
||||
/* number substitution */
|
||||
ui = 0;
|
||||
do {
|
||||
|
|
@ -215,12 +242,47 @@ static void logging_format(void)
|
|||
LogMessageVerbSigSafe(X_ERROR, -1, "%u\n", ui);
|
||||
read_log_msg(logmsg);
|
||||
assert(strcmp(logmsg, expected) == 0);
|
||||
|
||||
sprintf(expected, "(EE) %x\n", ui);
|
||||
LogMessageVerbSigSafe(X_ERROR, -1, "%x\n", ui);
|
||||
read_log_msg(logmsg);
|
||||
assert(strcmp(logmsg, expected) == 0);
|
||||
|
||||
if (ui == 0)
|
||||
ui = 1;
|
||||
else
|
||||
ui <<= 1;
|
||||
} while(ui);
|
||||
|
||||
lui = 0;
|
||||
do {
|
||||
char expected[30];
|
||||
sprintf(expected, "(EE) %lu\n", lui);
|
||||
LogMessageVerbSigSafe(X_ERROR, -1, "%lu\n", lui);
|
||||
read_log_msg(logmsg);
|
||||
|
||||
sprintf(expected, "(EE) %lld\n", (unsigned long long)ui);
|
||||
LogMessageVerbSigSafe(X_ERROR, -1, "%lld\n", (unsigned long long)ui);
|
||||
read_log_msg(logmsg);
|
||||
assert(strcmp(logmsg, expected) == 0);
|
||||
|
||||
sprintf(expected, "(EE) %lx\n", lui);
|
||||
printf("%s\n", expected);
|
||||
LogMessageVerbSigSafe(X_ERROR, -1, "%lx\n", lui);
|
||||
read_log_msg(logmsg);
|
||||
assert(strcmp(logmsg, expected) == 0);
|
||||
|
||||
sprintf(expected, "(EE) %llx\n", (unsigned long long)ui);
|
||||
LogMessageVerbSigSafe(X_ERROR, -1, "%llx\n", (unsigned long long)ui);
|
||||
read_log_msg(logmsg);
|
||||
assert(strcmp(logmsg, expected) == 0);
|
||||
|
||||
if (lui == 0)
|
||||
lui = 1;
|
||||
else
|
||||
lui <<= 1;
|
||||
} while(lui);
|
||||
|
||||
/* signed number substitution */
|
||||
i = 0;
|
||||
do {
|
||||
|
|
@ -230,7 +292,6 @@ static void logging_format(void)
|
|||
read_log_msg(logmsg);
|
||||
assert(strcmp(logmsg, expected) == 0);
|
||||
|
||||
|
||||
sprintf(expected, "(EE) %d\n", i | INT_MIN);
|
||||
LogMessageVerbSigSafe(X_ERROR, -1, "%d\n", i | INT_MIN);
|
||||
read_log_msg(logmsg);
|
||||
|
|
@ -242,19 +303,35 @@ static void logging_format(void)
|
|||
i <<= 1;
|
||||
} while(i > INT_MIN);
|
||||
|
||||
/* hex number substitution */
|
||||
ui = 0;
|
||||
li = 0;
|
||||
do {
|
||||
char expected[30];
|
||||
sprintf(expected, "(EE) %x\n", ui);
|
||||
LogMessageVerbSigSafe(X_ERROR, -1, "%x\n", ui);
|
||||
sprintf(expected, "(EE) %ld\n", li);
|
||||
LogMessageVerbSigSafe(X_ERROR, -1, "%ld\n", li);
|
||||
read_log_msg(logmsg);
|
||||
assert(strcmp(logmsg, expected) == 0);
|
||||
if (ui == 0)
|
||||
ui = 1;
|
||||
|
||||
sprintf(expected, "(EE) %ld\n", li | LONG_MIN);
|
||||
LogMessageVerbSigSafe(X_ERROR, -1, "%ld\n", li | LONG_MIN);
|
||||
read_log_msg(logmsg);
|
||||
assert(strcmp(logmsg, expected) == 0);
|
||||
|
||||
sprintf(expected, "(EE) %lld\n", (long long)li);
|
||||
LogMessageVerbSigSafe(X_ERROR, -1, "%lld\n", (long long)li);
|
||||
read_log_msg(logmsg);
|
||||
assert(strcmp(logmsg, expected) == 0);
|
||||
|
||||
sprintf(expected, "(EE) %lld\n", (long long)(li | LONG_MIN));
|
||||
LogMessageVerbSigSafe(X_ERROR, -1, "%lld\n", (long long)(li | LONG_MIN));
|
||||
read_log_msg(logmsg);
|
||||
assert(strcmp(logmsg, expected) == 0);
|
||||
|
||||
if (li == 0)
|
||||
li = 1;
|
||||
else
|
||||
ui <<= 1;
|
||||
} while(ui);
|
||||
li <<= 1;
|
||||
} while(li > LONG_MIN);
|
||||
|
||||
|
||||
/* pointer substitution */
|
||||
/* we print a null-pointer differently to printf */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue