OK here is the patch "wine-0.9.12.diff" : diff -ruN -x CVS wine-0.9.12/dlls/gdi/freetype.c marcus-wine-0.9.12/dlls/gdi/freetype.c --- wine-0.9.12/dlls/gdi/freetype.c 2006-04-12 18:10:49.000000000 +0200 +++ marcus-wine-0.9.12/dlls/gdi/freetype.c 2006-04-12 18:09:47.000000000 +0200 @@ -699,9 +699,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); diff -ruN -x CVS wine-0.9.12/dlls/ntdll/exception.c marcus-wine-0.9.12/dlls/ntdll/exception.c --- wine-0.9.12/dlls/ntdll/exception.c 2006-04-12 18:10:53.000000000 +0200 +++ marcus-wine-0.9.12/dlls/ntdll/exception.c 2006-04-10 18:07:46.000000000 +0200 @@ -312,6 +312,11 @@ rec->ExceptionCode, rec->ExceptionFlags, rec->ExceptionAddress ); for (c = 0; c < rec->NumberParameters; c++) TRACE( " info[%ld]=%08lx\n", c, rec->ExceptionInformation[c] ); + if (rec->ExceptionCode == STATUS_ILLEGAL_INSTRUCTION) + { + unsigned char *x = rec->ExceptionAddress; + FIXME("illegal instruction at %p, %02x %02x %02x %02x %02x %02x %02x %02x\n",x,x[0],x[1],x[2],x[3],x[4],x[5],x[6],x[7]); + } if (rec->ExceptionCode == EXCEPTION_WINE_STUB) { if (rec->ExceptionInformation[1] >> 16) diff -ruN -x CVS wine-0.9.12/dlls/opengl32/wgl.c marcus-wine-0.9.12/dlls/opengl32/wgl.c --- wine-0.9.12/dlls/opengl32/wgl.c 2006-03-30 11:47:50.000000000 +0200 +++ marcus-wine-0.9.12/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.12/libs/wine/mmap.c marcus-wine-0.9.12/libs/wine/mmap.c --- wine-0.9.12/libs/wine/mmap.c 2006-02-15 17:42:21.000000000 +0100 +++ marcus-wine-0.9.12/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.12/loader/preloader.c marcus-wine-0.9.12/loader/preloader.c --- wine-0.9.12/loader/preloader.c 2006-04-13 13:36:23.000000000 +0200 +++ marcus-wine-0.9.12/loader/preloader.c 2006-04-13 13:47:28.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.12/programs/winecfg/audio.c marcus-wine-0.9.12/programs/winecfg/audio.c --- wine-0.9.12/programs/winecfg/audio.c 2006-04-12 18:11:03.000000000 +0200 +++ marcus-wine-0.9.12/programs/winecfg/audio.c 2006-04-12 18:09:59.000000000 +0200 @@ -589,7 +589,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) { @@ -598,9 +598,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; } } @@ -610,9 +610,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.12/server/registry.c marcus-wine-0.9.12/server/registry.c --- wine-0.9.12/server/registry.c 2006-04-12 18:11:04.000000000 +0200 +++ marcus-wine-0.9.12/server/registry.c 2006-04-07 14:00:07.000000000 +0200 @@ -1623,7 +1623,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.12/tools/wineprefixcreate.in marcus-wine-0.9.12/tools/wineprefixcreate.in --- wine-0.9.12/tools/wineprefixcreate.in 2006-03-23 11:29:23.000000000 +0100 +++ marcus-wine-0.9.12/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:" _______________________________________________ wine-users mailing list wine-users@xxxxxxxxxx http://www.winehq.org/mailman/listinfo/wine-users