Paul Bryan Roberts write:
> The code as it stands creates makefiles with a mode of 600. This may be
> benign on most (e.g. personal workstation) installations but not all.
>
>An example is where the wine git repository is located on an NFS
>volume. Here security settings may mean that root:root is treated as
>nobody:nogroup. Installation from the repository is not possible as
>root (whether via su or sudo) cannot even read the makefiles
Where I work, NFS is set up so root cannot access any NFS
volumes, period, because you really can't trust remote systems
that much with NFS.
Hi,
I made some changes to DIB engine :
1) Some more consistent DIB type naming and color handling
2) Partial implementation of 256 ROP3 operations
3) Partial ROP3 implementation on blitting (stil no pattern)
4) Some optimizations in blitting code
I attach here the zipped patches.
Ciao
Max
Dear Developpers of Wine
I like wine and I like Tracker Software's PDFXChange-Viewer as well.
http://www.docu-track.com/home/prod_user/PDF-XChange_Tools/pdfx_viewer
So, today I was not getting any rest until i found out why these two
won't work together nicely. I mean they DO, actually. But I'm kind of
touchy. I was wondering all the time, why most of the settings I changed
were not restored as I exited and restarted the app.
I then discovered that if wineserver was preserved ("-p" option) beween
restarts they WERE restored. Further investigations unveiled that the
problem is triggered by the fact that wineserver is not storing the
registry key class name attributes. Something M$ must have come up with
in XP but that is not very wideley used. PDFXChange-Viewer however seems
to rely on it when parsing it's preferences from the registry on
startup.
Wineservers unicode string handling gave me a though time in
implementing a solution to this but i finally managed. You can see that
I went quiet straightforward: adding the class name next to the key name
in the {system,user}.reg files. There are two different versions of the
fix. I would prefer the second one because it preserves backwards
compatibility: In case the key class attribute is set, it is put in
brackets between the key name and modification time. Otherwise nothing
changes.
It would be really nice if this could be somehow integrated into wine.
(Not only because I worked on it for a whole day, but also because i
really miss the feature because i don't want to reconfigure
PDFXChange-Viewer every time i start it and also because I would like to
make that functionality available to all of my friends and all linux
users as well.
Greets
Patrick
[Software\\Tracker Software\\PDFViewer\\FullScreen\\MainView\\Bars\\0011;ParamItem] 1235760987
"Break"=dword:00000001
"ID"=dword:000081c9
"Name"="Properties"
[Software\\Tracker Software\\PDFViewer\\FullScreen\\MainView\\Bars\\0011] [ParamItem] 1235761189
"Break"=dword:00000001
"ID"=dword:000081c9
"Name"="Properties"
--- registry.c 2009-02-27 19:44:14.000000000 +0100
+++ registry.PP1.c 2009-02-27 19:49:03.000000000 +0100
@@ -176,7 +176,7 @@
dump_path( key->parent, base, f );
fprintf( f, "\\\\" );
}
- dump_strW( key->name, key->namelen / sizeof(WCHAR), f, "[]" );
+ dump_strW( key->name, key->namelen / sizeof(WCHAR), f, "[;" );
}
/* dump a value to a text file */
@@ -245,6 +245,8 @@
{
fprintf( f, "\n[" );
if (key != base) dump_path( key, base, f );
+ fprintf( f, ";" );
+ dump_strW( key->class, key->classlen / sizeof(WCHAR), f, "[]" );
fprintf( f, "] %ld\n", (long)key->modif );
for (i = 0; i <= key->last_value; i++) dump_value( &key->values[i], f );
}
@@ -1108,20 +1110,22 @@
int prefix_len, struct file_load_info *info,
int default_modif )
{
- WCHAR *p;
- struct unicode_str name;
- int res, modif;
- data_size_t len;
+ WCHAR *p, cls[256];
+ struct unicode_str name, class;
+ int res, res2, modif;
+ data_size_t len, len2 = 256;
if (!get_file_tmp_space( info, strlen(buffer) * sizeof(WCHAR) )) return NULL;
len = info->tmplen;
- if ((res = parse_strW( info->tmp, &len, buffer, ']' )) == -1)
+ if ((res = parse_strW( info->tmp, &len, buffer, ';' )) == -1 ||
+ (res2 = parse_strW( cls, &len2, buffer+res, ']' ) == -1))
{
file_read_error( "Malformed key", info );
return NULL;
}
- if (sscanf( buffer + res, " %d", &modif ) != 1) modif = default_modif;
+
+ if (sscanf( buffer + res + res2, " %d", &modif ) != 1) modif = default_modif;
p = info->tmp;
while (prefix_len && *p) { if (*p++ == '\\') prefix_len--; }
@@ -1138,7 +1142,10 @@
}
name.str = p;
name.len = len - (p - info->tmp + 1) * sizeof(WCHAR);
- return create_key( base, &name, NULL, flags, modif, &res );
+ class.str = cls;
+ class.len = len2 - sizeof(WCHAR);
+
+ return create_key( base, &name, &class, flags, modif, &res );
}
/* parse a comma-separated list of hex digits */
--- registry.c 2009-02-27 19:44:14.000000000 +0100
+++ registry.PP2.c 2009-02-27 19:59:28.000000000 +0100
@@ -245,6 +245,10 @@
{
fprintf( f, "\n[" );
if (key != base) dump_path( key, base, f );
+ if (key->class != NULL) {
+ fprintf( f, "] [" );
+ dump_strW( key->class, key->classlen / sizeof(WCHAR), f, "[]" );
+ }
fprintf( f, "] %ld\n", (long)key->modif );
for (i = 0; i <= key->last_value; i++) dump_value( &key->values[i], f );
}
@@ -1108,10 +1112,10 @@
int prefix_len, struct file_load_info *info,
int default_modif )
{
- WCHAR *p;
- struct unicode_str name;
- int res, modif;
- data_size_t len;
+ WCHAR *p, *c;
+ struct unicode_str name, class;
+ int res, c_res, modif;
+ data_size_t len, c_len;
if (!get_file_tmp_space( info, strlen(buffer) * sizeof(WCHAR) )) return NULL;
@@ -1121,6 +1125,23 @@
file_read_error( "Malformed key", info );
return NULL;
}
+
+ c_len = info->tmplen - len;
+ if ((c_res = parse_strW( info->tmp + len / sizeof(WCHAR), &c_len, buffer + res, ']' )) == -1)
+ {
+ class.len = 0;
+ }
+ else
+ {
+ res += c_res;
+
+ c = info->tmp + len / sizeof(WCHAR);
+ while (*c) { if (*c++ == '[') break; }
+
+ class.str = c;
+ class.len = c_len - (c - (info->tmp + len / sizeof(WCHAR)) + 1) * sizeof(WCHAR);
+ }
+
if (sscanf( buffer + res, " %d", &modif ) != 1) modif = default_modif;
p = info->tmp;
@@ -1138,6 +1159,9 @@
}
name.str = p;
name.len = len - (p - info->tmp + 1) * sizeof(WCHAR);
+
+ if (class.len > 0)
+ return create_key( base, &name, &class, flags, modif, &res );
return create_key( base, &name, NULL, flags, modif, &res );
}
Our currently released version is 1.0, but the appdb's
browse feature acts as if that version no longer exists.
This will seriously confuse newcomers who are using
the 1.0.1 version (e.g. anybody who installs a fresh
copy of Ubuntu!).
To fix this, we should add 1.0 (or 1.0.1) back into the search box in
http://appdb.winehq.org/objectManager.php?sClass=application
Francois Gouget wrote:
> ---
>
> winetest can detect if twain_32.dll is there or not, and if it's missing
> there's nothing to test anyway. Note that make_makefiles will need to be
> run.
This patch breaks make crosstest for me:
[apevia:~/w/wine/dlls/twain_32/tests] make crosstest
i586-mingw32msvc-gcc dsm.cross.o testlist.cross.o -o twain_32_crosstest.exe -L../../../dlls -L../../../dlls/twain_32 -L../../../dlls/user32 -L../../../dlls/gdi32 -L../../../dlls/kernel32 -ltwain_32 -luser32 -lgdi32 -lkernel32
/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/bin/ld: cannot find -ltwain_32
collect2: ld returned 1 exit status
make: *** [twain_32_crosstest.exe] Error 1
(it also breaks make test for me, but that may be operator error).
But, what's more, I do not see the point. Twain_32 is not a Microsoft
DLL; it is not present by default on most Windows systems. Further,
the API specifications are quite clear: you're supposed to LoadLibrary
Twain32, and all Twain applications I've tested do so. I don't see the
benefit in making our test behave differently than the recommended
behavior for this DLL.
Cheers,
Jeremy
see implementation in dual BSD-licensed _and_ LGPL-licensed freedce
reference implementation, on which MSRPC was originally blatantly
copied (thanks to the BSD license on the 1.0 reference
implementation).
e.g. online annotated copy here:
http://www.sfr-fresh.com/linux/misc/freedce-1.1.0.7.tar.gz:a/freedce-1.1.0.…
line 2470.
anyone who is doing wine dce/rpc development _really_ needs to be
looking at the reference implementation, side-by-side, line-for-line,
in virtually every aspect except for exception handling, threading,
binary-interoperability with the typelibraries and a few other areas.
l.
Dear Developpers of Wine
I like wine and I like Tracker Software's PDFXChange-Viewer as well.
http://www.docu-track.com/home/prod_user/PDF-XChange_Tools/pdfx_viewer
So, today I was not getting any rest until i found out why these two
won't work together nicely. I mean they DO, actually. But I'm kind of
touchy. I was wondering all the time, why most of the settings I changed
were not restored as I exited and restarted the app.
I then discovered that if wineserver was preserved ("-p" option) beween
restarts they WERE restored. Further investigations unveiled that the
problem is triggered by the fact that wineserver is not storing the
registry key class name attributes. Something M$ must have come up with
in XP but that is not very wideley used. PDFXChange-Viewer however seems
to rely on it when parsing it's preferences from the registry on
startup.
Wineservers unicode string handling gave me a though time in
implementing a solution to this but i finally managed. You can see that
I went quiet straightforward: adding the class name next to the key name
in the {system,user}.reg files. There are two different versions of the
fix. I would prefer the second one because it preserves backwards
compatibility: In case the key class attribute is set, it is put in
brackets between the key name and modification time. Otherwise nothing
changes.
It would be really nice if this could be somehow integrated into wine.
(Not only because I worked on it for a whole day, but also because i
really miss the feature because i don't want to reconfigure
PDFXChange-Viewer every time i start it and also because I would like to
make that functionality available to all of my friends and all linux
users as well.
Greets
Patrick
[Software\\Tracker Software\\PDFViewer\\FullScreen\\MainView\\Bars\\0011;ParamItem] 1235760987
"Break"=dword:00000001
"ID"=dword:000081c9
"Name"="Properties"
[Software\\Tracker Software\\PDFViewer\\FullScreen\\MainView\\Bars\\0011] [ParamItem] 1235761189
"Break"=dword:00000001
"ID"=dword:000081c9
"Name"="Properties"
--- registry.c 2009-02-27 19:44:14.000000000 +0100
+++ registry.PP1.c 2009-02-27 19:49:03.000000000 +0100
@@ -176,7 +176,7 @@
dump_path( key->parent, base, f );
fprintf( f, "\\\\" );
}
- dump_strW( key->name, key->namelen / sizeof(WCHAR), f, "[]" );
+ dump_strW( key->name, key->namelen / sizeof(WCHAR), f, "[;" );
}
/* dump a value to a text file */
@@ -245,6 +245,8 @@
{
fprintf( f, "\n[" );
if (key != base) dump_path( key, base, f );
+ fprintf( f, ";" );
+ dump_strW( key->class, key->classlen / sizeof(WCHAR), f, "[]" );
fprintf( f, "] %ld\n", (long)key->modif );
for (i = 0; i <= key->last_value; i++) dump_value( &key->values[i], f );
}
@@ -1108,20 +1110,22 @@
int prefix_len, struct file_load_info *info,
int default_modif )
{
- WCHAR *p;
- struct unicode_str name;
- int res, modif;
- data_size_t len;
+ WCHAR *p, cls[256];
+ struct unicode_str name, class;
+ int res, res2, modif;
+ data_size_t len, len2 = 256;
if (!get_file_tmp_space( info, strlen(buffer) * sizeof(WCHAR) )) return NULL;
len = info->tmplen;
- if ((res = parse_strW( info->tmp, &len, buffer, ']' )) == -1)
+ if ((res = parse_strW( info->tmp, &len, buffer, ';' )) == -1 ||
+ (res2 = parse_strW( cls, &len2, buffer+res, ']' ) == -1))
{
file_read_error( "Malformed key", info );
return NULL;
}
- if (sscanf( buffer + res, " %d", &modif ) != 1) modif = default_modif;
+
+ if (sscanf( buffer + res + res2, " %d", &modif ) != 1) modif = default_modif;
p = info->tmp;
while (prefix_len && *p) { if (*p++ == '\\') prefix_len--; }
@@ -1138,7 +1142,10 @@
}
name.str = p;
name.len = len - (p - info->tmp + 1) * sizeof(WCHAR);
- return create_key( base, &name, NULL, flags, modif, &res );
+ class.str = cls;
+ class.len = len2 - sizeof(WCHAR);
+
+ return create_key( base, &name, &class, flags, modif, &res );
}
/* parse a comma-separated list of hex digits */
--- registry.c 2009-02-27 19:44:14.000000000 +0100
+++ registry.PP2.c 2009-02-27 19:59:28.000000000 +0100
@@ -245,6 +245,10 @@
{
fprintf( f, "\n[" );
if (key != base) dump_path( key, base, f );
+ if (key->class != NULL) {
+ fprintf( f, "] [" );
+ dump_strW( key->class, key->classlen / sizeof(WCHAR), f, "[]" );
+ }
fprintf( f, "] %ld\n", (long)key->modif );
for (i = 0; i <= key->last_value; i++) dump_value( &key->values[i], f );
}
@@ -1108,10 +1112,10 @@
int prefix_len, struct file_load_info *info,
int default_modif )
{
- WCHAR *p;
- struct unicode_str name;
- int res, modif;
- data_size_t len;
+ WCHAR *p, *c;
+ struct unicode_str name, class;
+ int res, c_res, modif;
+ data_size_t len, c_len;
if (!get_file_tmp_space( info, strlen(buffer) * sizeof(WCHAR) )) return NULL;
@@ -1121,6 +1125,23 @@
file_read_error( "Malformed key", info );
return NULL;
}
+
+ c_len = info->tmplen - len;
+ if ((c_res = parse_strW( info->tmp + len / sizeof(WCHAR), &c_len, buffer + res, ']' )) == -1)
+ {
+ class.len = 0;
+ }
+ else
+ {
+ res += c_res;
+
+ c = info->tmp + len / sizeof(WCHAR);
+ while (*c) { if (*c++ == '[') break; }
+
+ class.str = c;
+ class.len = c_len - (c - (info->tmp + len / sizeof(WCHAR)) + 1) * sizeof(WCHAR);
+ }
+
if (sscanf( buffer + res, " %d", &modif ) != 1) modif = default_modif;
p = info->tmp;
@@ -1138,6 +1159,9 @@
}
name.str = p;
name.len = len - (p - info->tmp + 1) * sizeof(WCHAR);
+
+ if (class.len > 0)
+ return create_key( base, &name, &class, flags, modif, &res );
return create_key( base, &name, NULL, flags, modif, &res );
}
I updated the slides at http://kegel.com/cebit one more
time. The talk is this coming Thursday, so I'll probably
fiddle with it a bit more.
I did give a second practice run in front of a
live audience, including some windows sysadmins,
and they said it made Wine less scary. Which
is, I guess, my goal...
- Dan