winehq.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
January
2003
December
November
October
September
August
July
June
May
April
March
February
January
2002
December
November
October
September
August
July
June
May
April
March
February
January
2001
December
November
October
September
August
July
June
May
April
March
February
List overview
wine-commits
April 2009
----- 2025 -----
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
----- 2003 -----
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
----- 2002 -----
December 2002
November 2002
October 2002
September 2002
August 2002
July 2002
June 2002
May 2002
April 2002
March 2002
February 2002
January 2002
----- 2001 -----
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001
June 2001
May 2001
April 2001
March 2001
February 2001
wine-commits@winehq.org
2 participants
664 discussions
Start a n
N
ew thread
Hans Leidekker : user32: By default, return all zeroes in the first half of the keyboard layout name.
by Alexandre Julliard
14 Apr '09
14 Apr '09
Module: wine Branch: master Commit: ed70c76adde1a41a71c3eb3129a05fc39ccf1918 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=ed70c76adde1a41a71c3eb312…
Author: Hans Leidekker <hans(a)codeweavers.com> Date: Tue Apr 14 12:34:37 2009 +0200 user32: By default, return all zeroes in the first half of the keyboard layout name. --- dlls/user32/tests/input.c | 14 ++++++++++++++ dlls/winex11.drv/keyboard.c | 2 -- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c index e4ad1de..4f3bd56 100644 --- a/dlls/user32/tests/input.c +++ b/dlls/user32/tests/input.c @@ -1284,6 +1284,19 @@ static void test_get_async_key_state(void) ok(0 == GetAsyncKeyState(-1000000), "GetAsyncKeyState did not return 0\n"); } +static void test_keyboard_layout_name(void) +{ + BOOL ret; + char klid[KL_NAMELENGTH]; + + if (GetKeyboardLayout(0) != (HKL)(ULONG_PTR)0x04090409) return; + + klid[0] = 0; + ret = GetKeyboardLayoutNameA(klid); + ok(ret, "GetKeyboardLayoutNameA failed %u\n", GetLastError()); + ok(!strcmp(klid, "00000409"), "expected 00000409, got %s\n", klid); +} + START_TEST(input) { init_function_pointers(); @@ -1300,6 +1313,7 @@ START_TEST(input) test_key_map(); test_ToUnicode(); test_get_async_key_state(); + test_keyboard_layout_name(); if(pGetMouseMovePointsEx) test_GetMouseMovePointsEx(); diff --git a/dlls/winex11.drv/keyboard.c b/dlls/winex11.drv/keyboard.c index 542e5a8..f7dad12 100644 --- a/dlls/winex11.drv/keyboard.c +++ b/dlls/winex11.drv/keyboard.c @@ -1914,8 +1914,6 @@ BOOL CDECL X11DRV_GetKeyboardLayoutName(LPWSTR name) langid = PRIMARYLANGID(LANGIDFROMLCID(layout)); if (langid == LANG_CHINESE || langid == LANG_JAPANESE || langid == LANG_KOREAN) layout |= 0xe001 << 16; /* FIXME */ - else - layout |= layout << 16; sprintfW(name, formatW, layout); TRACE("returning %s\n", debugstr_w(name));
1
0
0
0
Henri Verbeet : wined3d: Get rid of the "token" field from struct wined3d_shader_dst_param.
by Alexandre Julliard
14 Apr '09
14 Apr '09
Module: wine Branch: master Commit: d3fc7dca99715d9f9c9c06a33a9cf1bc15810e09 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=d3fc7dca99715d9f9c9c06a33…
Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Mon Apr 13 09:27:43 2009 +0200 wined3d: Get rid of the "token" field from struct wined3d_shader_dst_param. --- dlls/wined3d/arb_program_shader.c | 1 - dlls/wined3d/baseshader.c | 1 - dlls/wined3d/glsl_shader.c | 5 ----- dlls/wined3d/vertexshader.c | 5 ----- dlls/wined3d/wined3d_private.h | 1 - 5 files changed, 0 insertions(+), 13 deletions(-) diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c index ce20032..b5b5ad4 100644 --- a/dlls/wined3d/arb_program_shader.c +++ b/dlls/wined3d/arb_program_shader.c @@ -1634,7 +1634,6 @@ static void shader_hw_mnxn(const struct wined3d_shader_instruction *ins) tmp_dst = ins->dst[0]; for (i = 0; i < nComponents; i++) { tmp_dst.write_mask = WINED3DSP_WRITEMASK_0 << i; - tmp_dst.token = (tmp_dst.token & ~WINED3DSP_WRITEMASK_ALL) | tmp_dst.write_mask; tmp_ins.src[1] = ins->src[1]+i; shader_hw_map2gl(&tmp_ins); } diff --git a/dlls/wined3d/baseshader.c b/dlls/wined3d/baseshader.c index f24f9bc..08415c2 100644 --- a/dlls/wined3d/baseshader.c +++ b/dlls/wined3d/baseshader.c @@ -221,7 +221,6 @@ static void shader_parse_dst_param(DWORD param, DWORD addr_param, struct wined3d dst->modifiers = param & WINED3DSP_DSTMOD_MASK; dst->shift = (param & WINED3DSP_DSTSHIFT_MASK) >> WINED3DSP_DSTSHIFT_SHIFT; dst->has_rel_addr = param & WINED3DSHADER_ADDRMODE_RELATIVE; - dst->token = param; dst->addr_token = addr_param; } diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index 44e5e80..61c5701 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -1505,7 +1505,6 @@ static void shader_glsl_color_correction(const struct wined3d_shader_instruction dst = ins->dst[0]; dst.write_mask = mask; - dst.token = (dst.token & ~WINED3DSP_WRITEMASK_ALL) | dst.write_mask; shader_glsl_add_dst_param(ins, &dst, &dst_param); arguments[0] = '\0'; @@ -1976,9 +1975,7 @@ static void shader_glsl_cmp(const struct wined3d_shader_instruction *ins) cmp_channel = WINED3DSP_WRITEMASK_0 << j; } } - dst.write_mask = dst_mask & write_mask; - dst.token = (dst.token & ~WINED3DSP_WRITEMASK_ALL) | dst.write_mask; /* Splitting the cmp instruction up in multiple lines imposes a problem: * The first lines may overwrite source parameters of the following lines. @@ -2059,7 +2056,6 @@ static void shader_glsl_cnd(const struct wined3d_shader_instruction *ins) } dst.write_mask = dst_mask & write_mask; - dst.token = (dst.token & ~WINED3DSP_WRITEMASK_ALL) | dst.write_mask; write_mask = shader_glsl_append_dst_ext(ins->buffer, ins, &dst); if (!write_mask) continue; @@ -2140,7 +2136,6 @@ static void shader_glsl_mnxn(const struct wined3d_shader_instruction *ins) for (i = 0; i < nComponents; ++i) { tmp_dst.write_mask = WINED3DSP_WRITEMASK_0 << i; - tmp_dst.token = (tmp_dst.token & ~WINED3DSP_WRITEMASK_ALL) | tmp_dst.write_mask; tmp_ins.src[1] = ins->src[1] + i; shader_glsl_dot(&tmp_ins); } diff --git a/dlls/wined3d/vertexshader.c b/dlls/wined3d/vertexshader.c index 32fba08..fdd8cd8 100644 --- a/dlls/wined3d/vertexshader.c +++ b/dlls/wined3d/vertexshader.c @@ -174,10 +174,6 @@ static void vshader_set_input( unsigned int regnum, BYTE usage, BYTE usage_idx) { - /* Fake register; set reserved bit, regnum, type: input, wmask: all */ - DWORD reg_token = (0x1 << 31) | - WINED3DSP_WRITEMASK_ALL | (WINED3DSPR_INPUT << WINED3DSP_REGTYPE_SHIFT) | regnum; - This->semantics_in[regnum].usage = usage; This->semantics_in[regnum].usage_idx = usage_idx; This->semantics_in[regnum].reg.register_type = WINED3DSPR_INPUT; @@ -186,7 +182,6 @@ static void vshader_set_input( This->semantics_in[regnum].reg.modifiers = 0; This->semantics_in[regnum].reg.shift = 0; This->semantics_in[regnum].reg.has_rel_addr = FALSE; - This->semantics_in[regnum].reg.token = reg_token; This->semantics_in[regnum].reg.addr_token = 0; } diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 429e2bd..3d911de 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -452,7 +452,6 @@ struct wined3d_shader_dst_param DWORD modifiers; DWORD shift; BOOL has_rel_addr; - DWORD token; DWORD addr_token; };
1
0
0
0
Henri Verbeet : wined3d: Pass a struct wined3d_shader_dst_param to shader_arb_get_write_mask().
by Alexandre Julliard
14 Apr '09
14 Apr '09
Module: wine Branch: master Commit: 18cdcc0b7ee643903eebe0e20dbcbb2c05bd28b4 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=18cdcc0b7ee643903eebe0e20…
Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Mon Apr 13 09:27:43 2009 +0200 wined3d: Pass a struct wined3d_shader_dst_param to shader_arb_get_write_mask(). --- dlls/wined3d/arb_program_shader.c | 44 +++++++++++++++++++----------------- 1 files changed, 23 insertions(+), 21 deletions(-) diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c index abc30bf..ce20032 100644 --- a/dlls/wined3d/arb_program_shader.c +++ b/dlls/wined3d/arb_program_shader.c @@ -404,20 +404,23 @@ static const char * const shift_tab[] = { }; static void shader_arb_get_write_mask(const struct wined3d_shader_instruction *ins, - const DWORD param, char *write_mask) + const struct wined3d_shader_dst_param *dst, char *write_mask) { char *ptr = write_mask; char vshader = shader_is_vshader_version(ins->reg_maps->shader_version); - if(vshader && shader_get_regtype(param) == WINED3DSPR_ADDR) { + if (vshader && dst->register_type == WINED3DSPR_ADDR) + { *ptr++ = '.'; *ptr++ = 'x'; - } else if ((param & WINED3DSP_WRITEMASK_ALL) != WINED3DSP_WRITEMASK_ALL) { + } + else if (dst->write_mask != WINED3DSP_WRITEMASK_ALL) + { *ptr++ = '.'; - if (param & WINED3DSP_WRITEMASK_0) *ptr++ = 'x'; - if (param & WINED3DSP_WRITEMASK_1) *ptr++ = 'y'; - if (param & WINED3DSP_WRITEMASK_2) *ptr++ = 'z'; - if (param & WINED3DSP_WRITEMASK_3) *ptr++ = 'w'; + if (dst->write_mask & WINED3DSP_WRITEMASK_0) *ptr++ = 'x'; + if (dst->write_mask & WINED3DSP_WRITEMASK_1) *ptr++ = 'y'; + if (dst->write_mask & WINED3DSP_WRITEMASK_2) *ptr++ = 'z'; + if (dst->write_mask & WINED3DSP_WRITEMASK_3) *ptr++ = 'w'; } *ptr = '\0'; @@ -577,7 +580,7 @@ static void shader_arb_add_dst_param(const struct wined3d_shader_instruction *in wined3d_dst->register_idx, wined3d_dst->has_rel_addr, register_name, &is_color); strcat(str, register_name); - shader_arb_get_write_mask(ins, wined3d_dst->token, write_mask); + shader_arb_get_write_mask(ins, wined3d_dst, write_mask); strcat(str, write_mask); } @@ -811,7 +814,7 @@ static void pshader_hw_bem(const struct wined3d_shader_instruction *ins) shader_arb_get_register_name(ins->shader, dst->register_type, dst->register_idx, dst->has_rel_addr, dst_name, &is_color); - shader_arb_get_write_mask(ins, dst->token, dst_wmask); + shader_arb_get_write_mask(ins, dst, dst_wmask); strcat(dst_name, dst_wmask); pshader_gen_input_modifier_line(ins->shader, buffer, ins->src[0], 0, src_name[0]); @@ -846,7 +849,7 @@ static void pshader_hw_cnd(const struct wined3d_shader_instruction *ins) /* Handle output register */ shader_arb_get_register_name(ins->shader, dst->register_type, dst->register_idx, dst->has_rel_addr, dst_name, &is_color); - shader_arb_get_write_mask(ins, dst->token, dst_wmask); + shader_arb_get_write_mask(ins, dst, dst_wmask); /* Generate input register names (with modifiers) */ pshader_gen_input_modifier_line(ins->shader, buffer, ins->src[0], 0, src_name[0]); @@ -882,7 +885,7 @@ static void pshader_hw_cmp(const struct wined3d_shader_instruction *ins) /* Handle output register */ shader_arb_get_register_name(ins->shader, dst->register_type, dst->register_idx, dst->has_rel_addr, dst_name, &is_color); - shader_arb_get_write_mask(ins, dst->token, dst_wmask); + shader_arb_get_write_mask(ins, dst, dst_wmask); /* Generate input register names (with modifiers) */ pshader_gen_input_modifier_line(ins->shader, buffer, ins->src[0], 0, src_name[0]); @@ -911,7 +914,7 @@ static void pshader_hw_dp2add(const struct wined3d_shader_instruction *ins) shader_arb_get_register_name(ins->shader, dst->register_type, dst->register_idx, dst->has_rel_addr, dst_name, &is_color); - shader_arb_get_write_mask(ins, dst->token, dst_wmask); + shader_arb_get_write_mask(ins, dst, dst_wmask); pshader_gen_input_modifier_line(ins->shader, buffer, ins->src[0], 0, src_name[0]); pshader_gen_input_modifier_line(ins->shader, buffer, ins->src[1], 1, src_name[1]); @@ -1015,7 +1018,7 @@ static void shader_hw_map2gl(const struct wined3d_shader_instruction *ins) shader_arb_get_register_name(ins->shader, dst->register_type, dst->register_idx, dst->has_rel_addr, output_rname, &is_color); strcpy(operands[0], output_rname); - shader_arb_get_write_mask(ins, dst->token, output_wmask); + shader_arb_get_write_mask(ins, dst, output_wmask); strcat(operands[0], output_wmask); arguments[0] = '\0'; @@ -1187,21 +1190,20 @@ static void pshader_hw_tex(const struct wined3d_shader_instruction *ins) static void pshader_hw_texcoord(const struct wined3d_shader_instruction *ins) { - DWORD dst = ins->dst[0].token; + const struct wined3d_shader_dst_param *dst = &ins->dst[0]; SHADER_BUFFER *buffer = ins->buffer; char tmp[20]; shader_arb_get_write_mask(ins, dst, tmp); if (ins->reg_maps->shader_version != WINED3DPS_VERSION(1,4)) { - DWORD reg = ins->dst[0].register_idx; + DWORD reg = dst->register_idx; shader_addline(buffer, "MOV_SAT T%u%s, fragment.texcoord[%u];\n", reg, tmp, reg); } else { - DWORD reg1 = ins->dst[0].register_idx; char reg_src[40]; pshader_gen_input_modifier_line(ins->shader, buffer, ins->src[0], 0, reg_src); - shader_addline(buffer, "MOV R%u%s, %s;\n", reg1, tmp, reg_src); + shader_addline(buffer, "MOV R%u%s, %s;\n", dst->register_idx, tmp, reg_src); } } @@ -1526,7 +1528,7 @@ static void pshader_hw_texdp3(const struct wined3d_shader_instruction *ins) /* Handle output register */ shader_arb_get_register_name(ins->shader, dst->register_type, dst->register_idx, dst->has_rel_addr, dst_str, &is_color); - shader_arb_get_write_mask(ins, dst->token, dst_mask); + shader_arb_get_write_mask(ins, dst, dst_mask); pshader_gen_input_modifier_line(ins->shader, buffer, ins->src[0], 0, src0); shader_addline(buffer, "DP3 %s%s, T%u, %s;\n", dst_str, dst_mask, dst->register_idx, src0); @@ -1547,7 +1549,7 @@ static void pshader_hw_texm3x3(const struct wined3d_shader_instruction *ins) shader_arb_get_register_name(ins->shader, dst->register_type, dst->register_idx, dst->has_rel_addr, dst_str, &is_color); - shader_arb_get_write_mask(ins, dst->token, dst_mask); + shader_arb_get_write_mask(ins, dst, dst_mask); pshader_gen_input_modifier_line(ins->shader, buffer, ins->src[0], 0, src0); shader_addline(buffer, "DP3 TMP.z, T%u, %s;\n", dst->register_idx, src0); @@ -1683,7 +1685,7 @@ static void shader_hw_nrm(const struct wined3d_shader_instruction *ins) shader_arb_get_register_name(ins->shader, dst->register_type, dst->register_idx, dst->has_rel_addr, dst_name, &is_color); - shader_arb_get_write_mask(ins, dst->token, dst_wmask); + shader_arb_get_write_mask(ins, dst, dst_wmask); pshader_gen_input_modifier_line(ins->shader, buffer, ins->src[0], 0, src_name); shader_addline(buffer, "DP3 TMP, %s, %s;\n", src_name, src_name); @@ -1713,7 +1715,7 @@ static void shader_hw_sincos(const struct wined3d_shader_instruction *ins) shader_arb_get_register_name(ins->shader, dst->register_type, dst->register_idx, dst->has_rel_addr, dst_name, &is_color); - shader_arb_get_write_mask(ins, dst->token, dst_wmask); + shader_arb_get_write_mask(ins, dst, dst_wmask); pshader_gen_input_modifier_line(ins->shader, buffer, ins->src[0], 0, src_name); shader_addline(buffer, "SCS%s %s%s, %s;\n", sat ? "_SAT" : "", dst_name, dst_wmask,
1
0
0
0
Hans Leidekker : msi: Support setting summary information by importing a _SummaryInformation table .
by Alexandre Julliard
14 Apr '09
14 Apr '09
Module: wine Branch: master Commit: 184474ea66f076561da6a0da1b3b94a3c1bad034 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=184474ea66f076561da6a0da1…
Author: Hans Leidekker <hans(a)codeweavers.com> Date: Mon Apr 13 12:24:46 2009 +0200 msi: Support setting summary information by importing a _SummaryInformation table. --- dlls/msi/database.c | 20 ++++- dlls/msi/msipriv.h | 1 + dlls/msi/suminfo.c | 225 ++++++++++++++++++++++++++++++++++++++++++--------- 3 files changed, 205 insertions(+), 41 deletions(-) Diff:
http://source.winehq.org/git/wine.git/?a=commitdiff;h=184474ea66f076561da6a…
1
0
0
0
Ge van Geldorp : secur32/tests: Fix GetUserNameEx() tests.
by Alexandre Julliard
14 Apr '09
14 Apr '09
Module: wine Branch: master Commit: 74dba4e602ccd072bb88b4d107c0cc28b35ca650 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=74dba4e602ccd072bb88b4d10…
Author: Ge van Geldorp <ge(a)gse.nl> Date: Tue Apr 14 14:33:08 2009 +0200 secur32/tests: Fix GetUserNameEx() tests. --- dlls/secur32/tests/secur32.c | 38 ++++++++++++++++++++++---------------- 1 files changed, 22 insertions(+), 16 deletions(-) diff --git a/dlls/secur32/tests/secur32.c b/dlls/secur32/tests/secur32.c index 7e969bd..21bb83a 100644 --- a/dlls/secur32/tests/secur32.c +++ b/dlls/secur32/tests/secur32.c @@ -107,14 +107,13 @@ static void testGetUserNameExA(void) size = sizeof(name); ZeroMemory(name, sizeof(name)); rc = pGetUserNameExA(formats[i], name, &size); - ok(rc || ((formats[i] == NameUnknown) && - (GetLastError() == ERROR_INVALID_PARAMETER)) || - (GetLastError() == ERROR_CANT_ACCESS_DOMAIN_INFO) || - (GetLastError() == ERROR_NO_SUCH_DOMAIN) || - (GetLastError() == ERROR_NO_SUCH_USER) || - (GetLastError() == ERROR_NONE_MAPPED) || - (GetLastError() == ERROR_ACCESS_DENIED), - "GetUserNameExA(%d) failed: %d\n", + ok(rc || + (formats[i] == NameUnknown && + GetLastError() == ERROR_NO_SUCH_USER) || + GetLastError() == ERROR_NONE_MAPPED || + broken(formats[i] == NameDnsDomain && + GetLastError() == ERROR_INVALID_PARAMETER), + "GetUserNameExW(%d) failed: %d\n", formats[i], GetLastError()); } @@ -155,13 +154,12 @@ static void testGetUserNameExW(void) size = sizeof(nameW); ZeroMemory(nameW, sizeof(nameW)); rc = pGetUserNameExW(formats[i], nameW, &size); - ok(rc || ((formats[i] == NameUnknown) && - (GetLastError() == ERROR_INVALID_PARAMETER)) || - (GetLastError() == ERROR_CANT_ACCESS_DOMAIN_INFO) || - (GetLastError() == ERROR_NO_SUCH_DOMAIN) || - (GetLastError() == ERROR_NO_SUCH_USER) || - (GetLastError() == ERROR_NONE_MAPPED) || - (GetLastError() == ERROR_ACCESS_DENIED), + ok(rc || + (formats[i] == NameUnknown && + GetLastError() == ERROR_NO_SUCH_USER) || + GetLastError() == ERROR_NONE_MAPPED || + broken(formats[i] == NameDnsDomain && + GetLastError() == ERROR_INVALID_PARAMETER), "GetUserNameExW(%d) failed: %d\n", formats[i], GetLastError()); } @@ -212,7 +210,7 @@ static void test_InitSecurityInterface(void) if (!pInitSecurityInterfaceW) { - skip("InitSecurityInterfaceW not exported by secur32.dll\n"); + win_skip("InitSecurityInterfaceW not exported by secur32.dll\n"); return; } @@ -242,15 +240,23 @@ START_TEST(secur32) if (pGetComputerObjectNameA) testGetComputerObjectNameA(); + else + win_skip("GetComputerObjectNameA not exported by secur32.dll\n"); if (pGetComputerObjectNameW) testGetComputerObjectNameW(); + else + win_skip("GetComputerObjectNameW not exported by secur32.dll\n"); if (pGetUserNameExA) testGetUserNameExA(); + else + win_skip("GetUserNameExA not exported by secur32.dll\n"); if (pGetUserNameExW) testGetUserNameExW(); + else + win_skip("GetUserNameExW not exported by secur32.dll\n"); test_InitSecurityInterface();
1
0
0
0
Ge van Geldorp : secur32: Implement more GetUserNameEx() formats.
by Alexandre Julliard
14 Apr '09
14 Apr '09
Module: wine Branch: master Commit: d31bb3f08d0d626167cc558beb201f3f55cb4a95 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=d31bb3f08d0d626167cc558be…
Author: Ge van Geldorp <ge(a)gse.nl> Date: Sat Apr 11 20:44:40 2009 +0200 secur32: Implement more GetUserNameEx() formats. --- dlls/secur32/secur32.c | 10 ++-------- 1 files changed, 2 insertions(+), 8 deletions(-) diff --git a/dlls/secur32/secur32.c b/dlls/secur32/secur32.c index 73db395..8f599f0 100644 --- a/dlls/secur32/secur32.c +++ b/dlls/secur32/secur32.c @@ -1097,12 +1097,6 @@ BOOLEAN WINAPI GetUserNameExW( DWORD len; TRACE("(%d %p %p)\n", NameFormat, lpNameBuffer, nSize); - if (NameFormat == NameUnknown) - { - SetLastError(ERROR_INVALID_PARAMETER); - return FALSE; - } - switch (NameFormat) { case NameSamCompatible: @@ -1135,6 +1129,7 @@ BOOLEAN WINAPI GetUserNameExW( status = FALSE; } break; + case NameUnknown: case NameFullyQualifiedDN: case NameDisplay: case NameUniqueId: @@ -1143,8 +1138,7 @@ BOOLEAN WINAPI GetUserNameExW( case NameCanonicalEx: case NameServicePrincipal: case NameDnsDomain: - FIXME("NameFormat %d not implemented\n", NameFormat); - SetLastError(ERROR_CANT_ACCESS_DOMAIN_INFO); + SetLastError(ERROR_NONE_MAPPED); status = FALSE; break; default:
1
0
0
0
Detlef Riekenberg : oleaut32: VarCat must use localized names for VT_BOOL.
by Alexandre Julliard
14 Apr '09
14 Apr '09
Module: wine Branch: master Commit: 66430491161b8dc13fc7dc7823b3a9cc9cbccf42 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=66430491161b8dc13fc7dc782…
Author: Detlef Riekenberg <wine.dev(a)web.de> Date: Sat Apr 11 00:30:42 2009 +0200 oleaut32: VarCat must use localized names for VT_BOOL. --- dlls/oleaut32/tests/vartest.c | 38 +++++++++++++++++++++++++++----------- dlls/oleaut32/variant.c | 14 ++++++++++---- dlls/oleaut32/variant.h | 3 +++ dlls/oleaut32/vartype.c | 8 +++++++- 4 files changed, 47 insertions(+), 16 deletions(-) diff --git a/dlls/oleaut32/tests/vartest.c b/dlls/oleaut32/tests/vartest.c index 648c959..24ef171 100644 --- a/dlls/oleaut32/tests/vartest.c +++ b/dlls/oleaut32/tests/vartest.c @@ -46,6 +46,11 @@ static INT (WINAPI *pVariantTimeToSystemTime)(double,LPSYSTEMTIME); static INT (WINAPI *pDosDateTimeToVariantTime)(USHORT,USHORT,double*); static INT (WINAPI *pVariantTimeToDosDateTime)(double,USHORT*,USHORT *); +static const WCHAR sz12[] = {'1','2','\0'}; +/* the strings are localized */ +static WCHAR sz12_false[32]; +static WCHAR sz12_true[32]; + /* Get a conversion function ptr, return if function not available */ #define CHECKPTR(func) p##func = (void*)GetProcAddress(hOleaut32, #func); \ if (!p##func) { trace("function " # func " not available, not testing it\n"); return; } @@ -95,7 +100,24 @@ static int IS_ANCIENT = 0; static void init(void) { - hOleaut32 = GetModuleHandle("oleaut32.dll"); + BSTR bstr; + HRESULT res; + + res = VarBstrFromBool(VARIANT_TRUE, LANG_USER_DEFAULT, VAR_LOCALBOOL, &bstr); + ok(SUCCEEDED(res) && (lstrlenW(bstr) > 0), + "Expected localized string for 'True'\n"); + lstrcpyW(sz12_true, sz12); + if (bstr) lstrcatW(sz12_true, bstr); + SysFreeString(bstr); + + res = VarBstrFromBool(VARIANT_FALSE, LANG_USER_DEFAULT, VAR_LOCALBOOL, &bstr); + ok(SUCCEEDED(res) && (lstrlenW(bstr) > 0), + "Expected localized string for 'False'\n"); + lstrcpyW(sz12_false, sz12); + if (bstr) lstrcatW(sz12_false, bstr); + SysFreeString(bstr); + + hOleaut32 = GetModuleHandle("oleaut32.dll"); /* Is a given function exported from oleaut32? */ #define HAVE_FUNC(func) ((void*)GetProcAddress(hOleaut32, #func) != NULL) @@ -2007,7 +2029,6 @@ static HRESULT (WINAPI *pVarSub)(LPVARIANT,LPVARIANT,LPVARIANT); static void test_VarSub(void) { - static const WCHAR sz12[] = {'1','2','\0'}; VARIANT left, right, exp, result, cy, dec; VARTYPE i; BSTR lbstr, rbstr; @@ -4856,7 +4877,6 @@ static HRESULT (WINAPI *pVarMul)(LPVARIANT,LPVARIANT,LPVARIANT); static void test_VarMul(void) { - static const WCHAR sz12[] = {'1','2','\0'}; VARIANT left, right, exp, result, cy, dec; VARTYPE i; BSTR lbstr, rbstr; @@ -5028,7 +5048,6 @@ static HRESULT (WINAPI *pVarAdd)(LPVARIANT,LPVARIANT,LPVARIANT); static void test_VarAdd(void) { - static const WCHAR sz12[] = {'1','2','\0'}; VARIANT left, right, exp, result, cy, dec; VARTYPE i; BSTR lbstr, rbstr; @@ -5215,14 +5234,11 @@ static void test_VarCat(void) { LCID lcid; VARIANT left, right, result, expected; - static const WCHAR sz12[] = {'1','2','\0'}; static const WCHAR sz34[] = {'3','4','\0'}; static const WCHAR sz1234[] = {'1','2','3','4','\0'}; static const WCHAR date_sz12[] = {'9','/','3','0','/','1','9','8','0','1','2','\0'}; static const WCHAR sz12_date[] = {'1','2','9','/','3','0','/','1','9','8','0','\0'}; static const WCHAR sz_empty[] = {'\0'}; - static const WCHAR sz12_true[] = {'1','2','T','r','u','e','\0'}; - static const WCHAR sz12_false[] = {'1','2','F','a','l','s','e','\0'}; TCHAR orig_date_format[128]; VARTYPE leftvt, rightvt, resultvt; HRESULT hres; @@ -5416,8 +5432,8 @@ static void test_VarCat(void) hres = VarCat(&left,&right,&result); ok(hres == S_OK, "VarCat failed with error 0x%08x\n", hres); hres = VarCmp(&result,&expected,lcid,0); - ok(hres == VARCMP_EQ || - broken(hres == VARCMP_GT), "Expected VARCMP_EQ, got %08x\n", hres); + ok(hres == VARCMP_EQ, "Expected VARCMP_EQ, got %08x for %s, %s\n", + hres, variantstr(&result), variantstr(&expected)); VariantClear(&left); VariantClear(&right); @@ -5433,8 +5449,8 @@ static void test_VarCat(void) hres = VarCat(&left,&right,&result); ok(hres == S_OK, "VarCat failed with error 0x%08x\n", hres); hres = VarCmp(&result,&expected,lcid,0); - ok(hres == VARCMP_EQ || - broken(hres == VARCMP_GT), "Expected VARCMP_EQ, got %08x\n", hres); + ok(hres == VARCMP_EQ, "Expected VARCMP_EQ, got %08x for %s, %s\n", + hres, variantstr(&result), variantstr(&expected)); VariantClear(&left); VariantClear(&right); diff --git a/dlls/oleaut32/variant.c b/dlls/oleaut32/variant.c index 26a19bb..909cf8a 100644 --- a/dlls/oleaut32/variant.c +++ b/dlls/oleaut32/variant.c @@ -40,6 +40,7 @@ #include "wine/unicode.h" #include "winerror.h" #include "variant.h" +#include "resource.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(variant); @@ -2467,8 +2468,8 @@ HRESULT WINAPI VarCat(LPVARIANT left, LPVARIANT right, LPVARIANT out) { VARTYPE leftvt,rightvt,resultvt; HRESULT hres; - static const WCHAR str_true[] = {'T','r','u','e','\0'}; - static const WCHAR str_false[] = {'F','a','l','s','e','\0'}; + static WCHAR str_true[32]; + static WCHAR str_false[32]; static const WCHAR sz_empty[] = {'\0'}; leftvt = V_VT(left); rightvt = V_VT(right); @@ -2476,6 +2477,11 @@ HRESULT WINAPI VarCat(LPVARIANT left, LPVARIANT right, LPVARIANT out) TRACE("(%p->(%s%s),%p->(%s%s),%p)\n", left, debugstr_VT(left), debugstr_VF(left), right, debugstr_VT(right), debugstr_VF(right), out); + if (!str_true[0]) { + VARIANT_GetLocalisedText(LOCALE_USER_DEFAULT, IDS_FALSE, str_false); + VARIANT_GetLocalisedText(LOCALE_USER_DEFAULT, IDS_TRUE, str_true); + } + /* when both left and right are NULL the result is NULL */ if (leftvt == VT_NULL && rightvt == VT_NULL) { @@ -2558,7 +2564,7 @@ HRESULT WINAPI VarCat(LPVARIANT left, LPVARIANT right, LPVARIANT out) { if (leftvt == VT_BOOL) { - /* Bools are handled as True/False strings instead of 0/-1 as in MSDN */ + /* Bools are handled as localized True/False strings instead of 0/-1 as in MSDN */ V_VT(&bstrvar_left) = VT_BSTR; if (V_BOOL(left) == TRUE) V_BSTR(&bstrvar_left) = SysAllocString(str_true); @@ -2598,7 +2604,7 @@ HRESULT WINAPI VarCat(LPVARIANT left, LPVARIANT right, LPVARIANT out) { if (rightvt == VT_BOOL) { - /* Bools are handled as True/False strings instead of 0/-1 as in MSDN */ + /* Bools are handled as localized True/False strings instead of 0/-1 as in MSDN */ V_VT(&bstrvar_right) = VT_BSTR; if (V_BOOL(right) == TRUE) V_BSTR(&bstrvar_right) = SysAllocString(str_true); diff --git a/dlls/oleaut32/variant.h b/dlls/oleaut32/variant.h index 41f8a9a..c881b24 100644 --- a/dlls/oleaut32/variant.h +++ b/dlls/oleaut32/variant.h @@ -123,3 +123,6 @@ typedef struct tagVARIANT_NUMBER_CHARS WCHAR cCurrencyDecimalPoint; WCHAR cCurrencyDigitSeparator; } VARIANT_NUMBER_CHARS; + + +BOOL VARIANT_GetLocalisedText(LANGID, DWORD, WCHAR *); diff --git a/dlls/oleaut32/vartype.c b/dlls/oleaut32/vartype.c index 7843a7b..2d5ae7d 100644 --- a/dlls/oleaut32/vartype.c +++ b/dlls/oleaut32/vartype.c @@ -5961,7 +5961,13 @@ HRESULT WINAPI VarBoolFromCy(CY cyIn, VARIANT_BOOL *pBoolOut) return S_OK; } -static BOOL VARIANT_GetLocalisedText(LANGID langId, DWORD dwId, WCHAR *lpszDest) +/************************************************************************ + * VARIANT_GetLocalisedText [internal] + * + * Get a localized string from the resources + * + */ +BOOL VARIANT_GetLocalisedText(LANGID langId, DWORD dwId, WCHAR *lpszDest) { HRSRC hrsrc;
1
0
0
0
Aric Stewart : msctf/tests: Add framework for a TextService for testing.
by Alexandre Julliard
14 Apr '09
14 Apr '09
Module: wine Branch: master Commit: afe5dba276526f27ef40981046effffca1c99a7a URL:
http://source.winehq.org/git/wine.git/?a=commit;h=afe5dba276526f27ef4098104…
Author: Aric Stewart <aric(a)codeweavers.com> Date: Fri Apr 10 07:55:45 2009 -0500 msctf/tests: Add framework for a TextService for testing. --- dlls/msctf/tests/inputprocessor.c | 215 ++++++++++++++++++++++++++++++++++++- 1 files changed, 213 insertions(+), 2 deletions(-) diff --git a/dlls/msctf/tests/inputprocessor.c b/dlls/msctf/tests/inputprocessor.c index 20991e4..13b81c7 100644 --- a/dlls/msctf/tests/inputprocessor.c +++ b/dlls/msctf/tests/inputprocessor.c @@ -23,15 +23,19 @@ #define COBJMACROS #include "wine/test.h" #include "winuser.h" +#include "initguid.h" #include "shlwapi.h" #include "shlguid.h" #include "comcat.h" -#include "initguid.h" #include "msctf.h" static ITfInputProcessorProfiles* g_ipp; static LANGID gLangid; -static ITfCategoryMgr * g_cm; +static ITfCategoryMgr * g_cm = NULL; +static ITfThreadMgr* g_tm = NULL; + +HRESULT RegisterTextService(REFCLSID rclsid); +HRESULT UnregisterTextService(); DEFINE_GUID(CLSID_FakeService, 0xEDE1A7AD,0x66DE,0x47E0,0xB6,0x20,0x3E,0x92,0xF8,0x24,0x6B,0xF3); DEFINE_GUID(CLSID_TF_InputProcessorProfiles, 0x33c53a50,0xf456,0x4884,0xb0,0x49,0x85,0xfd,0x64,0x3e,0xcf,0xed); @@ -41,6 +45,7 @@ DEFINE_GUID(GUID_TFCAT_TIP_SPEECH, 0xB5A73CD1,0x8355,0x426B,0xA1,0x61,0x25 DEFINE_GUID(GUID_TFCAT_TIP_HANDWRITING, 0x246ecb87,0xc2f2,0x4abe,0x90,0x5b,0xc8,0xb3,0x8a,0xdd,0x2c,0x43); DEFINE_GUID (GUID_TFCAT_DISPLAYATTRIBUTEPROVIDER, 0x046B8C80,0x1647,0x40F7,0x9B,0x21,0xB9,0x3B,0x81,0xAA,0xBC,0x1B); DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0); +DEFINE_GUID(CLSID_TF_ThreadMgr, 0x529a9e6b,0x6587,0x4f23,0xab,0x9e,0x9c,0x7d,0x68,0x3e,0x3c,0x50); static HRESULT initialize(void) @@ -52,6 +57,9 @@ static HRESULT initialize(void) if (SUCCEEDED(hr)) hr = CoCreateInstance (&CLSID_TF_CategoryMgr, NULL, CLSCTX_INPROC_SERVER, &IID_ITfCategoryMgr, (void**)&g_cm); + if (SUCCEEDED(hr)) + hr = CoCreateInstance (&CLSID_TF_ThreadMgr, NULL, + CLSCTX_INPROC_SERVER, &IID_ITfThreadMgr, (void**)&g_tm); return hr; } @@ -61,6 +69,8 @@ static void cleanup(void) ITfInputProcessorProfiles_Release(g_ipp); if (g_cm) ITfCategoryMgr_Release(g_cm); + if (g_tm) + ITfThreadMgr_Release(g_tm); CoUninitialize(); } @@ -71,6 +81,8 @@ static void test_Register(void) static const WCHAR szDesc[] = {'F','a','k','e',' ','W','i','n','e',' ','S','e','r','v','i','c','e',0}; static const WCHAR szFile[] = {'F','a','k','e',' ','W','i','n','e',' ','S','e','r','v','i','c','e',' ','F','i','l','e',0}; + hr = RegisterTextService(&CLSID_FakeService); + ok(SUCCEEDED(hr),"Unable to register COM for TextService\n"); hr = ITfInputProcessorProfiles_Register(g_ipp, &CLSID_FakeService); ok(SUCCEEDED(hr),"Unable to register text service(%x)\n",hr); hr = ITfInputProcessorProfiles_AddLanguageProfile(g_ipp, &CLSID_FakeService, gLangid, &CLSID_FakeService, szDesc, sizeof(szDesc)/sizeof(WCHAR), szFile, sizeof(szFile)/sizeof(WCHAR), 1); @@ -82,6 +94,7 @@ static void test_Unregister(void) HRESULT hr; hr = ITfInputProcessorProfiles_Unregister(g_ipp, &CLSID_FakeService); ok(SUCCEEDED(hr),"Unable to unregister text service(%x)\n",hr); + UnregisterTextService(); } static void test_EnumInputProcessorInfo(void) @@ -200,3 +213,201 @@ START_TEST(inputprocessor) skip("Unable to create InputProcessor\n"); cleanup(); } + + + +/******************************************************************************************** + * Stub text service for testing + ********************************************************************************************/ + +static LONG TS_refCount; +static IClassFactory *cf; +static DWORD regid; + +typedef HRESULT (*LPFNCONSTRUCTOR)(IUnknown *pUnkOuter, IUnknown **ppvOut); + +typedef struct tagClassFactory +{ + const IClassFactoryVtbl *vtbl; + LONG ref; + LPFNCONSTRUCTOR ctor; +} ClassFactory; + +typedef struct tagTextService +{ + const ITfTextInputProcessorVtbl *TextInputProcessorVtbl; + LONG refCount; +} TextService; + +static void ClassFactory_Destructor(ClassFactory *This) +{ + HeapFree(GetProcessHeap(),0,This); + TS_refCount--; +} + +static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, LPVOID *ppvOut) +{ + *ppvOut = NULL; + if (IsEqualIID(riid, &IID_IClassFactory) || IsEqualIID(riid, &IID_IUnknown)) + { + IClassFactory_AddRef(iface); + *ppvOut = iface; + return S_OK; + } + + return E_NOINTERFACE; +} + +static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface) +{ + ClassFactory *This = (ClassFactory *)iface; + return InterlockedIncrement(&This->ref); +} + +static ULONG WINAPI ClassFactory_Release(IClassFactory *iface) +{ + ClassFactory *This = (ClassFactory *)iface; + ULONG ret = InterlockedDecrement(&This->ref); + + if (ret == 0) + ClassFactory_Destructor(This); + return ret; +} + +static HRESULT WINAPI ClassFactory_CreateInstance(IClassFactory *iface, IUnknown *punkOuter, REFIID iid, LPVOID *ppvOut) +{ + ClassFactory *This = (ClassFactory *)iface; + HRESULT ret; + IUnknown *obj; + + ret = This->ctor(punkOuter, &obj); + if (FAILED(ret)) + return ret; + ret = IUnknown_QueryInterface(obj, iid, ppvOut); + IUnknown_Release(obj); + return ret; +} + +static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL fLock) +{ + if(fLock) + InterlockedIncrement(&TS_refCount); + else + InterlockedDecrement(&TS_refCount); + + return S_OK; +} + +static const IClassFactoryVtbl ClassFactoryVtbl = { + /* IUnknown */ + ClassFactory_QueryInterface, + ClassFactory_AddRef, + ClassFactory_Release, + + /* IClassFactory*/ + ClassFactory_CreateInstance, + ClassFactory_LockServer +}; + +static HRESULT ClassFactory_Constructor(LPFNCONSTRUCTOR ctor, LPVOID *ppvOut) +{ + ClassFactory *This = HeapAlloc(GetProcessHeap(),0,sizeof(ClassFactory)); + This->vtbl = &ClassFactoryVtbl; + This->ref = 1; + This->ctor = ctor; + *ppvOut = (LPVOID)This; + TS_refCount++; + return S_OK; +} + +static void TextService_Destructor(TextService *This) +{ + HeapFree(GetProcessHeap(),0,This); +} + +static HRESULT WINAPI TextService_QueryInterface(ITfTextInputProcessor *iface, REFIID iid, LPVOID *ppvOut) +{ + TextService *This = (TextService *)iface; + *ppvOut = NULL; + + if (IsEqualIID(iid, &IID_IUnknown) || IsEqualIID(iid, &IID_ITfTextInputProcessor)) + { + *ppvOut = This; + } + + if (*ppvOut) + { + IUnknown_AddRef(iface); + return S_OK; + } + + return E_NOINTERFACE; +} + +static ULONG WINAPI TextService_AddRef(ITfTextInputProcessor *iface) +{ + TextService *This = (TextService *)iface; + return InterlockedIncrement(&This->refCount); +} + +static ULONG WINAPI TextService_Release(ITfTextInputProcessor *iface) +{ + TextService *This = (TextService *)iface; + ULONG ret; + + ret = InterlockedDecrement(&This->refCount); + if (ret == 0) + TextService_Destructor(This); + return ret; +} + +static HRESULT WINAPI TextService_Activate(ITfTextInputProcessor *iface, + ITfThreadMgr *ptim, TfClientId id) +{ + trace("TextService_Activate\n"); + return S_OK; +} + +static HRESULT WINAPI TextService_Deactivate(ITfTextInputProcessor *iface) +{ + trace("TextService_Deactivate\n"); + return S_OK; +} + +static const ITfTextInputProcessorVtbl TextService_TextInputProcessorVtbl= +{ + TextService_QueryInterface, + TextService_AddRef, + TextService_Release, + + TextService_Activate, + TextService_Deactivate +}; + +HRESULT TextService_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut) +{ + TextService *This; + if (pUnkOuter) + return CLASS_E_NOAGGREGATION; + + This = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(TextService)); + if (This == NULL) + return E_OUTOFMEMORY; + + This->TextInputProcessorVtbl= &TextService_TextInputProcessorVtbl; + This->refCount = 1; + + *ppOut = (IUnknown *)This; + return S_OK; +} + +HRESULT RegisterTextService(REFCLSID rclsid) +{ + ClassFactory_Constructor( TextService_Constructor ,(LPVOID*)&cf); + return CoRegisterClassObject(rclsid, (IUnknown*) cf, CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, ®id); +} + +HRESULT UnregisterTextService() +{ + return CoRevokeClassObject(regid); +}
1
0
0
0
Aric Stewart : msctf/test: Test enabling and disabling Language Profiles.
by Alexandre Julliard
14 Apr '09
14 Apr '09
Module: wine Branch: master Commit: 5d3336ed73d22c4529be231ca7563c76bd3c3a30 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=5d3336ed73d22c4529be231ca…
Author: Aric Stewart <aric(a)codeweavers.com> Date: Fri Apr 10 07:57:02 2009 -0500 msctf/test: Test enabling and disabling Language Profiles. --- dlls/msctf/tests/inputprocessor.c | 23 +++++++++++++++++++++++ 1 files changed, 23 insertions(+), 0 deletions(-) diff --git a/dlls/msctf/tests/inputprocessor.c b/dlls/msctf/tests/inputprocessor.c index d689034..20991e4 100644 --- a/dlls/msctf/tests/inputprocessor.c +++ b/dlls/msctf/tests/inputprocessor.c @@ -160,6 +160,27 @@ static void test_FindClosestCategory(void) ok(IsEqualGUID(&output,&GUID_TFCAT_TIP_KEYBOARD),"Wrong GUID\n"); } +static void test_Enable(void) +{ + HRESULT hr; + BOOL enabled = FALSE; + + hr = ITfInputProcessorProfiles_EnableLanguageProfile(g_ipp,&CLSID_FakeService, gLangid, &CLSID_FakeService, TRUE); + ok(SUCCEEDED(hr),"Failed to enable text service\n"); + hr = ITfInputProcessorProfiles_IsEnabledLanguageProfile(g_ipp,&CLSID_FakeService, gLangid, &CLSID_FakeService, &enabled); + ok(SUCCEEDED(hr),"Failed to get enabled state\n"); + ok(enabled == TRUE,"enabled state incorrect\n"); +} + +static void test_Disable(void) +{ + HRESULT hr; + + trace("Disabling\n"); + hr = ITfInputProcessorProfiles_EnableLanguageProfile(g_ipp,&CLSID_FakeService, gLangid, &CLSID_FakeService, FALSE); + ok(SUCCEEDED(hr),"Failed to disable text service\n"); +} + START_TEST(inputprocessor) { if (SUCCEEDED(initialize())) @@ -168,8 +189,10 @@ START_TEST(inputprocessor) test_Register(); test_RegisterCategory(); test_EnumInputProcessorInfo(); + test_Enable(); test_EnumLanguageProfiles(); test_FindClosestCategory(); + test_Disable(); test_UnregisterCategory(); test_Unregister(); }
1
0
0
0
Rein Klazes : msvcrt: Correct implementation of _ecvt() with tests.
by Alexandre Julliard
14 Apr '09
14 Apr '09
Module: wine Branch: master Commit: 1ab5f4191da001de527315eaf2f02c9e07990eb9 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=1ab5f4191da001de527315eaf…
Author: Rein Klazes <wijn(a)online.nl> Date: Mon Apr 13 09:06:41 2009 +0200 msvcrt: Correct implementation of _ecvt() with tests. --- dlls/msvcrt/math.c | 38 ++++++++++++++++--- dlls/msvcrt/tests/printf.c | 85 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 117 insertions(+), 6 deletions(-) diff --git a/dlls/msvcrt/math.c b/dlls/msvcrt/math.c index 0c6290c..3b026a3 100644 --- a/dlls/msvcrt/math.c +++ b/dlls/msvcrt/math.c @@ -836,16 +836,42 @@ double CDECL _nextafter(double num, double next) */ char * CDECL _ecvt( double number, int ndigits, int *decpt, int *sign ) { + int prec; thread_data_t *data = msvcrt_get_thread_data(); - char *dec; - + /* FIXME: check better for overflow (native supports over 300 chars's) */ + ndigits = min( ndigits, 80 - 7); /* 7 : space for dec point, 1 for "e", + * 4 for exponent and one for + * terminating '\0' */ if (!data->efcvt_buffer) data->efcvt_buffer = MSVCRT_malloc( 80 ); /* ought to be enough */ - snprintf(data->efcvt_buffer, 80, "%.*e", ndigits /* FIXME wrong */, number); - *sign = (number < 0); - dec = strchr(data->efcvt_buffer, '.'); - *decpt = (dec) ? dec - data->efcvt_buffer : -1; + if( number < 0) { + *sign = TRUE; + number = -number; + } else + *sign = FALSE; + /* handle cases with zero ndigits or less */ + prec = ndigits; + if( prec < 1) prec = 2; + snprintf(data->efcvt_buffer, 80, "%.*le", prec - 1, number); + /* take the decimal "point away */ + if( prec != 1) + strcpy( data->efcvt_buffer + 1, data->efcvt_buffer + 2); + /* take the exponential "e" out */ + data->efcvt_buffer[ prec] = '\0'; + /* read the exponent */ + sscanf( data->efcvt_buffer + prec + 1, "%d", decpt); + (*decpt)++; + /* adjust for some border cases */ + if( data->efcvt_buffer[0] == '0')/* value is zero */ + *decpt = 0; + /* handle cases with zero ndigits or less */ + if( ndigits < 1){ + if( data->efcvt_buffer[ 0] >= '5') + (*decpt)++; + data->efcvt_buffer[ 0] = '\0'; + } + TRACE("out=\"%s\"\n",data->efcvt_buffer); return data->efcvt_buffer; } diff --git a/dlls/msvcrt/tests/printf.c b/dlls/msvcrt/tests/printf.c index 5f72b47..66bab15 100644 --- a/dlls/msvcrt/tests/printf.c +++ b/dlls/msvcrt/tests/printf.c @@ -698,6 +698,90 @@ static void test_fcvt(void) ok( 0 == sign, "sign wrong\n"); } +static struct { + double value; + int nrdigits; + const char *expstr_e; + const char *expstr_f; + int expdecpt_e; + int expdecpt_f; + int expsign; +} test_cvt_testcases[] = { + { 45.0, 2, "45", "4500", 2, 2, 0 }, + /* Numbers less than 1.0 with different precisions */ + { 0.0001, 1, "1", "", -3, -3, 0 }, + { 0.0001, -10, "", "", -3, -3, 0 }, + { 0.0001, 10,"1000000000", "1000000", -3, -3, 0 }, + /* Basic sign test */ + { -111.0001, 5, "11100", "11100010", 3, 3, 1 }, + { 111.0001, 5, "11100", "11100010", 3, 3, 0 }, + /* big numbers with low precision */ + { 3333.3, 2, "33", "333330", 4, 4, 0 }, + {999999999999.9, 3, "100","999999999999900", 13, 12, 0 }, + /* 0.0 with different precisions */ + { 0.0, 5, "00000", "00000", 0, 0, 0 }, + { 0.0, 0, "", "", 0, 0, 0 }, + { 0.0, -1, "", "", 0, 0, 0 }, + /* Numbers > 1.0 with 0 or -ve precision */ + { -123.0001, 0, "", "123", 3, 3, 1 }, + { -123.0001, -1, "", "12", 3, 3, 1 }, + { -123.0001, -2, "", "1", 3, 3, 1 }, + { -123.0001, -3, "", "", 3, 3, 1 }, + /* Numbers > 1.0, but with rounding at the point of precision */ + { 99.99, 1, "1", "1000", 3, 3, 0 }, + /* Numbers < 1.0 where rounding occurs at the point of precision */ + { 0.0063, 2, "63", "1", -2, -1, 0 }, + { 0.0063, 3, "630", "6", -2, -2, 0 }, + { 0.09999999996, 2, "10", "10", 0, 0, 0 }, + { 0.6, 1, "6", "6", 0, 0, 0 }, + { 0.6, 0, "", "1", 1, 1, 0 }, + { 0.4, 0, "", "", 0, 0, 0 }, + { 0.49, 0, "", "", 0, 0, 0 }, + { 0.51, 0, "", "1", 1, 1, 0 }, + /* ask ridiculous amunt of precision, ruin formatting this table */ + { 1.0, 30, "100000000000000000000000000000", + "1000000000000000000000000000000", 1, 1, 0}, + { 123456789012345678901.0, 30, "123456789012345680000000000000", + "123456789012345680000000000000000000000000000000000", 21, 21, 0}, + /* end marker */ + { 0, 0, "END"} +}; + +static void test_xcvt(void) +{ + char *str; + int i, decpt, sign; + for( i = 0; strcmp( test_cvt_testcases[i].expstr_e, "END"); i++){ + decpt = sign = 100; + str = _ecvt( test_cvt_testcases[i].value, + test_cvt_testcases[i].nrdigits, + &decpt, + &sign); + ok( 0 == strncmp( str, test_cvt_testcases[i].expstr_e, 15), + "_ecvt() bad return, got \n'%s' expected \n'%s'\n", str, + test_cvt_testcases[i].expstr_e); + ok( decpt == test_cvt_testcases[i].expdecpt_e, + "_ecvt() decimal point wrong, got %d expected %d\n", decpt, + test_cvt_testcases[i].expdecpt_e); + } + for( i = 0; strcmp( test_cvt_testcases[i].expstr_e, "END"); i++){ + decpt = sign = 100; + str = _fcvt( test_cvt_testcases[i].value, + test_cvt_testcases[i].nrdigits, + &decpt, + &sign); + ok( 0 == strncmp( str, test_cvt_testcases[i].expstr_f, 15), + "_fcvt() bad return, got \n'%s' expected \n'%s'\n", str, + test_cvt_testcases[i].expstr_f); + ok( decpt == test_cvt_testcases[i].expdecpt_f, + "_fcvt() decimal point wrong, got %d expected %d\n", decpt, + test_cvt_testcases[i].expdecpt_f); + ok( sign == test_cvt_testcases[i].expsign, + "_ecvt() sign wrong, got %d expected %d\n", sign, + test_cvt_testcases[i].expsign); + } +} + static int _vsnwprintf_wrapper(wchar_t *str, size_t len, const wchar_t *format, ...) { int ret; @@ -774,6 +858,7 @@ START_TEST(printf) test_swprintf(); test_snprintf(); test_fcvt(); + test_xcvt(); test_vsnwprintf(); p__vscprintf = (void *)GetProcAddress(GetModuleHandle("msvcrt.dll"), "_vscprintf");
1
0
0
0
← Newer
1
...
39
40
41
42
43
44
45
...
67
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
Results per page:
10
25
50
100
200