Looking at
RPC_STATUS WINAPI RpcBindingVectorFree( RPC_BINDING_VECTOR** BindingVector )
{
RPC_STATUS status;
ULONG c;
TRACE("(%p)\n", BindingVector);
for (c=0; c<(*BindingVector)->Count; c++) {
status = RpcBindingFree(&(*BindingVector)->BindingH[c]);
}
HeapFree(GetProcessHeap(), 0, *BindingVector);
*BindingVector = NULL;
return RPC_S_OK;
}
we currently always ignore the outcome of RpcBindingFree and return
RPC_S_OK.
However, there is one case where RpcBindingFree returns something
different (which is if *Binding is null when RPC_S_INVALID_BINDING
is returned).
What is the proper way of handling this? Just keeping the code as
is and removing the unused status variable? Breaking the loop once
RpcBindingFree returns something different from RPC_S_OK? Continuing
and returning the first / the last status different from RPC_S_OK?
Gerald
Dear all,
While test another online bank with wine ActiveX,
I got an unimplemented fuction of ntoskrnl: IoGetDeviceInterfaces,
I found it listed in http://source.winehq.org/WineAPI/ntoskrnl.html as a stup,
so I can't understand this log:
wine: Unimplemented function ntoskrnl.exe.IoGetDeviceInterfaces called
at address 0x7b839552 (thread 0022), starting debugger...
Grateful for any explain!
env:
wine1.3.12 on Ubuntu 10.04
Here are the steps:
1. install an ActiveX from
https://e.bank.ecitic.com/perbank5/plugs/CNCBSecPkg_EN.exe
$ rm -rf ~/.wine
$ winetricks -q mfc42
$ wine CNCBSecPkg_EN.exe
fixme:ole:DllRegisterServer stub
fixme:win:DisableProcessWindowsGhosting : stub
fixme:msg:ChangeWindowMessageFilter c057 00000001
fixme:msg:ChangeWindowMessageFilter c057 00000001
fixme:msg:ChangeWindowMessageFilter c057 00000001
fixme:ole:CoCreateInstance no instance created for interface
{ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf} of class
{56fdf344-fd6d-11d0-958a-006097c9a090}, hres is 0x80004002
fixme:sfc:SfcIsFileProtected ((nil), L"C:\\Program
Files\\\4e2d\4fe1\94f6\884c\7f51\94f6\5b89\5168\63a7\4ef6\\unins000.exe")
stub
fixme:win:WINNLSEnableIME hUnknown1 0x1011a bUnknown2 0: stub!
fixme:win:WINNLSEnableIME hUnknown1 0x1011a bUnknown2 -1: stub!
fixme:win:WINNLSEnableIME hUnknown1 0x1011a bUnknown2 0: stub!
wine: Call from 0x7b839552 to unimplemented function
ntoskrnl.exe.IoGetDeviceInterfaces, aborting
wine: Unimplemented function ntoskrnl.exe.IoGetDeviceInterfaces called
at address 0x7b839552 (thread 002b), starting debugger...
wine: Call from 0x7b839552 to unimplemented function
ntoskrnl.exe.IoGetDeviceInterfaces, aborting
wine: Call from 0x7b839552 to unimplemented function
ntoskrnl.exe.IoGetDeviceInterfaces, aborting
2. open the online bank entry with wine builtin IE, then IE will crash:
$ wine iexplore https://e.bank.ecitic.com/perbank5/signIn.do
Please checkout the full log here:
http://pastebin.com/rbAg7gwj
Should I file a singel bug in ntoskrnl component , or separate bugs,
one for ntoskrnl and one for the IE crashing?
Generalliy what component should I switch while file a bug about IE crashing?
Many thanks!
--
Regards,
Qian Hong
-
Sent from Ubuntu
http://www.ubuntu.com/
Good Afternoon.
In section 3.3.6.2 of your User Guide you ask readers to report
successes with databases other than MS SQL. Well here's one (I know
Access 2000 can work with Wine, but this doesn't require Access):
How to set up Wine to enable Windows programs that read and write to Jet
(Access)
databases using ODBC. I write such programs in C and use the API defined in
ODBC API Reference
http://msdn.microsoft.com/en-us/library/ms714562%28VS.85%29.aspx
They work fine on Windows and only require Mingw to be installed to
compile and link them,
both for console programs and those using Windows SDK.
You then can write interactive programs in C which use a full-featured
SQL database which
comes bundled with Windows. No need to purchase Access.
With the set-up below they will also run on Linux (Kubuntu 9.04) and
Wine 1.1.26.
You need to update the registry to install the Access drivers.
Under Windows, export from the Registry to *.reg files the registry entries
- HKLM\Software\ODBC
- HKLM\Software\Microsoft\Jet
all subsidiary keys and values come with them.
You can carefully edit these files to remove drivers and DSNs you don't
need.
Import these files using the registry editor in wine:
wine regedit.exe.
You need to bring across from Windows to Windows\System32 under wine:
clbcatq.dll
comres.dll
expsrv.dll
msjet40.dll
mswstr10.dll
msjter40.dll
msjint40.dll
msjtes40.dll
msrd3x40.dll
odbc32.dll
odbccp32.dll
odbcji32.dll
odbcjt32.dll
odbcad32.exe
odbcint.dll
odbctrac.dll
vbajet32.dll
Register this server in wine:
wine regsvr32.exe msjtes40.dll
No need to install MDAC.
To use Windows ODBC drivers, you have to override Wine's odbccp32.dll
and odbc32.dll with the native
versions because the Wine versions are currently wired directly to
Linux's unixodbc.
This can be done by setting up the ODBC Data Source Administrator
odbcad32.exe using winecfg:
- Add the program to the Applications tab
- then in the libraries tab, pick from 'New override for library' drop-down
odbc32.dll and odbccp32.dll add them and edit them to be Native for Windows.
Then if you do
wine odbcad32.exe
this brings up the ODBC Data Source Administrator window as in the
Windows Control Panel
If needed, set up (System) DSNs using this program.
Bring across the programs and *.mdb database files from Windows.
Using winecfg, you need to set up each program you want to run with
overrides for odbc32.dll and odbccp32.dll
(Applications and Libraries tabs) as above.
The programs should then run as they did in Windows but perhaps a bit
slower with:
wine Odbc-prog.exe
This has been tested twice on a clean .wine install. I cannot vouch
for support of all API and SQL facilities however.
I hope someone finds this useful.
Barry Bird
On 08.10.2016 22:31, Gerald Pfeifer wrote:
> + char cStr[sizeof(dent->d_name)+sizeof(procname_ide_media)],
http://man7.org/linux/man-pages/man3/readdir.3.html says:
"""The standard also notes that the use of sizeof(d_name) is
incorrect; use strlen(d_name) instead. (On some systems, this field
is defined as char d_name[1]!)"""
This means your solution will not work on all systems.
Hi Gerald,
In wine-1.9.22-129-g906e770 I see the array subscript warnings in the
following location:
../../../../wine/dlls/msvcirt/tests/msvcirt.c: In function ‘test_strstream’:
../../../../wine/dlls/msvcirt/tests/msvcirt.c:6861:34: warning: array
subscript is above array bounds [-Warray-bounds]
ok(pssb->base.ebuf == buffer + 0x7fffffff || pssb->base.ebuf == (char*) -1,
~~~~~~~^~~~~~~~~~~~
../../../../wine/dlls/msvcirt/tests/msvcirt.c:6868:35: warning: array
subscript is above array bounds [-Warray-bounds]
ok(pssb->base.epptr == buffer + 0x7fffffff || pssb->base.epptr ==
(char*) -1,
Thought I'd let you know as I just encountered this while compiling
the 64-bit version of Wine.
Cheers,
Filip
On 18 November 2016 at 12:43, Carlos Garnacho <carlosg(a)gnome.org> wrote:
> Change the strategy used to get raw motion from slave devices. Instead
> of selecting for XI2 events for every slave device individually, do it
> for XIAllDevices, and store the current device's relative X/Y valuators
> so they can be quickly looked up in the XI_RawMotion events received.
>
I think this makes sense, and in my (limited) testing this correctly
handles the case of attaching a new input device. I do have a few
minor comments though:
> +static void update_relative_valuators(XIAnyClassInfo **valuators,
> + int n_valuators)
This should probably just be "static void update_relative_valuators(
XIAnyClassInfo **valuators, int n_valuators )"
> + free( thread_data->x_rel_valuator );
> + free( thread_data->y_rel_valuator );
...
> + thread_data->x_rel_valuator = malloc( sizeof(XIValuatorClassInfo) );
> + memcpy ( thread_data->x_rel_valuator, class, sizeof(XIValuatorClassInfo) );
We generally avoid malloc()/free() in Wine code and use
HeapAlloc()/HeapFree() instead. The main consideration has to do with
the way address space is allocated for Win32 applications, effectively
making malloc() space a bit more scarce than HeapAlloc() space. We'd
probably prefer the sizeof as "sizeof(*thread_data->x_rel_valuator)",
or perhaps "sizeof(*class)".
I'm not sure how much we should worry about this in practice, but when
multiple slaves are attached to the master, and they're not completely
idle, update_relative_valuators() can end up getting called quite a
bit. It doesn't seem hard to at least do the allocation only once, and
only update the data in update_relative_valuators(). Perhaps it's also
fine the way it is though.
> - XISetMask( mask_bits, XI_ButtonPress );
This was added intentionally (see also
https://bugs.winehq.org/show_bug.cgi?id=27522#c18). Perhaps it's no
longer needed, but that would need to be a separate patch.
> + pointer_info = pXIQueryDevice( data->display, data->xi2_core_pointer, &count );
> + update_relative_valuators( pointer_info->classes, pointer_info->num_classes );
> + pXIFreeDeviceInfo( pointer_info );
...
> + pXISelectEvents( data->display, DefaultRootWindow( data->display ), &mask, 1 );
I'm not too concerned about it, but can this race? I.e. switching
slaves between when update_relative_valuators() is called above and
when XISelectEvents() takes effect. Applies to querying the devices
list as well.
> + if (thread_data->xi2_current_slave == 0)
We'd typically write that "if (!thread_data->xi2_current_slave)",
although I don't think anyone would be overly concerned about it.
> + for (i = 0; i <= max ( x_rel->number, y_rel->number ); i++)
> + {
> +»······if (!XIMaskIsSet( event->valuators.mask, i )) continue;
> +»······val = *values++;
> +»······if (i == x_rel->number)
> +»······{
> + input.u.mi.dx = dx = val;
> +»······ if (x_rel->min < x_rel->max)
> + input.u.mi.dx = val * (virtual_rect.right - virtual_rect.left)
> + / (x_rel->max - x_rel->min);
> +»······}
> +»······if (i == y_rel->number)
> +»······{
> +»······ input.u.mi.dy = dy = val;
> +»······ if (y_rel->min < y_rel->max)
You're using tabs for indentation here.
CodeWeavers has two machines that I have been running WineTest on, in
Linux, Windows 8.1 and Windows 10, in 32 and 64 bit. They are identical
except for the graphics cards: AMD HD6800 for cw1 and Nvidia GTX560 for
cw2.
During WineConf we decided that these should be able to run WineTest on
Linux without any errors and thus become reference WineTest machines.
We are not quite there yet so here is the current status starting with
the 32 bit tests.
* crypt32:chain
Some of the certificates used by this test are present on Windows
but missing on Linux, thus causing the error. Hans is looking into it
and either the test will be modified to use other certificates present
on both platforms, or the certificates will be added to these boxes.
In the latter case this will be documented on the Wiki:
https://wiki.winehq.org/Conformance_Tests#Running_WineTest_in_Wine
* d2d1:d2d1, d3d10core:device
These tests only fails on the GTX560. The reason is unknown. We need
someone to look into it.
* d3d8:device, d3d9:d3d9ex, d3d9:device, d3d9:visual
Matteo fixed the radeon driver configuration and is looking into these
failures, at least for the HD6800 case.
It is possible some of these failures are caused by the window manager
(currently xfwm from Xfce). Replacing the windows manager is no issue,
we just need to know which one to pick. fvwm2?
* kernel32:console, kernel32:process
These failures happen because the tests are being run from cron, with
their output redirected to a log file and thus they have no real
terminal to work with. Interestingly the 64 bit tests are not failing.
Vincent is investigating whether the tests should be modified or
whether the test should be run from an xterm, screen session or some
equivalent.
* user32:winstation
winstation.c:959: Test succeeded inside todo block: unexpected foreground window (nil)
The cause for this failure has not been identified. Another window
manager issue?
* ws2_32:sock
sock.c:2811: Test succeeded inside todo block: Test[2]: expected 0, got 0
We need someone to investigate this failure. It looks like it's random
and relatively rare.
Some tests just cannot be made to work reliably on Linux due to the
asynchronous nature of X11 messaging. So another decision that was made
that tests should be run up to 3 times until they succeed. It's not
entirely clear if that applies to all tests or just to specific tests
that are known to be flaky.
The practical upshot is that people running 'make test' can re-run it a
couple of times if it fails at first, and if it succeeds after 3 tries
then you can consider that it's all good.
These machines run WineTest so the results can be uploaded to
test.winehq.org (with the relevant header describing the machine, the
dlls, etc). So WineTest may need to be updated to deal with flaky tests
according to policy.
Here is more detail about these machines:
* i7-2600K (4 cores+hyperthreading at 3.4GHz)
* 16 GB of RAM
* 768 GB of spinning disk
* Debian 8.2 64 bit
* cw1: AMD HD6800 running the open-source radeon driver.
* cw2: Nvidia GTX560 running the proprietary driver.
--
Francois Gouget <fgouget(a)codeweavers.com>
Using Wine version 1.8 on Ubuntu 14.04.5
I'm trying to use a AVRT5 APRS amateur radio GPRS tracker which has a
serial interface. The device is supplied with a Prolific USB serial
converter which comes up as /dev/ttyUSB0 which
I have sym linked to COM1
The bundled GPRS tracker config software installs and runs OK under
Wine. But my attempts to sniff the serial port traffic fails using all
the standard Linux methods I know.
I also tried using the Windows program Serial Port Monitor under Wine
http://www.eltima.com/products/serial-port-monitor/ . This program
says it cannot detect any serial ports.
Under Windows 7 the config program and Serial Port Monitor both work
well and I can intercept all the serial traffic
Any ideas please folks?
Bill