The Wine maintenance release 1.8.1 is now available.

What's new in this release (see below for details):
  - Various bug fixes.
  - Small translation updates.

The source is available from the following locations:

  http://dl.winehq.org/wine/source/1.8/wine-1.8.1.tar.bz2
  http://mirrors.ibiblio.org/wine/source/1.8/wine-1.8.1.tar.bz2

Binary packages for various distributions will be available from:

  http://www.winehq.org/download

You will find documentation on http://www.winehq.org/documentation

You can also get the current source directly from the git
repository. Check http://www.winehq.org/git for details.

Wine is available thanks to the work of many people. See the file
AUTHORS in the distribution for the complete list.

----------------------------------------------------------------

Bugs fixed in 1.8.1 (total 24):

   7938  Gyldendal dictionary needs ole2disp.dll.SAFEARRAYALLOCDATA
  11023  Lack of ole2disp.dll.SAFEARRAYDESTROYDESCRIPTOR causes Nota Bene to refuse to launch
  22581  Internet Explorer 3.01 crashes on some web pages (unimplemented function ole2disp.dll16.VARIANTINIT)
  24658  Unimplemented function ole2.dll16.READCLASSSTM
  28113  winverbs doesn't work, needs ole2disp.dll16.SAFEARRAYALLOCDESCRIPTOR
  32852  BioEdit: changing the install directory doesn't show the change in the GUI
  34185  Castlevania: Lords of Shadow demo doesn't work after intro movies
  38076  GameRanger: unimplemented function dnsapi.dll.DnsFlushResolverCacheEntry_A
  38818  Umax Astra 4100 USB scanner driver installer needs setupx.dll16.DiBuildDriverIndex in Win9X mode
  39454  64-bit StarCraft II v3.0 client crashes immediately on startup (SetThreadContext on self with only DRx registers/CONTEXT_DEBUG_REGISTERS provided)
  39611  Any Video Converter (AVC) crashes after converting a video, needs msvcr100.dll._wtmpnam_s
  39660  some *-config scripts in configure.ac are not crosscompiling friendly
  39678  Zararadio can not read folder/file name path with Latin characters
  39739  Cobra 11 - Burning Wheels demo: crashes when starting the tutorial
  39752  The elder scrolls IV: Oblivion issues
  39805  GTAIV rendering is broken
  39811  GetLongPathName not working on case insensitive filesystems when short path is passed
  39904  Spurious "You must use msvcrt" error even when __MSVCRT__ is defined (-mno-cygwin)
  39943  Worms Armageddon opens wine explorer instead of running
  39952  trackbar thumb always at zero on dialog load.
  39953  StarCraft II: 64bit client crashing regularly due to access violation (0xC0000005)
  39954  StarCraft II: 64bit client only runs with lowest shader settings
  39974  Thumb slider doesn't respond to key events
  40052  Opening an RTF file with "A Wine application" fails with "File not found"

----------------------------------------------------------------

Changes since 1.8:

Alex Henrie (1):
      maintainers: Add Wine Staging maintainers.

Alexandre Julliard (4):
      Update copyright info for 2016.
      explorer: Support a quoted /desktop option.
      wine.inf: Fix the wordpad.exe path in associations.
      wine.inf: Add quotes around the wordpad.exe path.

Alistair Leslie-Hughes (2):
      msi: Allow PathEdit controls to be updated.
      msi: Refreh controls after spawned dialog is closed.

Andrew Eikum (1):
      maintainers: Add DirectShow section.

André Hentschel (1):
      include: Add more OID defines.

Anthony Fok (1):
      include: Suppress "use msvcrt" error in tchar.h when -mno-cygwin is used.

Austin English (1):
      setupx.dll16: Add DiBuildDriverIndex stub.

Frédéric Delanoy (2):
      loader: Update French translation of wine manpage.
      po: Update French translation.

Hans Leidekker (1):
      dnsapi: Add a stub implementation of DnsFlushResolverCacheEntry_A/UTF8/W.

Henri Verbeet (1):
      wined3d: Set WINED3D_BUFFER_DOUBLEBUFFER for managed buffers as well.

Jactry Zeng (1):
      po: Update Simplified Chinese translation.

Józef Kucia (1):
      d3d9: Implement d3d9_device_CreateDepthStencilSurfaceEx().

Matteo Bruni (1):
      wined3d: Regenerate FFP replacement VS on changes to the normal attribute in the vertex declaration.

Nikolay Sivov (10):
      ole2disp: Implement VariantInit().
      ole2: Fix error handling in ReadClassStg().
      ole2: Implement ReadClassStm().
      ole2disp: Implement SafeArrayAllocDescriptor().
      ole2disp: Implement SafeArrayDestroyDescriptor().
      ole2disp: Implement SafeArrayAllocData().
      msvcrt: Fix char to int promotion that breaks pattern lookup.
      comctl32/tests: Separate individual Trackbar tests from each other.
      comctl32/trackbar: Update thumb immediately on TBM_SETPOS.
      comctl32/trackbar: Update thumb immediately on key press.

Piotr Caban (4):
      ntdll: Fix NtQueryDirectoryFile behavior on short file names on case insensitive file systems.
      msvcrt: Add tmpnam_s implementation.
      msvcrt: Add _wtmpnam_s implementation.
      msvcrt: Fix modff signature.

Sebastian Lackner (2):
      ntdll: Check ContextFlags before restoring registers on x86_64.
      ntdll: Receive debug registers from server on x86_64.

Stefan Dösinger (1):
      wined3d: Prepare GL textures in surface_load_ds_location.

Thomas Petazzoni (1):
      configure: Allow to override the location of the *-config scripts.

--
Michael Stefaniuc
mstefani@winehq.org
