Merge branch 'master' into XACE-SELINUX
Conflicts: hw/xnest/Pixmap.c include/dix.h
This commit is contained in:
commit
2d17f47cc7
|
@ -105,6 +105,7 @@ afbCreatePixmap(pScreen, width, height, depth, usage_hint)
|
|||
pPixmap->refcnt = 1;
|
||||
pPixmap->devPrivate.ptr = datasize ?
|
||||
(pointer)((char *)pPixmap + pScreen->totalPixmapSize) : NULL;
|
||||
pPixmap->usage_hint = usage_hint;
|
||||
return(pPixmap);
|
||||
}
|
||||
|
||||
|
|
|
@ -99,6 +99,7 @@ cfbCreatePixmap (pScreen, width, height, depth, usage_hint)
|
|||
pPixmap->refcnt = 1;
|
||||
pPixmap->devPrivate.ptr = datasize ?
|
||||
(pointer)((char *)pPixmap + pScreen->totalPixmapSize) : NULL;
|
||||
pPixmap->usage_hint = usage_hint;
|
||||
return pPixmap;
|
||||
}
|
||||
|
||||
|
|
10
configure.ac
10
configure.ac
|
@ -26,7 +26,7 @@ dnl
|
|||
dnl Process this file with autoconf to create configure.
|
||||
|
||||
AC_PREREQ(2.57)
|
||||
AC_INIT([xorg-server], 1.4.0.1, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
|
||||
AC_INIT([xorg-server], 1.4.99.1, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
|
||||
AC_CONFIG_SRCDIR([Makefile.am])
|
||||
AM_INIT_AUTOMAKE([dist-bzip2 foreign])
|
||||
AM_MAINTAINER_MODE
|
||||
|
@ -175,6 +175,12 @@ fi
|
|||
AC_CHECK_FUNC([dlopen], [],
|
||||
AC_CHECK_LIB([dl], [dlopen], DLOPEN_LIBS="-ldl"))
|
||||
|
||||
case $host_os in
|
||||
linux*)
|
||||
AC_DEFINE(HAVE_URANDOM, 1, [Has /dev/urandom]) ;;
|
||||
*) ;;
|
||||
esac
|
||||
|
||||
dnl Checks for library functions.
|
||||
AC_FUNC_VPRINTF
|
||||
AC_CHECK_FUNCS([geteuid getuid link memmove memset mkstemp strchr strrchr \
|
||||
|
@ -1536,8 +1542,6 @@ dnl has it in libc), or if libdl is needed to get it.
|
|||
AC_DEFINE(NEED_XF86_PROTOTYPES, 1, [Need XFree86 helper functions])
|
||||
AC_DEFINE(__XSERVERNAME__, "Xorg", [Name of X server])
|
||||
AC_DEFINE(WITH_VGAHW, 1, [Building vgahw module])
|
||||
AC_DEFINE(DRIVERS, {}, [Built-in output drivers (none)])
|
||||
AC_DEFINE(IDRIVERS, {}, [Built-in input drivers (none)])
|
||||
AC_DEFINE_DIR(__XCONFIGFILE__, XF86CONFIGFILE, [Name of configuration file])
|
||||
AC_DEFINE_DIR(XF86CONFIGFILE, XF86CONFIGFILE, [Name of configuration file])
|
||||
AC_DEFINE_DIR(DEFAULT_MODULE_PATH, moduledir, [Default module search path])
|
||||
|
|
|
@ -209,5 +209,3 @@ InitAtoms(void)
|
|||
if (lastAtom != XA_LAST_PREDEFINED)
|
||||
AtomError ();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -250,7 +250,7 @@ UpdateCurrentTimeIf(void)
|
|||
currentTime = systime;
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
InitSelections(void)
|
||||
{
|
||||
if (CurrentSelections)
|
||||
|
@ -3842,7 +3842,7 @@ ProcInitialConnection(ClientPtr client)
|
|||
return (client->noClientException);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
SendConnSetup(ClientPtr client, char *reason)
|
||||
{
|
||||
xWindowRoot *root;
|
||||
|
|
|
@ -1184,7 +1184,7 @@ FreezeThaw(DeviceIntPtr dev, Bool frozen)
|
|||
dev->public.processInputProc = dev->public.realInputProc;
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
ComputeFreezes(void)
|
||||
{
|
||||
DeviceIntPtr replayDev = syncEvents.replayDev;
|
||||
|
@ -1268,7 +1268,7 @@ ScreenRestructured (ScreenPtr pScreen)
|
|||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
static void
|
||||
CheckGrabForSyncs(DeviceIntPtr thisDev, Bool thisMode, Bool otherMode)
|
||||
{
|
||||
GrabPtr grab = thisDev->grab;
|
||||
|
|
|
@ -30,3 +30,4 @@ The server will not build if your toolchain does not support these extensions.
|
|||
struct foo bar = { .baz = quux, .brian = "dog" };
|
||||
* variadic macros: macros with a variable number of arguments, e.g.:
|
||||
#define DebugF(x, ...) /**/
|
||||
* interleaved code and declarations: { foo = TRUE; int bar; do_stuff(); }
|
||||
|
|
|
@ -256,6 +256,7 @@ exaCreatePixmap(ScreenPtr pScreen, int w, int h, int depth,
|
|||
return NULL;
|
||||
|
||||
pExaPixmap = ExaGetPixmapPriv(pPixmap);
|
||||
pExaPixmap->driverPriv = NULL;
|
||||
|
||||
bpp = pPixmap->drawable.bitsPerPixel;
|
||||
|
||||
|
|
3
fb/fb.h
3
fb/fb.h
|
@ -1618,7 +1618,8 @@ fbPictureInit (ScreenPtr pScreen,
|
|||
*/
|
||||
|
||||
PixmapPtr
|
||||
fbCreatePixmapBpp (ScreenPtr pScreen, int width, int height, int depth, int bpp);
|
||||
fbCreatePixmapBpp (ScreenPtr pScreen, int width, int height, int depth, int bpp,
|
||||
unsigned usage_hint);
|
||||
|
||||
PixmapPtr
|
||||
fbCreatePixmap (ScreenPtr pScreen, int width, int height, int depth,
|
||||
|
|
|
@ -548,7 +548,7 @@ fb24_32ReformatTile(PixmapPtr pOldTile, int bitsPerPixel)
|
|||
pOldTile->drawable.width,
|
||||
pOldTile->drawable.height,
|
||||
pOldTile->drawable.depth,
|
||||
bitsPerPixel);
|
||||
bitsPerPixel, 0);
|
||||
if (!pNewTile)
|
||||
return 0;
|
||||
fbGetDrawable (&pOldTile->drawable,
|
||||
|
|
|
@ -29,7 +29,8 @@
|
|||
#include "fb.h"
|
||||
|
||||
PixmapPtr
|
||||
fbCreatePixmapBpp (ScreenPtr pScreen, int width, int height, int depth, int bpp)
|
||||
fbCreatePixmapBpp (ScreenPtr pScreen, int width, int height, int depth, int bpp,
|
||||
unsigned usage_hint)
|
||||
{
|
||||
PixmapPtr pPixmap;
|
||||
size_t datasize;
|
||||
|
@ -76,6 +77,8 @@ fbCreatePixmapBpp (ScreenPtr pScreen, int width, int height, int depth, int bpp)
|
|||
pPixmap->screen_y = 0;
|
||||
#endif
|
||||
|
||||
pPixmap->usage_hint = usage_hint;
|
||||
|
||||
return pPixmap;
|
||||
}
|
||||
|
||||
|
@ -89,7 +92,7 @@ fbCreatePixmap (ScreenPtr pScreen, int width, int height, int depth,
|
|||
if (bpp == 32 && depth <= 24)
|
||||
bpp = fbGetScreenPrivate(pScreen)->pix32bpp;
|
||||
#endif
|
||||
return fbCreatePixmapBpp (pScreen, width, height, depth, bpp);
|
||||
return fbCreatePixmapBpp (pScreen, width, height, depth, bpp, usage_hint);
|
||||
}
|
||||
|
||||
Bool
|
||||
|
|
|
@ -116,6 +116,7 @@ PixmapPtr dmxCreatePixmap(ScreenPtr pScreen, int width, int height, int depth,
|
|||
pPixmap->drawable.height = height;
|
||||
pPixmap->devKind = PixmapBytePad(width, bpp);
|
||||
pPixmap->refcnt = 1;
|
||||
pPixmap->usage_hint = usage_hint;
|
||||
|
||||
pPixPriv = DMX_GET_PIXMAP_PRIV(pPixmap);
|
||||
pPixPriv->pixmap = (Pixmap)0;
|
||||
|
|
|
@ -632,11 +632,6 @@ KdProcessArgument (int argc, char **argv, int i)
|
|||
kdDontZap = TRUE;
|
||||
return 1;
|
||||
}
|
||||
if (!strcmp (argv[i], "-nozap"))
|
||||
{
|
||||
kdDontZap = TRUE;
|
||||
return 1;
|
||||
}
|
||||
if (!strcmp (argv[i], "-3button"))
|
||||
{
|
||||
kdEmulateMiddleButton = FALSE;
|
||||
|
|
|
@ -43,16 +43,6 @@
|
|||
|
||||
/* Sections for the default built-in configuration. */
|
||||
|
||||
#define BUILTIN_MODULE_SECTION \
|
||||
"Section \"Module\"\n" \
|
||||
"\tLoad\t\"extmod\"\n" \
|
||||
"\tLoad\t\"dbe\"\n" \
|
||||
"\tLoad\t\"glx\"\n" \
|
||||
"\tLoad\t\"freetype\"\n" \
|
||||
"\tLoad\t\"record\"\n" \
|
||||
"\tLoad\t\"dri\"\n" \
|
||||
"EndSection\n\n"
|
||||
|
||||
#define BUILTIN_DEVICE_NAME \
|
||||
"\"Builtin Default %s Device %d\""
|
||||
|
||||
|
@ -68,14 +58,6 @@
|
|||
BUILTIN_DEVICE_SECTION_PRE \
|
||||
BUILTIN_DEVICE_SECTION_POST
|
||||
|
||||
#define BUILTIN_MONITOR_NAME \
|
||||
"\"Builtin Default Monitor\""
|
||||
|
||||
#define BUILTIN_MONITOR_SECTION \
|
||||
"Section \"Monitor\"\n" \
|
||||
"\tIdentifier\t" BUILTIN_MONITOR_NAME "\n" \
|
||||
"EndSection\n\n"
|
||||
|
||||
#define BUILTIN_SCREEN_NAME \
|
||||
"\"Builtin Default %s Screen %d\""
|
||||
|
||||
|
@ -83,7 +65,6 @@
|
|||
"Section \"Screen\"\n" \
|
||||
"\tIdentifier\t" BUILTIN_SCREEN_NAME "\n" \
|
||||
"\tDevice\t" BUILTIN_DEVICE_NAME "\n" \
|
||||
"\tMonitor\t" BUILTIN_MONITOR_NAME "\n" \
|
||||
"EndSection\n\n"
|
||||
|
||||
#define BUILTIN_LAYOUT_SECTION_PRE \
|
||||
|
@ -220,9 +201,6 @@ xf86AutoConfig(void)
|
|||
|
||||
driver = chooseVideoDriver();
|
||||
|
||||
AppendToConfig(BUILTIN_MODULE_SECTION);
|
||||
AppendToConfig(BUILTIN_MONITOR_SECTION);
|
||||
|
||||
if (driver) {
|
||||
snprintf(buf, sizeof(buf), BUILTIN_DEVICE_SECTION_PRE,
|
||||
driver, 0, driver);
|
||||
|
|
|
@ -75,7 +75,6 @@ static resPtr AccReducers = NULL;
|
|||
|
||||
/* resource lists */
|
||||
resPtr Acc = NULL;
|
||||
resPtr osRes = NULL;
|
||||
|
||||
/* predefined special resources */
|
||||
_X_EXPORT resRange resVgaExclusive[] = {_VGA_EXCLUSIVE, _END};
|
||||
|
@ -1357,28 +1356,12 @@ xf86AddRangesToList(resPtr list, resRange *pRange, int entityIndex)
|
|||
void
|
||||
xf86ResourceBrokerInit(void)
|
||||
{
|
||||
#if 0
|
||||
resPtr resPci;
|
||||
#endif
|
||||
|
||||
osRes = NULL;
|
||||
Acc = NULL;
|
||||
|
||||
/* Get the ranges used exclusively by the system */
|
||||
osRes = xf86AccResFromOS(osRes);
|
||||
xf86MsgVerb(X_INFO, 3, "OS-reported resource ranges:\n");
|
||||
xf86PrintResList(3, osRes);
|
||||
|
||||
/* Bus dep initialization */
|
||||
#if 0
|
||||
resPci = ResourceBrokerInitPci(&osRes);
|
||||
Acc = xf86JoinResLists(xf86DupResList(osRes), resPci);
|
||||
#else
|
||||
Acc = xf86DupResList( osRes );
|
||||
#endif
|
||||
|
||||
xf86MsgVerb(X_INFO, 3, "All system resource ranges:\n");
|
||||
Acc = xf86AccResFromOS(Acc);
|
||||
xf86MsgVerb(X_INFO, 3, "System resource ranges:\n");
|
||||
xf86PrintResList(3, Acc);
|
||||
|
||||
}
|
||||
|
||||
#define MEM_ALIGN (1024 * 1024)
|
||||
|
|
|
@ -132,7 +132,6 @@ extern int xf86NumEntities;
|
|||
extern xf86AccessRec AccessNULL;
|
||||
extern BusRec primaryBus;
|
||||
extern resPtr Acc;
|
||||
extern resPtr osRes;
|
||||
extern resPtr ResRange;
|
||||
extern BusAccPtr xf86BusAccInfo;
|
||||
|
||||
|
|
|
@ -93,7 +93,6 @@ extern DeviceAssocRec mouse_assoc;
|
|||
"/etc/X11/%R," "%P/etc/X11/%R," \
|
||||
"%E," "%F," \
|
||||
"/etc/X11/%F," "%P/etc/X11/%F," \
|
||||
"%D/%X," \
|
||||
"/etc/X11/%X-%M," "/etc/X11/%X," "/etc/%X," \
|
||||
"%P/etc/X11/%X.%H," "%P/etc/X11/%X-%M," \
|
||||
"%P/etc/X11/%X," \
|
||||
|
@ -538,14 +537,8 @@ fixup_video_driver_list(char **drivers)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Generate a compiled-in list of driver names. This is used to produce a
|
||||
* consistent probe order. For the loader server, we also look for vendor-
|
||||
* provided modules, pre-pending them to our own list.
|
||||
*/
|
||||
static char **
|
||||
GenerateDriverlist(char * dirname, char * drivernames)
|
||||
GenerateDriverlist(char * dirname)
|
||||
{
|
||||
char **ret;
|
||||
const char *subdirs[] = { dirname, NULL };
|
||||
|
@ -559,20 +552,13 @@ GenerateDriverlist(char * dirname, char * drivernames)
|
|||
return ret;
|
||||
}
|
||||
|
||||
|
||||
char **
|
||||
xf86DriverlistFromCompile(void)
|
||||
{
|
||||
static char **driverlist = NULL;
|
||||
static Bool generated = FALSE;
|
||||
|
||||
/* This string is modified in-place */
|
||||
static char drivernames[] = DRIVERS;
|
||||
|
||||
if (!generated) {
|
||||
generated = TRUE;
|
||||
driverlist = GenerateDriverlist("drivers", drivernames);
|
||||
}
|
||||
if (!driverlist)
|
||||
driverlist = GenerateDriverlist("drivers");
|
||||
|
||||
return driverlist;
|
||||
}
|
||||
|
|
|
@ -372,9 +372,6 @@ configureDeviceSection (int screennum)
|
|||
char identifier[16];
|
||||
OptionInfoPtr p;
|
||||
int i = 0;
|
||||
#ifdef DO_FBDEV_PROBE
|
||||
Bool foundFBDEV = FALSE;
|
||||
#endif
|
||||
parsePrologue (XF86ConfDevicePtr, XF86ConfDeviceRec)
|
||||
|
||||
/* Move device info to parser structure */
|
||||
|
@ -443,32 +440,6 @@ configureDeviceSection (int screennum)
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef DO_FBDEV_PROBE
|
||||
/* Crude mechanism to auto-detect fbdev (os dependent) */
|
||||
/* Skip it for now. Options list it anyway, and we can't
|
||||
* determine which screen/driver this belongs too anyway. */
|
||||
{
|
||||
int fd;
|
||||
|
||||
fd = open("/dev/fb0", 0);
|
||||
if (fd != -1) {
|
||||
foundFBDEV = TRUE;
|
||||
close(fd);
|
||||
}
|
||||
}
|
||||
|
||||
if (foundFBDEV) {
|
||||
XF86OptionPtr fbdev;
|
||||
|
||||
fbdev = xf86confmalloc(sizeof(XF86OptionRec));
|
||||
memset((XF86OptionPtr)fbdev,0,sizeof(XF86OptionRec));
|
||||
fbdev->opt_name = "UseFBDev";
|
||||
fbdev->opt_val = "ON";
|
||||
ptr->dev_option_lst = (XF86OptionPtr)xf86addListItem(
|
||||
(glp)ptr->dev_option_lst, (glp)fbdev);
|
||||
}
|
||||
#endif
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
||||
|
|
|
@ -1492,9 +1492,6 @@ xf86PrintChipsets(const char *drvname, const char *drvmsg, SymTabPtr chips)
|
|||
}
|
||||
|
||||
|
||||
#define MAXDRIVERS 64 /* A >hack<, to be sure ... */
|
||||
|
||||
|
||||
_X_EXPORT int
|
||||
xf86MatchDevice(const char *drivername, GDevPtr **sectlist)
|
||||
{
|
||||
|
|
|
@ -1299,10 +1299,6 @@ AbortDDX()
|
|||
/*
|
||||
* try to restore the original video state
|
||||
*/
|
||||
#ifdef HAS_USL_VTS
|
||||
/* Need the sleep when starting X from within another X session */
|
||||
sleep(1);
|
||||
#endif
|
||||
#ifdef DPMSExtension /* Turn screens back on */
|
||||
if (DPMSPowerLevel != DPMSModeOn)
|
||||
DPMSSet(serverClient, DPMSModeOn);
|
||||
|
|
|
@ -120,7 +120,7 @@ extern RootWinPropPtr *xf86RegisteredPropertiesTable;
|
|||
#define DEFAULT_LOG_VERBOSE 3
|
||||
#endif
|
||||
#ifndef DEFAULT_DPI
|
||||
#define DEFAULT_DPI 75
|
||||
#define DEFAULT_DPI 96
|
||||
#endif
|
||||
|
||||
#define DEFAULT_UNRESOLVED TRUE
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include "xf86DDC.h"
|
||||
#include "xf86Crtc.h"
|
||||
#include "xf86Modes.h"
|
||||
#include "xf86Priv.h"
|
||||
#include "xf86RandR12.h"
|
||||
#include "X11/extensions/render.h"
|
||||
#define DPMS_SERVER
|
||||
|
@ -704,9 +705,9 @@ xf86DefaultMode (xf86OutputPtr output, int width, int height)
|
|||
|
||||
mm_height = output->mm_height;
|
||||
if (!mm_height)
|
||||
mm_height = 203; /* 768 pixels at 96dpi */
|
||||
mm_height = (768 * 25.4) / DEFAULT_DPI;
|
||||
/*
|
||||
* Pick a mode closest to 96dpi
|
||||
* Pick a mode closest to DEFAULT_DPI
|
||||
*/
|
||||
for (mode = output->probed_modes; mode; mode = mode->next)
|
||||
{
|
||||
|
@ -721,7 +722,7 @@ xf86DefaultMode (xf86OutputPtr output, int width, int height)
|
|||
|
||||
/* yes, use VDisplay here, not xf86ModeHeight */
|
||||
dpi = (mode->VDisplay * 254) / (mm_height * 10);
|
||||
diff = dpi - 96;
|
||||
diff = dpi - DEFAULT_DPI;
|
||||
diff = diff < 0 ? -diff : diff;
|
||||
if (target_mode == NULL || (preferred > target_preferred) ||
|
||||
(preferred == target_preferred && diff < target_diff))
|
||||
|
|
|
@ -450,10 +450,10 @@ xf86RandR12CreateScreenResources (ScreenPtr pScreen)
|
|||
else
|
||||
{
|
||||
/*
|
||||
* Otherwise, just set the screen to 96dpi
|
||||
* Otherwise, just set the screen to DEFAULT_DPI
|
||||
*/
|
||||
mmWidth = width * 25.4 / 96;
|
||||
mmHeight = height * 25.4 / 96;
|
||||
mmWidth = width * 25.4 / DEFAULT_DPI;
|
||||
mmHeight = height * 25.4 / DEFAULT_DPI;
|
||||
}
|
||||
}
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
||||
|
|
|
@ -62,7 +62,7 @@ xrealloc (void *p, int size)
|
|||
#endif
|
||||
|
||||
#define CONFPATH "%A,%R,/etc/X11/%R,%P/etc/X11/%R,%E,%F,/etc/X11/%F," \
|
||||
"%P/etc/X11/%F,%D/%X,/etc/X11/%X,/etc/%X,%P/etc/X11/%X.%H," \
|
||||
"%P/etc/X11/%F,/etc/X11/%X,/etc/%X,%P/etc/X11/%X.%H," \
|
||||
"%P/etc/X11/%X,%P/lib/X11/%X.%H,%P/lib/X11/%X"
|
||||
|
||||
int
|
||||
|
|
|
@ -558,7 +558,6 @@ xf86pathIsSafe(const char *path)
|
|||
* %E config file environment ($XORGCONFIG) as an absolute path
|
||||
* %F config file environment ($XORGCONFIG) as a relative path
|
||||
* %G config file environment ($XORGCONFIG) as a safe path
|
||||
* %D $HOME
|
||||
* %P projroot
|
||||
* %M major version number
|
||||
* %% %
|
||||
|
@ -703,14 +702,6 @@ DoSubstitution(const char *template, const char *cmdline, const char *projroot,
|
|||
} else
|
||||
BAIL_OUT;
|
||||
break;
|
||||
case 'D':
|
||||
if (!home)
|
||||
home = getenv("HOME");
|
||||
if (home && xf86pathIsAbsolute(home))
|
||||
APPEND_STR(home);
|
||||
else
|
||||
BAIL_OUT;
|
||||
break;
|
||||
case 'P':
|
||||
if (projroot && xf86pathIsAbsolute(projroot))
|
||||
APPEND_STR(projroot);
|
||||
|
|
|
@ -101,7 +101,6 @@ extern int config_mode;
|
|||
"/etc/X11/%R," "%P/etc/X11/%R," \
|
||||
"%E," "%F," \
|
||||
"/etc/X11/%F," "%P/etc/X11/%F," \
|
||||
"%D/%X," \
|
||||
"/etc/X11/%X-%M," "/etc/X11/%X," "/etc/%X," \
|
||||
"%P/etc/X11/%X.%H," "%P/etc/X11/%X-%M," \
|
||||
"%P/etc/X11/%X," \
|
||||
|
|
|
@ -123,6 +123,7 @@ xf4bppCreatePixmap( pScreen, width, height, depth, usage_hint )
|
|||
pPixmap->devPrivate.ptr = (pointer) (((CARD8*)pPixmap)
|
||||
+ pScreen->totalPixmapSize);
|
||||
bzero( (char *) pPixmap->devPrivate.ptr, size ) ;
|
||||
pPixmap->usage_hint = usage_hint;
|
||||
return pPixmap ;
|
||||
}
|
||||
|
||||
|
|
|
@ -254,6 +254,7 @@ xglCreatePixmap (ScreenPtr pScreen,
|
|||
pPixmap->devKind = 0;
|
||||
pPixmap->refcnt = 1;
|
||||
pPixmap->devPrivate.ptr = 0;
|
||||
pPixmap->usage_hint = usage_hint;
|
||||
|
||||
pPixmapPriv = XGL_GET_PIXMAP_PRIV (pPixmap);
|
||||
|
||||
|
|
|
@ -57,6 +57,7 @@ xnestCreatePixmap(ScreenPtr pScreen, int width, int height, int depth,
|
|||
pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER;
|
||||
pPixmap->refcnt = 1;
|
||||
pPixmap->devKind = PixmapBytePad(width, depth);
|
||||
pPixmap->usage_hint = usage_hint;
|
||||
dixSetPrivate(&pPixmap->devPrivates, xnestPixmapPrivateKey,
|
||||
(char *)pPixmap + pScreen->totalPixmapSize);
|
||||
if (width && height)
|
||||
|
|
|
@ -49,7 +49,6 @@
|
|||
"/etc/X11/%R," "%P/etc/X11/%R," \
|
||||
"%E," "%F," \
|
||||
"/etc/X11/%F," "%P/etc/X11/%F," \
|
||||
"%D/%X," \
|
||||
"/etc/X11/%X-%M," "/etc/X11/%X," "/etc/%X," \
|
||||
"%P/etc/X11/%X.%H," "%P/etc/X11/%X-%M," \
|
||||
"%P/etc/X11/%X," \
|
||||
|
|
|
@ -91,6 +91,7 @@ winCreatePixmapNativeGDI (ScreenPtr pScreen,
|
|||
pPixmap->devKind = 0;
|
||||
pPixmap->refcnt = 1;
|
||||
pPixmap->devPrivate.ptr = NULL;
|
||||
pPixmap->usage_hint = usage_hint;
|
||||
|
||||
/* Pixmap privates are allocated by AllocatePixmap */
|
||||
pPixmapPriv = winGetPixmapPriv (pPixmap);
|
||||
|
|
|
@ -240,6 +240,9 @@
|
|||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* Have /dev/urandom */
|
||||
#undef HAVE_URANDOM
|
||||
|
||||
/* Define to 1 if you have the `vprintf' function. */
|
||||
#undef HAVE_VPRINTF
|
||||
|
||||
|
|
|
@ -145,8 +145,6 @@ extern void UpdateCurrentTime(void);
|
|||
|
||||
extern void UpdateCurrentTimeIf(void);
|
||||
|
||||
extern void InitSelections(void);
|
||||
|
||||
extern int dixDestroyPixmap(
|
||||
pointer /*value*/,
|
||||
XID /*pid*/);
|
||||
|
@ -172,10 +170,6 @@ extern void DeleteWindowFromAnySelections(
|
|||
extern void MarkClientException(
|
||||
ClientPtr /*client*/);
|
||||
|
||||
extern int SendConnSetup(
|
||||
ClientPtr /*client*/,
|
||||
char* /*reason*/);
|
||||
|
||||
#if defined(DDXBEFORERESET)
|
||||
extern void ddxBeforeReset (void);
|
||||
#endif
|
||||
|
@ -336,13 +330,6 @@ extern void EnqueueEvent(
|
|||
DeviceIntPtr /* device */,
|
||||
int /* count */);
|
||||
|
||||
extern void ComputeFreezes(void);
|
||||
|
||||
extern void CheckGrabForSyncs(
|
||||
DeviceIntPtr /* dev */,
|
||||
Bool /* thisMode */,
|
||||
Bool /* otherMode */);
|
||||
|
||||
extern void ActivatePointerGrab(
|
||||
DeviceIntPtr /* mouse */,
|
||||
GrabPtr /* grab */,
|
||||
|
|
|
@ -80,6 +80,7 @@ typedef struct _Pixmap {
|
|||
short screen_x;
|
||||
short screen_y;
|
||||
#endif
|
||||
unsigned usage_hint; /* see CREATE_PIXMAP_USAGE_* */
|
||||
} PixmapRec;
|
||||
|
||||
#endif /* PIXMAPSTRUCT_H */
|
||||
|
|
|
@ -203,7 +203,7 @@ typedef void (* ClipNotifyProcPtr)(
|
|||
/* pixmap will be the backing pixmap for a redirected window */
|
||||
#define CREATE_PIXMAP_USAGE_BACKING_PIXMAP 2
|
||||
/* pixmap will contain a glyph */
|
||||
#define CREATE_PIMXAP_USAGE_GLYPH_PICTURE 3
|
||||
#define CREATE_PIXMAP_USAGE_GLYPH_PICTURE 3
|
||||
|
||||
typedef PixmapPtr (* CreatePixmapProcPtr)(
|
||||
ScreenPtr /*pScreen*/,
|
||||
|
|
|
@ -31,9 +31,6 @@
|
|||
/* Build DPMS extension */
|
||||
#undef DPMSExtension
|
||||
|
||||
/* Built-in output drivers */
|
||||
#undef DRIVERS
|
||||
|
||||
/* Build GLX extension */
|
||||
#undef GLXEXT
|
||||
|
||||
|
@ -46,9 +43,6 @@
|
|||
/* Support SHM */
|
||||
#undef HAS_SHM
|
||||
|
||||
/* Built-in input drivers */
|
||||
#undef IDRIVERS
|
||||
|
||||
/* Support IPv6 for TCP connections */
|
||||
#undef IPv6
|
||||
|
||||
|
|
|
@ -104,6 +104,7 @@ mfbCreatePixmap (pScreen, width, height, depth, usage_hint)
|
|||
pPixmap->refcnt = 1;
|
||||
pPixmap->devPrivate.ptr = datasize ?
|
||||
(pointer)((char *)pPixmap + pScreen->totalPixmapSize) : NULL;
|
||||
pPixmap->usage_hint = usage_hint;
|
||||
return pPixmap;
|
||||
}
|
||||
|
||||
|
|
|
@ -53,11 +53,26 @@ SOFTWARE.
|
|||
#include "scrnintstr.h"
|
||||
#include "pixmapstr.h"
|
||||
#include "regionstr.h"
|
||||
#include "../mfb/maskbits.h"
|
||||
#include "mi.h"
|
||||
#include "servermd.h"
|
||||
|
||||
#define NPT 128
|
||||
|
||||
/* These were stolen from mfb. They don't really belong here. */
|
||||
#define LONG2CHARSSAMEORDER(x) ((MiBits)(x))
|
||||
#define LONG2CHARSDIFFORDER( x ) ( ( ( ( x ) & (MiBits)0x000000FF ) << 0x18 ) \
|
||||
| ( ( ( x ) & (MiBits)0x0000FF00 ) << 0x08 ) \
|
||||
| ( ( ( x ) & (MiBits)0x00FF0000 ) >> 0x08 ) \
|
||||
| ( ( ( x ) & (MiBits)0xFF000000 ) >> 0x18 ) )
|
||||
|
||||
|
||||
#define PGSZB 4
|
||||
#define PPW (PGSZB<<3) /* assuming 8 bits per byte */
|
||||
#define PGSZ PPW
|
||||
#define PLST (PPW-1)
|
||||
#define PIM PLST
|
||||
#define PWSH 5
|
||||
|
||||
/* miPushPixels -- squeegees the fill style of pGC through pBitMap
|
||||
* into pDrawable. pBitMap is a stencil (dx by dy of it is used, it may
|
||||
* be bigger) which is placed on the drawable at xOrg, yOrg. Where a 1 bit
|
||||
|
@ -94,7 +109,7 @@ miPushPixels(pGC, pBitMap, pDrawable, dx, dy, xOrg, yOrg)
|
|||
DDXPointRec pt[NPT], ptThisLine;
|
||||
int width[NPT];
|
||||
#if 1
|
||||
PixelType startmask;
|
||||
MiBits startmask;
|
||||
if (screenInfo.bitmapBitOrder == IMAGE_BYTE_ORDER)
|
||||
if (screenInfo.bitmapBitOrder == LSBFirst)
|
||||
startmask = (MiBits)(-1) ^
|
||||
|
|
|
@ -2,9 +2,6 @@ noinst_LTLIBRARIES = libos.la libcwrapper.la
|
|||
|
||||
AM_CFLAGS = $(DIX_CFLAGS)
|
||||
|
||||
# FIXME: Add support for these in configure.ac
|
||||
INTERNALMALLOC_SRCS = xalloc.c
|
||||
|
||||
SECURERPC_SRCS = rpcauth.c
|
||||
XDMCP_SRCS = xdmcp.c
|
||||
STRLCAT_SRCS = strlcat.c strlcpy.c
|
||||
|
|
16
os/auth.c
16
os/auth.c
|
@ -314,6 +314,20 @@ GenerateAuthorization(
|
|||
return -1;
|
||||
}
|
||||
|
||||
#ifdef HAVE_URANDOM
|
||||
|
||||
void
|
||||
GenerateRandomData (int len, char *buf)
|
||||
{
|
||||
int fd;
|
||||
|
||||
fd = open("/dev/urandom", O_RDONLY);
|
||||
read(fd, buf, len);
|
||||
close(fd);
|
||||
}
|
||||
|
||||
#else /* !HAVE_URANDOM */
|
||||
|
||||
/* A random number generator that is more unpredictable
|
||||
than that shipped with some systems.
|
||||
This code is taken from the C standard. */
|
||||
|
@ -351,4 +365,6 @@ GenerateRandomData (int len, char *buf)
|
|||
/* XXX add getrusage, popen("ps -ale") */
|
||||
}
|
||||
|
||||
#endif /* HAVE_URANDOM */
|
||||
|
||||
#endif /* XCSECURITY */
|
||||
|
|
|
@ -927,6 +927,10 @@ ProcessCommandLine(int argc, char *argv[])
|
|||
else
|
||||
UseMsg();
|
||||
}
|
||||
else if (strcmp(argv[i], "-pogo") == 0)
|
||||
{
|
||||
dispatchException = DE_TERMINATE;
|
||||
}
|
||||
else if ( strcmp( argv[i], "-pn") == 0)
|
||||
PartialNetwork = TRUE;
|
||||
else if ( strcmp( argv[i], "-nopn") == 0)
|
||||
|
|
816
os/xalloc.c
816
os/xalloc.c
|
@ -1,816 +0,0 @@
|
|||
#define FATALERRORS 1
|
||||
/*
|
||||
Copyright (C) 1995 Pascal Haible. All Rights Reserved.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
PASCAL HAIBLE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
|
||||
OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
Except as contained in this notice, the name of Pascal Haible shall
|
||||
not be used in advertising or otherwise to promote the sale, use or other
|
||||
dealings in this Software without prior written authorization from
|
||||
Pascal Haible.
|
||||
*/
|
||||
|
||||
|
||||
/* Only used if INTERNAL_MALLOC is defined
|
||||
* - otherwise xalloc() in utils.c is used
|
||||
*/
|
||||
#ifdef HAVE_DIX_CONFIG_H
|
||||
#include <dix-config.h>
|
||||
#endif
|
||||
|
||||
#ifdef INTERNAL_MALLOC
|
||||
|
||||
#include <stdlib.h> /* for malloc() etc. */
|
||||
|
||||
#include <X11/Xos.h>
|
||||
#include "misc.h"
|
||||
#include <X11/X.h>
|
||||
|
||||
#ifdef XALLOC_LOG
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
|
||||
extern Bool Must_have_memory;
|
||||
|
||||
/*
|
||||
***** New malloc approach for the X server *****
|
||||
* Pascal Haible 1995
|
||||
*
|
||||
* Some statistics about memory allocation of the X server
|
||||
* The test session included several clients of different size, including
|
||||
* xv, emacs and xpaint with a new canvas of 3000x2000, zoom 5.
|
||||
* All clients were running together.
|
||||
* A protocolling version of Xalloc recorded 318917 allocating actions
|
||||
* (191573 Xalloc, 85942 XNFalloc, 41438 Xrealloc, 279727 Xfree).
|
||||
* Results grouped by size, excluding the next lower size
|
||||
* (i.e. size=32 means 16<size<=32):
|
||||
*
|
||||
* size nr of alloc max nr of blocks allocated together
|
||||
* 8 1114 287
|
||||
* 16 17341 4104
|
||||
* 32 147352 2068
|
||||
* 64 59053 2518
|
||||
* 128 46882 1230
|
||||
* 256 20544 1217
|
||||
* 512 6808 117
|
||||
* 1024 8254 171
|
||||
* 2048 4841 287
|
||||
* 4096 2429 84
|
||||
* 8192 3364 85
|
||||
* 16384 573 22
|
||||
* 32768 49 7
|
||||
* 65536 45 5
|
||||
* 131072 48 2
|
||||
* 262144 209 2
|
||||
* 524288 7 4
|
||||
* 1048576 2 1
|
||||
* 8388608 2 2
|
||||
*
|
||||
* The most used sizes:
|
||||
* count size
|
||||
* 24 136267
|
||||
* 40 37055
|
||||
* 72 17278
|
||||
* 56 13504
|
||||
* 80 9372
|
||||
* 16 8966
|
||||
* 32 8411
|
||||
* 136 8399
|
||||
* 104 7690
|
||||
* 12 7630
|
||||
* 120 5512
|
||||
* 88 4634
|
||||
* 152 3062
|
||||
* 52 2881
|
||||
* 48 2736
|
||||
* 156 1569
|
||||
* 168 1487
|
||||
* 160 1483
|
||||
* 28 1446
|
||||
* 1608 1379
|
||||
* 184 1305
|
||||
* 552 1270
|
||||
* 64 934
|
||||
* 320 891
|
||||
* 8 754
|
||||
*
|
||||
* Conclusions: more than the half of all allocations are <= 32 bytes.
|
||||
* But of these about 150,000 blocks, only a maximum of about 6,000 are
|
||||
* allocated together (including memory leaks..).
|
||||
* On the other side, only 935 of the 191573 or 0.5% were larger than 8kB
|
||||
* (362 or 0.2% larger than 16k).
|
||||
*
|
||||
* What makes the server really grow is the fragmentation of the heap,
|
||||
* and the fact that it can't shrink.
|
||||
* To cure this, we do the following:
|
||||
* - large blocks (>=11k) are mmapped on xalloc, and unmapped on xfree,
|
||||
* so we don't need any free lists etc.
|
||||
* As this needs 2 system calls, we only do this for the quite
|
||||
* infrequent large (>=11k) blocks.
|
||||
* - instead of reinventing the wheel, we use system malloc for medium
|
||||
* sized blocks (>256, <11k).
|
||||
* - for small blocks (<=256) we use an other approach:
|
||||
* As we need many small blocks, and most ones for a short time,
|
||||
* we don't go through the system malloc:
|
||||
* for each fixed sizes a seperate list of free blocks is kept.
|
||||
* to KISS (Keep it Small and Simple), we don't free them
|
||||
* (not freeing a block of 32 bytes won't be worse than having fragmented
|
||||
* a larger area on allocation).
|
||||
* This way, we (almost) allways have a fitting free block right at hand,
|
||||
* and don't have to walk any lists.
|
||||
*/
|
||||
|
||||
/*
|
||||
* structure layout of a allocated block
|
||||
* unsigned long size:
|
||||
* rounded up netto size for small and medium blocks
|
||||
* brutto size == mmap'ed area for large blocks
|
||||
* unsigned long DEBUG ? MAGIC : unused
|
||||
* .... data
|
||||
* ( unsigned long MAGIC2 ) only if SIZE_TAIL defined
|
||||
*
|
||||
*/
|
||||
|
||||
/* use otherwise unused long in the header to store a magic */
|
||||
/* shouldn't this be removed for production release ? */
|
||||
#define XALLOC_DEBUG
|
||||
|
||||
#ifdef XALLOC_DEBUG
|
||||
/* Xfree fills the memory with a certain pattern (currently 0xF0) */
|
||||
/* this should really be removed for production release! */
|
||||
#define XFREE_ERASES
|
||||
#endif
|
||||
|
||||
/* this must be a multiple of SIZE_STEPS below */
|
||||
#define MAX_SMALL 264 /* quite many blocks of 264 */
|
||||
|
||||
#define MIN_LARGE (11*1024)
|
||||
/* worst case is 25% loss with a page size of 4k */
|
||||
|
||||
/* SIZE_STEPS defines the granularity of size of small blocks -
|
||||
* this makes blocks align to that, too! */
|
||||
#define SIZE_STEPS (sizeof(double))
|
||||
#define SIZE_HEADER (2*sizeof(long)) /* = sizeof(double) for 32bit */
|
||||
#ifdef XALLOC_DEBUG
|
||||
#if defined(__sparc__)
|
||||
#define SIZE_TAIL (2*sizeof(long)) /* = sizeof(double) for 32bit */
|
||||
#else
|
||||
#define SIZE_TAIL (sizeof(long))
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#undef TAIL_SIZE
|
||||
#ifdef SIZE_TAIL
|
||||
#define TAIL_SIZE SIZE_TAIL
|
||||
#else
|
||||
#define TAIL_SIZE 0
|
||||
#endif
|
||||
|
||||
#if defined (_LP64) || \
|
||||
defined(__alpha__) || defined(__alpha) || \
|
||||
defined(__ia64__) || defined(ia64) || \
|
||||
defined(__sparc64__) || \
|
||||
defined(__s390x__) || \
|
||||
defined(__amd64__) || defined(amd64) || \
|
||||
defined(__powerpc64__) || \
|
||||
(defined(sgi) && _MIPS_SZLONG == 64))
|
||||
#define MAGIC 0x1404196414071968
|
||||
#define MAGIC_FREE 0x1506196615061966
|
||||
#define MAGIC2 0x2515207525182079
|
||||
#else
|
||||
#define MAGIC 0x14071968
|
||||
#define MAGIC_FREE 0x15061966
|
||||
#define MAGIC2 0x25182079
|
||||
#endif
|
||||
|
||||
/* To get some statistics about memory allocation */
|
||||
|
||||
#ifdef XALLOC_LOG
|
||||
#define XALLOC_LOG_FILE "/tmp/Xalloc.log" /* unsecure... */
|
||||
#define LOG_BODY(_body) \
|
||||
{ FILE *f; \
|
||||
f = fopen(XALLOC_LOG_FILE, "a"); \
|
||||
if (NULL!=f) { \
|
||||
_body; \
|
||||
fclose(f); \
|
||||
} \
|
||||
}
|
||||
#if defined(linux) && defined(__i386__)
|
||||
#define LOG_ALLOC(_fun, _size, _ret) \
|
||||
{ unsigned long *from; \
|
||||
__asm__("movl %%ebp,%0" : /*OUT*/ "=r" (from) : /*IN*/ ); \
|
||||
LOG_BODY(fprintf(f, "%s\t%i\t%p\t[%lu]\n", _fun, _size, _ret, *(from+1))) \
|
||||
}
|
||||
#else
|
||||
#define LOG_ALLOC(_fun, _size, _ret) \
|
||||
LOG_BODY(fprintf(f, "%s\t%i\t%p\n", _fun, _size, _ret))
|
||||
#endif
|
||||
#define LOG_REALLOC(_fun, _ptr, _size, _ret) \
|
||||
LOG_BODY(fprintf(f, "%s\t%p\t%i\t%p\n", _fun, _ptr, _size, _ret))
|
||||
#define LOG_FREE(_fun, _ptr) \
|
||||
LOG_BODY(fprintf(f, "%s\t%p\n", _fun, _ptr))
|
||||
#else
|
||||
#define LOG_ALLOC(_fun, _size, _ret)
|
||||
#define LOG_REALLOC(_fun, _ptr, _size, _ret)
|
||||
#define LOG_FREE(_fun, _ptr)
|
||||
#endif /* XALLOC_LOG */
|
||||
|
||||
static unsigned long *free_lists[MAX_SMALL/SIZE_STEPS];
|
||||
|
||||
/*
|
||||
* systems that support it should define HAS_MMAP_ANON or MMAP_DEV_ZERO
|
||||
* and include the appropriate header files for
|
||||
* mmap(), munmap(), PROT_READ, PROT_WRITE, MAP_PRIVATE,
|
||||
* PAGE_SIZE or _SC_PAGESIZE (and MAP_ANON for HAS_MMAP_ANON).
|
||||
*
|
||||
* systems that don't support MAP_ANON fall through to the 2 fold behaviour
|
||||
*/
|
||||
|
||||
#if defined(linux)
|
||||
#define HAS_MMAP_ANON
|
||||
#include <sys/types.h>
|
||||
#include <sys/mman.h>
|
||||
#include <asm/page.h> /* PAGE_SIZE */
|
||||
#define HAS_SC_PAGESIZE /* _SC_PAGESIZE may be an enum for Linux */
|
||||
#define HAS_GETPAGESIZE
|
||||
#endif /* linux */
|
||||
|
||||
#if defined(__GNU__)
|
||||
#define HAS_MMAP_ANON
|
||||
#include <sys/types.h>
|
||||
#include <sys/mman.h>
|
||||
#include <mach/vm_param.h> /* PAGE_SIZE */
|
||||
#define HAS_SC_PAGESIZE
|
||||
#define HAS_GETPAGESIZE
|
||||
#endif /* __GNU__ */
|
||||
|
||||
#if defined(CSRG_BASED)
|
||||
#define HAS_MMAP_ANON
|
||||
#define HAS_GETPAGESIZE
|
||||
#include <sys/types.h>
|
||||
#include <sys/mman.h>
|
||||
#endif /* CSRG_BASED */
|
||||
|
||||
#if defined(DGUX)
|
||||
#define HAS_GETPAGESIZE
|
||||
#define MMAP_DEV_ZERO
|
||||
#include <sys/types.h>
|
||||
#include <sys/mman.h>
|
||||
#include <unistd.h>
|
||||
#endif /* DGUX */
|
||||
|
||||
#if defined(SVR4) && !defined(DGUX)
|
||||
#define MMAP_DEV_ZERO
|
||||
#include <sys/types.h>
|
||||
#include <sys/mman.h>
|
||||
#include <unistd.h>
|
||||
#endif /* SVR4 && !DGUX */
|
||||
|
||||
#if defined(sun) && !defined(SVR4) /* SunOS */
|
||||
#define MMAP_DEV_ZERO /* doesn't SunOS have MAP_ANON ?? */
|
||||
#define HAS_GETPAGESIZE
|
||||
#include <sys/types.h>
|
||||
#include <sys/mman.h>
|
||||
#endif /* sun && !SVR4 */
|
||||
|
||||
#ifdef XNO_SYSCONF
|
||||
#undef _SC_PAGESIZE
|
||||
#endif
|
||||
|
||||
#if defined(HAS_MMAP_ANON) || defined (MMAP_DEV_ZERO)
|
||||
static int pagesize;
|
||||
#endif
|
||||
|
||||
#ifdef MMAP_DEV_ZERO
|
||||
static int devzerofd = -1;
|
||||
#include <errno.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* empty trap function for gdb. Breakpoint here
|
||||
* to find who tries to free a free area
|
||||
*/
|
||||
void XfreeTrap(void)
|
||||
{
|
||||
}
|
||||
|
||||
_X_EXPORT void *
|
||||
Xalloc (unsigned long amount)
|
||||
{
|
||||
register unsigned long *ptr;
|
||||
int indx;
|
||||
|
||||
/* sanity checks */
|
||||
|
||||
/* zero size requested */
|
||||
if (amount == 0) {
|
||||
LOG_ALLOC("Xalloc=0", amount, 0);
|
||||
return NULL;
|
||||
}
|
||||
/* negative size (or size > 2GB) - what do we do? */
|
||||
if ((long)amount < 0) {
|
||||
/* Diagnostic */
|
||||
#ifdef FATALERRORS
|
||||
FatalError("Xalloc: Xalloc(<0)\n");
|
||||
#else
|
||||
ErrorF("Xalloc warning: Xalloc(<0) ignored..\n");
|
||||
#endif
|
||||
LOG_ALLOC("Xalloc<0", amount, 0);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* alignment check */
|
||||
#if defined(__alpha__) || defined(__alpha) || \
|
||||
defined(__sparc__) || \
|
||||
defined(__mips__) || \
|
||||
defined(__powerpc__) || \
|
||||
defined(__arm32__) || \
|
||||
defined(__ia64__) || defined(ia64) || \
|
||||
defined(__s390x__) || defined(__s390__)
|
||||
amount = (amount + (sizeof(long)-1)) & ~(sizeof(long)-1);
|
||||
#endif
|
||||
|
||||
if (amount <= MAX_SMALL) {
|
||||
/*
|
||||
* small block
|
||||
*/
|
||||
/* pick a ready to use small chunk */
|
||||
indx = (amount-1) / SIZE_STEPS;
|
||||
ptr = free_lists[indx];
|
||||
if (NULL == ptr) {
|
||||
/* list empty - get 20 or 40 more */
|
||||
/* amount = size rounded up */
|
||||
amount = (indx+1) * SIZE_STEPS;
|
||||
ptr = (unsigned long *)calloc(1,(amount+SIZE_HEADER+TAIL_SIZE)
|
||||
* (amount<100 ? 40 : 20));
|
||||
if (NULL!=ptr) {
|
||||
int i;
|
||||
unsigned long *p1, *p2;
|
||||
p1 = 0;
|
||||
p2 = (unsigned long *)((char *)ptr + SIZE_HEADER);
|
||||
for (i=0; i<(amount<100 ? 40 : 20); i++) {
|
||||
p1 = p2;
|
||||
p1[-2] = amount;
|
||||
#ifdef XALLOC_DEBUG
|
||||
p1[-1] = MAGIC_FREE;
|
||||
#endif /* XALLOC_DEBUG */
|
||||
#ifdef SIZE_TAIL
|
||||
*(unsigned long *)((unsigned char *)p1 + amount) = MAGIC2;
|
||||
#endif /* SIZE_TAIL */
|
||||
p2 = (unsigned long *)((char *)p1 + SIZE_HEADER + amount + TAIL_SIZE);
|
||||
*(unsigned long **)p1 = p2;
|
||||
}
|
||||
/* last one has no next one */
|
||||
*(unsigned long **)p1 = NULL;
|
||||
/* put the second in the list */
|
||||
free_lists[indx] = (unsigned long *)((char *)ptr + SIZE_HEADER + amount + TAIL_SIZE + SIZE_HEADER);
|
||||
/* take the fist one */
|
||||
ptr = (unsigned long *)((char *)ptr + SIZE_HEADER);
|
||||
LOG_ALLOC("Xalloc-S", amount, ptr);
|
||||
ptr[-1] = MAGIC;
|
||||
return (void *)ptr;
|
||||
} /* else fall through to 'Out of memory' */
|
||||
} else {
|
||||
/* take that piece of mem out of the list */
|
||||
free_lists[indx] = *((unsigned long **)ptr);
|
||||
/* already has size (and evtl. magic) filled in */
|
||||
#ifdef XALLOC_DEBUG
|
||||
ptr[-1] = MAGIC;
|
||||
#endif /* XALLOC_DEBUG */
|
||||
LOG_ALLOC("Xalloc-S", amount, ptr);
|
||||
return (void *)ptr;
|
||||
}
|
||||
|
||||
#if defined(HAS_MMAP_ANON) || defined(MMAP_DEV_ZERO)
|
||||
} else if (amount >= MIN_LARGE) {
|
||||
/*
|
||||
* large block
|
||||
*/
|
||||
/* mmapped malloc */
|
||||
/* round up amount */
|
||||
amount += SIZE_HEADER + TAIL_SIZE;
|
||||
/* round up brutto amount to a multiple of the page size */
|
||||
amount = (amount + pagesize-1) & ~(pagesize-1);
|
||||
#ifdef MMAP_DEV_ZERO
|
||||
ptr = (unsigned long *)mmap((caddr_t)0,
|
||||
(size_t)amount,
|
||||
PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE,
|
||||
devzerofd,
|
||||
(off_t)0);
|
||||
#else
|
||||
ptr = (unsigned long *)mmap((caddr_t)0,
|
||||
(size_t)amount,
|
||||
PROT_READ | PROT_WRITE,
|
||||
MAP_ANON | MAP_PRIVATE,
|
||||
-1,
|
||||
(off_t)0);
|
||||
#endif
|
||||
if (-1!=(long)ptr) {
|
||||
ptr[0] = amount - SIZE_HEADER - TAIL_SIZE;
|
||||
#ifdef XALLOC_DEBUG
|
||||
ptr[1] = MAGIC;
|
||||
#endif /* XALLOC_DEBUG */
|
||||
#ifdef SIZE_TAIL
|
||||
((unsigned long *)((char *)ptr + amount - TAIL_SIZE))[0] = MAGIC2;
|
||||
#endif /* SIZE_TAIL */
|
||||
ptr = (unsigned long *)((char *)ptr + SIZE_HEADER);
|
||||
LOG_ALLOC("Xalloc-L", amount, ptr);
|
||||
return (void *)ptr;
|
||||
} /* else fall through to 'Out of memory' */
|
||||
#endif /* HAS_MMAP_ANON || MMAP_DEV_ZERO */
|
||||
} else {
|
||||
/*
|
||||
* medium sized block
|
||||
*/
|
||||
/* 'normal' malloc() */
|
||||
ptr=(unsigned long *)calloc(1,amount+SIZE_HEADER+TAIL_SIZE);
|
||||
if (ptr != (unsigned long *)NULL) {
|
||||
ptr[0] = amount;
|
||||
#ifdef XALLOC_DEBUG
|
||||
ptr[1] = MAGIC;
|
||||
#endif /* XALLOC_DEBUG */
|
||||
#ifdef SIZE_TAIL
|
||||
*(unsigned long *)((char *)ptr + amount + SIZE_HEADER) = MAGIC2;
|
||||
#endif /* SIZE_TAIL */
|
||||
ptr = (unsigned long *)((char *)ptr + SIZE_HEADER);
|
||||
LOG_ALLOC("Xalloc-M", amount, ptr);
|
||||
return (void *)ptr;
|
||||
}
|
||||
}
|
||||
if (Must_have_memory)
|
||||
FatalError("Out of memory");
|
||||
LOG_ALLOC("Xalloc-oom", amount, 0);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*****************
|
||||
* XNFalloc
|
||||
* "no failure" realloc, alternate interface to Xalloc w/o Must_have_memory
|
||||
*****************/
|
||||
|
||||
_X_EXPORT pointer
|
||||
XNFalloc (unsigned long amount)
|
||||
{
|
||||
register pointer ptr;
|
||||
|
||||
/* zero size requested */
|
||||
if (amount == 0) {
|
||||
LOG_ALLOC("XNFalloc=0", amount, 0);
|
||||
return NULL;
|
||||
}
|
||||
/* negative size (or size > 2GB) - what do we do? */
|
||||
if ((long)amount < 0) {
|
||||
/* Diagnostic */
|
||||
#ifdef FATALERRORS
|
||||
FatalError("Xalloc: XNFalloc(<0)\n");
|
||||
#else
|
||||
ErrorF("Xalloc warning: XNFalloc(<0) ignored..\n");
|
||||
#endif
|
||||
LOG_ALLOC("XNFalloc<0", amount, 0);
|
||||
return (unsigned long *)NULL;
|
||||
}
|
||||
ptr = Xalloc(amount);
|
||||
if (!ptr)
|
||||
{
|
||||
FatalError("Out of memory");
|
||||
}
|
||||
return ptr;
|
||||
}
|
||||
|
||||
/*****************
|
||||
* Xcalloc
|
||||
*****************/
|
||||
|
||||
_X_EXPORT pointer
|
||||
Xcalloc (unsigned long amount)
|
||||
{
|
||||
pointer ret;
|
||||
|
||||
ret = Xalloc (amount);
|
||||
if (ret != 0
|
||||
#if defined(HAS_MMAP_ANON) || defined(MMAP_DEV_ZERO)
|
||||
&& (amount < MIN_LARGE) /* mmaped anonymous mem is already cleared */
|
||||
#endif
|
||||
)
|
||||
bzero ((char *) ret, (int) amount);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*****************
|
||||
* XNFcalloc
|
||||
*****************/
|
||||
_X_EXPORT void *
|
||||
XNFcalloc (unsigned long amount)
|
||||
{
|
||||
pointer ret;
|
||||
|
||||
ret = XNFalloc (amount);
|
||||
if (ret != 0
|
||||
#if defined(HAS_MMAP_ANON) || defined(MMAP_DEV_ZERO)
|
||||
&& (amount < MIN_LARGE) /* mmaped anonymous mem is already cleared */
|
||||
#endif
|
||||
)
|
||||
bzero ((char *) ret, (int) amount);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*****************
|
||||
* Xrealloc
|
||||
*****************/
|
||||
|
||||
_X_EXPORT void *
|
||||
Xrealloc (pointer ptr, unsigned long amount)
|
||||
{
|
||||
register unsigned long *new_ptr;
|
||||
|
||||
/* zero size requested */
|
||||
if (amount == 0) {
|
||||
if (ptr)
|
||||
Xfree(ptr);
|
||||
LOG_REALLOC("Xrealloc=0", ptr, amount, 0);
|
||||
return NULL;
|
||||
}
|
||||
/* negative size (or size > 2GB) - what do we do? */
|
||||
if ((long)amount < 0) {
|
||||
/* Diagnostic */
|
||||
#ifdef FATALERRORS
|
||||
FatalError("Xalloc: Xrealloc(<0)\n");
|
||||
#else
|
||||
ErrorF("Xalloc warning: Xrealloc(<0) ignored..\n");
|
||||
#endif
|
||||
if (ptr)
|
||||
Xfree(ptr); /* ?? */
|
||||
LOG_REALLOC("Xrealloc<0", ptr, amount, 0);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
new_ptr = Xalloc(amount);
|
||||
if ( (new_ptr) && (ptr) ) {
|
||||
unsigned long old_size;
|
||||
old_size = ((unsigned long *)ptr)[-2];
|
||||
#ifdef XALLOC_DEBUG
|
||||
if (MAGIC != ((unsigned long *)ptr)[-1]) {
|
||||
if (MAGIC_FREE == ((unsigned long *)ptr)[-1]) {
|
||||
#ifdef FATALERRORS
|
||||
XfreeTrap();
|
||||
FatalError("Xalloc error: range already freed in Xrealloc() :-(\n");
|
||||
#else
|
||||
ErrorF("Xalloc error: range already freed in Xrealloc() :-(\a\n");
|
||||
sleep(5);
|
||||
XfreeTrap();
|
||||
#endif
|
||||
LOG_REALLOC("Xalloc error: ranged already freed in Xrealloc() :-(",
|
||||
ptr, amount, 0);
|
||||
return NULL;
|
||||
}
|
||||
#ifdef FATALERRORS
|
||||
XfreeTrap();
|
||||
FatalError("Xalloc error: header corrupt in Xrealloc() :-(\n");
|
||||
#else
|
||||
ErrorF("Xalloc error: header corrupt in Xrealloc() :-(\n");
|
||||
XfreeTrap();
|
||||
#endif
|
||||
LOG_REALLOC("Xalloc error: header corrupt in Xrealloc() :-(",
|
||||
ptr, amount, 0);
|
||||
return NULL;
|
||||
}
|
||||
#endif /* XALLOC_DEBUG */
|
||||
/* copy min(old size, new size) */
|
||||
memcpy((char *)new_ptr, (char *)ptr, (amount < old_size ? amount : old_size));
|
||||
}
|
||||
if (ptr)
|
||||
Xfree(ptr);
|
||||
if (new_ptr) {
|
||||
LOG_REALLOC("Xrealloc", ptr, amount, new_ptr);
|
||||
return (void *)new_ptr;
|
||||
}
|
||||
if (Must_have_memory)
|
||||
FatalError("Out of memory");
|
||||
LOG_REALLOC("Xrealloc", ptr, amount, 0);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*****************
|
||||
* XNFrealloc
|
||||
* "no failure" realloc, alternate interface to Xrealloc w/o Must_have_memory
|
||||
*****************/
|
||||
|
||||
_X_EXPORT void *
|
||||
XNFrealloc (pointer ptr, unsigned long amount)
|
||||
{
|
||||
if (( ptr = (pointer)Xrealloc( ptr, amount ) ) == NULL)
|
||||
{
|
||||
FatalError( "Out of memory" );
|
||||
}
|
||||
return ptr;
|
||||
}
|
||||
|
||||
/*****************
|
||||
* Xfree
|
||||
* calls free
|
||||
*****************/
|
||||
|
||||
_X_EXPORT void
|
||||
Xfree(pointer ptr)
|
||||
{
|
||||
unsigned long size;
|
||||
unsigned long *pheader;
|
||||
|
||||
/* free(NULL) IS valid :-( - and widely used throughout the server.. */
|
||||
if (!ptr)
|
||||
return;
|
||||
|
||||
pheader = (unsigned long *)((char *)ptr - SIZE_HEADER);
|
||||
#ifdef XALLOC_DEBUG
|
||||
if (MAGIC != pheader[1]) {
|
||||
/* Diagnostic */
|
||||
if (MAGIC_FREE == pheader[1]) {
|
||||
#ifdef FATALERRORS
|
||||
XfreeTrap();
|
||||
FatalError("Xalloc error: range already freed in Xrealloc() :-(\n");
|
||||
#else
|
||||
ErrorF("Xalloc error: range already freed in Xrealloc() :-(\a\n");
|
||||
sleep(5);
|
||||
XfreeTrap();
|
||||
#endif
|
||||
LOG_FREE("Xalloc error: ranged already freed in Xrealloc() :-(", ptr);
|
||||
return;
|
||||
}
|
||||
#ifdef FATALERRORS
|
||||
XfreeTrap();
|
||||
FatalError("Xalloc error: Header corrupt in Xfree() :-(\n");
|
||||
#else
|
||||
ErrorF("Xalloc error: Header corrupt in Xfree() :-(\n");
|
||||
XfreeTrap();
|
||||
#endif
|
||||
LOG_FREE("Xalloc error: Header corrupt in Xfree() :-(", ptr);
|
||||
return;
|
||||
}
|
||||
#endif /* XALLOC_DEBUG */
|
||||
|
||||
size = pheader[0];
|
||||
if (size <= MAX_SMALL) {
|
||||
int indx;
|
||||
/*
|
||||
* small block
|
||||
*/
|
||||
#ifdef SIZE_TAIL
|
||||
if (MAGIC2 != *(unsigned long *)((char *)ptr + size)) {
|
||||
/* Diagnostic */
|
||||
#ifdef FATALERRORS
|
||||
XfreeTrap();
|
||||
FatalError("Xalloc error: Tail corrupt in Xfree() for small block (adr=0x%x, val=0x%x)\n",(char *)ptr + size,*(unsigned long *)((char *)ptr + size));
|
||||
#else
|
||||
ErrorF("Xalloc error: Tail corrupt in Xfree() for small block (adr=0x%x, val=0x%x)\n",(char *)ptr + size,*(unsigned long *)((char *)ptr + size));
|
||||
XfreeTrap();
|
||||
#endif
|
||||
LOG_FREE("Xalloc error: Tail corrupt in Xfree() for small block", ptr);
|
||||
return;
|
||||
}
|
||||
#endif /* SIZE_TAIL */
|
||||
|
||||
#ifdef XFREE_ERASES
|
||||
memset(ptr,0xF0,size);
|
||||
#endif /* XFREE_ERASES */
|
||||
#ifdef XALLOC_DEBUG
|
||||
pheader[1] = MAGIC_FREE;
|
||||
#endif
|
||||
/* put this small block at the head of the list */
|
||||
indx = (size-1) / SIZE_STEPS;
|
||||
*(unsigned long **)(ptr) = free_lists[indx];
|
||||
free_lists[indx] = (unsigned long *)ptr;
|
||||
LOG_FREE("Xfree", ptr);
|
||||
return;
|
||||
|
||||
#if defined(HAS_MMAP_ANON) || defined(MMAP_DEV_ZERO)
|
||||
} else if (size >= MIN_LARGE) {
|
||||
/*
|
||||
* large block
|
||||
*/
|
||||
#ifdef SIZE_TAIL
|
||||
if (MAGIC2 != ((unsigned long *)((char *)ptr + size))[0]) {
|
||||
/* Diagnostic */
|
||||
#ifdef FATALERRORS
|
||||
XfreeTrap();
|
||||
FatalError("Xalloc error: Tail corrupt in Xfree() for big block (adr=0x%x, val=0x%x)\n",(char *)ptr+size,((unsigned long *)((char *)ptr + size))[0]);
|
||||
#else
|
||||
ErrorF("Xalloc error: Tail corrupt in Xfree() for big block (adr=0x%x, val=0x%x)\n",(char *)ptr+size,((unsigned long *)((char *)ptr + size))[0]);
|
||||
XfreeTrap();
|
||||
#endif
|
||||
LOG_FREE("Xalloc error: Tail corrupt in Xfree() for big block", ptr);
|
||||
return;
|
||||
}
|
||||
size += SIZE_TAIL;
|
||||
#endif /* SIZE_TAIL */
|
||||
|
||||
LOG_FREE("Xfree", ptr);
|
||||
size += SIZE_HEADER;
|
||||
munmap((caddr_t)pheader, (size_t)size);
|
||||
/* no need to clear - mem is inaccessible after munmap.. */
|
||||
#endif /* HAS_MMAP_ANON */
|
||||
|
||||
} else {
|
||||
/*
|
||||
* medium sized block
|
||||
*/
|
||||
#ifdef SIZE_TAIL
|
||||
if (MAGIC2 != *(unsigned long *)((char *)ptr + size)) {
|
||||
/* Diagnostic */
|
||||
#ifdef FATALERRORS
|
||||
XfreeTrap();
|
||||
FatalError("Xalloc error: Tail corrupt in Xfree() for medium block (adr=0x%x, val=0x%x)\n",(char *)ptr + size,*(unsigned long *)((char *)ptr + size));
|
||||
#else
|
||||
ErrorF("Xalloc error: Tail corrupt in Xfree() for medium block (adr=0x%x, val=0x%x)\n",(char *)ptr + size,*(unsigned long *)((char *)ptr + size));
|
||||
XfreeTrap();
|
||||
#endif
|
||||
LOG_FREE("Xalloc error: Tail corrupt in Xfree() for medium block", ptr);
|
||||
return;
|
||||
}
|
||||
#endif /* SIZE_TAIL */
|
||||
|
||||
#ifdef XFREE_ERASES
|
||||
memset(pheader,0xF0,size+SIZE_HEADER);
|
||||
#endif /* XFREE_ERASES */
|
||||
#ifdef XALLOC_DEBUG
|
||||
pheader[1] = MAGIC_FREE;
|
||||
#endif
|
||||
|
||||
LOG_FREE("Xfree", ptr);
|
||||
free((char *)pheader);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
OsInitAllocator (void)
|
||||
{
|
||||
static Bool beenhere = FALSE;
|
||||
|
||||
if (beenhere)
|
||||
return;
|
||||
beenhere = TRUE;
|
||||
|
||||
#if defined(HAS_MMAP_ANON) || defined (MMAP_DEV_ZERO)
|
||||
pagesize = -1;
|
||||
#if defined(_SC_PAGESIZE) || defined(HAS_SC_PAGESIZE)
|
||||
pagesize = sysconf(_SC_PAGESIZE);
|
||||
#endif
|
||||
#ifdef _SC_PAGE_SIZE
|
||||
if (pagesize == -1)
|
||||
pagesize = sysconf(_SC_PAGE_SIZE);
|
||||
#endif
|
||||
#ifdef HAS_GETPAGESIZE
|
||||
if (pagesize == -1)
|
||||
pagesize = getpagesize();
|
||||
#endif
|
||||
#ifdef PAGE_SIZE
|
||||
if (pagesize == -1)
|
||||
pagesize = PAGE_SIZE;
|
||||
#endif
|
||||
if (pagesize == -1)
|
||||
FatalError("OsInitAllocator: Cannot determine page size\n");
|
||||
#endif
|
||||
|
||||
/* set up linked lists of free blocks */
|
||||
bzero ((char *) free_lists, MAX_SMALL/SIZE_STEPS*sizeof(unsigned long *));
|
||||
|
||||
#ifdef MMAP_DEV_ZERO
|
||||
/* open /dev/zero on systems that have mmap, but not MAP_ANON */
|
||||
if (devzerofd < 0) {
|
||||
if ((devzerofd = open("/dev/zero", O_RDWR, 0)) < 0)
|
||||
FatalError("OsInitAllocator: Cannot open /dev/zero (errno=%d)\n",
|
||||
errno);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef XALLOC_LOG
|
||||
/* reset the log file to zero length */
|
||||
{
|
||||
FILE *f;
|
||||
f = fopen(XALLOC_LOG_FILE, "w");
|
||||
if (NULL!=f)
|
||||
fclose(f);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#else /* !INTERNAL_MALLOC */
|
||||
/* This is to avoid an empty .o */
|
||||
static int no_internal_xalloc;
|
||||
#endif /* INTERNAL_MALLOC */
|
|
@ -73,7 +73,7 @@ RRCrtcCreate (ScreenPtr pScreen, void *devPrivate)
|
|||
return FALSE;
|
||||
pScrPriv->crtcs = crtcs;
|
||||
|
||||
crtc = xalloc (sizeof (RRCrtcRec));
|
||||
crtc = xcalloc (1, sizeof (RRCrtcRec));
|
||||
if (!crtc)
|
||||
return NULL;
|
||||
crtc->id = FakeClientID (0);
|
||||
|
|
|
@ -166,6 +166,8 @@ RRModesForScreen (ScreenPtr pScreen, int *num_ret)
|
|||
int num_screen_modes = 0;
|
||||
|
||||
screen_modes = xalloc ((num_modes ? num_modes : 1) * sizeof (RRModePtr));
|
||||
if (!screen_modes)
|
||||
return NULL;
|
||||
|
||||
/*
|
||||
* Add modes from all outputs
|
||||
|
|
|
@ -1292,7 +1292,7 @@ ProcRenderAddGlyphs (ClientPtr client)
|
|||
|
||||
pDstPix = (pScreen->CreatePixmap) (pScreen,
|
||||
width, height, depth,
|
||||
CREATE_PIMXAP_USAGE_GLYPH_PICTURE);
|
||||
CREATE_PIXMAP_USAGE_GLYPH_PICTURE);
|
||||
|
||||
GlyphPicture (glyph)[screen] = pDst =
|
||||
CreatePicture (0, &pDstPix->drawable,
|
||||
|
|
|
@ -405,7 +405,8 @@ XID winID = 0;
|
|||
|
||||
if ((force||(xkbi->desc->ctrls->enabled_ctrls&XkbAudibleBellMask))&&
|
||||
(!eventOnly)) {
|
||||
(*kbd->kbdfeed->BellProc)(percent,kbd,(pointer)pCtrl,class);
|
||||
if (kbd->kbdfeed->BellProc)
|
||||
(*kbd->kbdfeed->BellProc)(percent,kbd,(pointer)pCtrl,class);
|
||||
}
|
||||
interest = kbd->xkb_interest;
|
||||
if ((!interest)||(force))
|
||||
|
|
Loading…
Reference in New Issue
Block a user