File wine-0.9.26.diff of Package wine
diff -ruN -x CVS wine-0.9.11/dlls/gdi/freetype.c marcus-wine-0.9.11/dlls/gdi/freetype.c
--- wine-0.9.11/dlls/gdi/freetype.c 2006-03-31 14:10:28.000000000 +0200
+++ marcus-wine-0.9.11/dlls/gdi/freetype.c 2006-03-31 14:09:25.000000000 +0200
@@ -455,9 +455,17 @@
int i, bitmap_num, internal_leading;
FONTSIGNATURE fs;
+ /* ethiopian font which says it is regular, but it isn't. */
+ if (strstr(file,"GohaTibebZemen.ttf"))
+ return FALSE;
+ /* koffice-wordprocessing brings esstix* which appear as symbol/greek fonts */
+ if (strstr(file,"esstix"))
+ return FALSE;
+
do {
char *family_name = fake_family;
+
TRACE("Loading font file %s index %ld\n", debugstr_a(file), face_index);
if((err = pFT_New_Face(library, file, face_index, &ft_face)) != 0) {
WARN("Unable to load font file %s err = %x\n", debugstr_a(file), err);
@@ -1049,7 +1057,8 @@
dir = opendir(dirname);
if(!dir) {
- ERR("Can't open directory %s\n", debugstr_a(dirname));
+ /* might just be a long list of possible directories, so not ERR */
+ WARN("Can't open directory %s\n", debugstr_a(dirname));
return FALSE;
}
while((dent = readdir(dir)) != NULL) {
diff -ruN -x CVS wine-0.9.11/dlls/opengl32/wgl.c marcus-wine-0.9.11/dlls/opengl32/wgl.c
--- wine-0.9.11/dlls/opengl32/wgl.c 2006-03-30 11:47:50.000000000 +0200
+++ marcus-wine-0.9.11/dlls/opengl32/wgl.c 2006-03-31 11:54:59.000000000 +0200
@@ -535,15 +535,29 @@
BOOL ret;
DWORD type = GetObjectType(hdc);
- TRACE("(%p,%p)\n", hdc, hglrc);
+ FIXME("(%p,%p)\n", hdc, hglrc);
ENTER_GL();
if (hglrc == NULL) {
ret = glXMakeCurrent(default_display, None, NULL);
NtCurrentTeb()->glContext = NULL;
} else {
+ POINT pt;
Wine_GLContext *ctx = (Wine_GLContext *) hglrc;
Drawable drawable = get_drawable( hdc );
+ int ret;
+
+ memset( &pt, 0, sizeof(pt));
+ if (GetViewportOrgEx (hdc, &pt)) FIXME("GWOEX failed\n");
+ FIXME("worg is %d.%dn", pt.x, pt.y);
+ if (GetViewportExtEx (hdc, &pt)) FIXME("GWEEX failed\n");
+ FIXME("wext is %d.%dn", pt.x, pt.y);
+
+ if (IsBadReadPtr(ctx,sizeof(*ctx))) {
+ ERR("hglrc is bad (%p)\n", hglrc);
+ return FALSE;
+ }
+
if (ctx->ctx == NULL) {
int draw_vis_id, ctx_vis_id;
VisualID visualid = (VisualID)GetPropA( GetDesktopWindow(), "__wine_x11_visual_id" );
@@ -569,7 +583,7 @@
}
TRACE(" created a delayed OpenGL context (%p)\n", ctx->ctx);
}
- TRACE(" make current for dis %p, drawable %p, ctx %p\n", ctx->display, (void*) drawable, ctx->ctx);
+ FIXME(" make current for dis %p, drawable %p, ctx %p\n", ctx->display, (void*) drawable, ctx->ctx);
ret = glXMakeCurrent(ctx->display, drawable, ctx->ctx);
NtCurrentTeb()->glContext = ctx;
if(ret && type == OBJ_MEMDC)
diff -ruN -x CVS wine-0.9.11/libs/wine/mmap.c marcus-wine-0.9.11/libs/wine/mmap.c
--- wine-0.9.11/libs/wine/mmap.c 2006-02-15 17:42:21.000000000 +0100
+++ marcus-wine-0.9.11/libs/wine/mmap.c 2006-02-08 16:46:47.000000000 +0100
@@ -301,6 +301,7 @@
}
}
+#if 0
if (stack_ptr >= user_space_limit)
{
char *base = stack_ptr - ((unsigned int)stack_ptr & granularity_mask) - (granularity_mask + 1);
@@ -314,6 +315,7 @@
reserve_area( base, 0 );
}
else reserve_area( user_space_limit, 0 );
+#endif
#endif /* __i386__ */
/* reserve the DOS area if not already done */
diff -ruN -x CVS wine-0.9.11/loader/preloader.c marcus-wine-0.9.11/loader/preloader.c
--- wine-0.9.11/loader/preloader.c 2006-02-15 17:42:21.000000000 +0100
+++ marcus-wine-0.9.11/loader/preloader.c 2006-03-30 11:44:16.000000000 +0200
@@ -208,6 +208,14 @@
return SYSCALL_RET(ret);
}
+static inline int wld_personality( int perso )
+{
+ int ret;
+ __asm__ __volatile__( "pushl %%ebx; movl %2,%%ebx; int $0x80; popl %%ebx"
+ : "=a" (ret) : "0" (SYS_personality), "r" (perso) );
+ return SYSCALL_RET(ret);
+}
+
static inline ssize_t wld_read( int fd, void *buffer, size_t len )
{
int ret;
@@ -226,6 +234,14 @@
return SYSCALL_RET(ret);
}
+static inline int wld_execve( const char * path, char **argv, char ** envp )
+{
+ int ret;
+ __asm__ __volatile__( "pushl %%ebx; movl %2,%%ebx; int $0x80; popl %%ebx"
+ : "=a" (ret) : "0" (SYS_execve), "r" (path), "c" (argv), "d" (envp) );
+ return SYSCALL_RET(ret);
+}
+
static inline int wld_mprotect( const void *addr, size_t len, int prot )
{
int ret;
@@ -914,6 +930,7 @@
ElfW(auxv_t) new_av[12], delete_av[3], *av;
struct wld_link_map main_binary_map, ld_so_map;
struct wine_preload_info **wine_main_preload_info;
+ unsigned int perso;
pargc = *stack;
argv = (char **)pargc + 1;
@@ -922,6 +939,19 @@
/* skip over the parameters */
p = argv + *pargc + 1;
+ perso = wld_personality(0xffffffff);
+ if (!(perso & 0x200000)) {
+ unsigned int newperso;
+ wld_personality(perso | 0x200000);
+ newperso = wld_personality(0xffffffff);
+ /* only execve() if the personality changed, otherwise we will loop */
+ if (newperso != perso) {
+ wld_execve(argv[0],argv,p);
+ fatal_error( "Failed execve %s\n", argv[0] );
+ return NULL;
+ }
+ }
+
/* skip over the environment */
while (*p)
{
diff -ruN -x CVS wine-0.9.11/programs/winecfg/audio.c marcus-wine-0.9.11/programs/winecfg/audio.c
--- wine-0.9.11/programs/winecfg/audio.c 2006-03-23 11:29:22.000000000 +0100
+++ marcus-wine-0.9.11/programs/winecfg/audio.c 2006-03-30 11:44:46.000000000 +0200
@@ -573,7 +573,7 @@
buf = get_reg_key(config_key, "Drivers", "Audio", NULL);
/* check for first time install and set a default driver
- * select in this order: oss, alsa, first available driver, none
+ * select in this order: alsa, oss, first available driver, none
*/
if (buf == NULL)
{
@@ -582,9 +582,9 @@
/* select oss if available */
for (pAudioDrv = loadedAudioDrv; *pAudioDrv->szName; pAudioDrv++)
{
- if (strcmp(pAudioDrv->szDriver, "oss") == 0)
+ if (strcmp(pAudioDrv->szDriver, "alsa") == 0)
{
- selectDriver(hDlg, "oss");
+ selectDriver(hDlg, "alsa");
break;
}
}
@@ -594,9 +594,9 @@
/* select alsa if available */
for (pAudioDrv = loadedAudioDrv; *pAudioDrv->szName; pAudioDrv++)
{
- if (strcmp(pAudioDrv->szDriver, "alsa") == 0)
+ if (strcmp(pAudioDrv->szDriver, "oss") == 0)
{
- selectDriver(hDlg, "alsa");
+ selectDriver(hDlg, "oss");
break;
}
}
diff -ruN -x CVS wine-0.9.11/server/registry.c marcus-wine-0.9.11/server/registry.c
--- wine-0.9.11/server/registry.c 2006-03-23 11:29:23.000000000 +0100
+++ marcus-wine-0.9.11/server/registry.c 2006-03-23 11:26:23.000000000 +0100
@@ -1622,7 +1622,7 @@
for (;;)
{
sprintf( p, "reg%lx%04x.tmp", (long) getpid(), count++ );
- if ((fd = open( tmp, O_CREAT | O_EXCL | O_WRONLY, 0666 )) != -1) break;
+ if ((fd = open( tmp, O_CREAT | O_EXCL | O_WRONLY, 0600 )) != -1) break;
if (errno != EEXIST) goto done;
close( fd );
}
diff -ruN -x CVS wine-0.9.11/tools/wineprefixcreate.in marcus-wine-0.9.11/tools/wineprefixcreate.in
--- wine-0.9.11/tools/wineprefixcreate.in 2006-03-23 11:29:23.000000000 +0100
+++ marcus-wine-0.9.11/tools/wineprefixcreate.in 2006-03-23 11:26:24.000000000 +0100
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
#
# Script to create the initial WINEPREFIX directory
#
@@ -145,6 +145,33 @@
[ -d "$WINEPREFIX/drive_c" ] || mkdir "$WINEPREFIX/drive_c"
ln -s "../drive_c" "$WINEPREFIX/dosdevices/c:"
ln -s "/" "$WINEPREFIX/dosdevices/z:"
+ ln -s "/tmp" "$WINEPREFIX/dosdevices/x:"
+ if [ -d "$HOME" ]; then
+ ln -s "$HOME" "$WINEPREFIX/dosdevices/y:"
+ if [ ! -f "$HOME/.windows-label" ]; then
+ echo "HOME" > "$HOME/.windows-label"
+ fi
+ fi
+ # autodetect CD-ROMS on SUSE.
+ drive=D
+ shopt -s nullglob
+ for i in /media/* ; do
+ bn=`basename $i`
+ if [ "$i" = "/media/floppy" ]; then
+ ln -s /media/floppy "$WINEPREFIX/dosdevices/a:"
+ ln -s /dev/fd0 "$WINEPREFIX/dosdevices/a::"
+ fi
+ if echo $bn| grep -E -v "^(sd|usb-storage|floppy)" >/dev/null; then
+ ln -s /media/$bn "$WINEPREFIX/dosdevices/"`echo $drive|tr "[A-Z]" "[a-z]"`:
+ ln -s /dev/$bn "$WINEPREFIX/dosdevices/"`echo $drive|tr "[A-Z]" "[a-z]"`::
+ drive=`echo $drive|tr "D-L" "E-M"`
+ fi
+ done
+ ln -s /dev/ttyS0 "$WINEPREFIX/dosdevices/com1"
+ ln -s /dev/ttyS1 "$WINEPREFIX/dosdevices/com2"
+ ln -s /dev/ttyS2 "$WINEPREFIX/dosdevices/com3"
+ ln -s /dev/ttyS3 "$WINEPREFIX/dosdevices/com4"
+ ln -s /dev/lp0 "$WINEPREFIX/dosdevices/lpt1"
fi
CROOT="$WINEPREFIX/dosdevices/c:"