Rein Klazes : user32: Put some repeated code for checking and extending of a MENUITEMINFO structure in a separate function .

Alexandre Julliard julliard at winehq.org
Thu Jul 23 10:01:43 CDT 2009


Module: wine
Branch: master
Commit: e9f4c6bb02c4360333b1957311ef2d77a7a75f3e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e9f4c6bb02c4360333b1957311ef2d77a7a75f3e

Author: Rein Klazes <wijn at online.nl>
Date:   Thu Jul 23 12:32:30 2009 +0200

user32: Put some repeated code for checking and extending of a MENUITEMINFO structure in a separate function.

---

 dlls/user32/menu.c |   78 ++++++++++++++++++++++-----------------------------
 1 files changed, 34 insertions(+), 44 deletions(-)

diff --git a/dlls/user32/menu.c b/dlls/user32/menu.c
index e35372b..6d81e69 100644
--- a/dlls/user32/menu.c
+++ b/dlls/user32/menu.c
@@ -4755,27 +4755,44 @@ static BOOL SetMenuItemInfo_common(MENUITEM * menu,
 }
 
 /**********************************************************************
+ *		MENU_NormalizeMenuItemInfoStruct
+ *
+ * Helper for SetMenuItemInfo and InsertMenuItemInfo:
+ * check, copy and extend the MENUITEMINFO struct from the version that the application
+ * supplied to the version used by wine source. */
+static BOOL MENU_NormalizeMenuItemInfoStruct( const MENUITEMINFOW *pmii_in,
+                                              MENUITEMINFOW *pmii_out )
+{
+    /* do we recognize the size? */
+    if( pmii_in->cbSize != sizeof( MENUITEMINFOW) &&
+            pmii_in->cbSize != sizeof( MENUITEMINFOW) - sizeof( pmii_in->hbmpItem)) {
+        SetLastError( ERROR_INVALID_PARAMETER);
+        return FALSE;
+    }
+    /* copy the fields that we have */
+    memcpy( pmii_out, pmii_in, pmii_in->cbSize);
+    /* if the hbmpItem member is missing then extend */
+    if( pmii_in->cbSize != sizeof( MENUITEMINFOW)) {
+        pmii_out->cbSize = sizeof( MENUITEMINFOW);
+        pmii_out->hbmpItem = NULL;
+    }
+    return TRUE;
+}
+
+/**********************************************************************
  *		SetMenuItemInfoA    (USER32.@)
  */
 BOOL WINAPI SetMenuItemInfoA(HMENU hmenu, UINT item, BOOL bypos,
                                  const MENUITEMINFOA *lpmii)
 {
-    MENUITEMINFOA mii;
+    MENUITEMINFOW mii;
 
     TRACE("hmenu %p, item %u, by pos %d, info %p\n", hmenu, item, bypos, lpmii);
 
-    if( lpmii->cbSize != sizeof( mii) &&
-            lpmii->cbSize != sizeof( mii) - sizeof ( mii.hbmpItem)) {
-        SetLastError( ERROR_INVALID_PARAMETER);
-        return FALSE;
-    }
-    memcpy( &mii, lpmii, lpmii->cbSize);
-    if( lpmii->cbSize != sizeof( mii)) {
-        mii.cbSize = sizeof( mii);
-        mii.hbmpItem = NULL;
-    }
+    if (!MENU_NormalizeMenuItemInfoStruct( (MENUITEMINFOW *)lpmii, &mii )) return FALSE;
+
     return SetMenuItemInfo_common(MENU_FindItem(&hmenu, &item, bypos? MF_BYPOSITION : 0),
-				    (const MENUITEMINFOW *)&mii, FALSE);
+                                  &mii, FALSE);
 }
 
 /**********************************************************************
@@ -4788,16 +4805,7 @@ BOOL WINAPI SetMenuItemInfoW(HMENU hmenu, UINT item, BOOL bypos,
 
     TRACE("hmenu %p, item %u, by pos %d, info %p\n", hmenu, item, bypos, lpmii);
 
-    if( lpmii->cbSize != sizeof( mii) &&
-            lpmii->cbSize != sizeof( mii) - sizeof ( mii.hbmpItem)) {
-        SetLastError( ERROR_INVALID_PARAMETER);
-        return FALSE;
-    }
-    memcpy( &mii, lpmii, lpmii->cbSize);
-    if( lpmii->cbSize != sizeof( mii)) {
-        mii.cbSize = sizeof( mii);
-        mii.hbmpItem = NULL;
-    }
+    if (!MENU_NormalizeMenuItemInfoStruct( lpmii, &mii )) return FALSE;
     return SetMenuItemInfo_common(MENU_FindItem(&hmenu,
                 &item, bypos? MF_BYPOSITION : 0), &mii, TRUE);
 }
@@ -4900,23 +4908,14 @@ BOOL WINAPI InsertMenuItemA(HMENU hMenu, UINT uItem, BOOL bypos,
                                 const MENUITEMINFOA *lpmii)
 {
     MENUITEM *item;
-    MENUITEMINFOA mii;
+    MENUITEMINFOW mii;
 
     TRACE("hmenu %p, item %04x, by pos %d, info %p\n", hMenu, uItem, bypos, lpmii);
 
-    if( lpmii->cbSize != sizeof( mii) &&
-            lpmii->cbSize != sizeof( mii) - sizeof ( mii.hbmpItem)) {
-        SetLastError( ERROR_INVALID_PARAMETER);
-        return FALSE;
-    }
-    memcpy( &mii, lpmii, lpmii->cbSize);
-    if( lpmii->cbSize != sizeof( mii)) {
-        mii.cbSize = sizeof( mii);
-        mii.hbmpItem = NULL;
-    }
+    if (!MENU_NormalizeMenuItemInfoStruct( (MENUITEMINFOW *)lpmii, &mii )) return FALSE;
 
     item = MENU_InsertItem(hMenu, uItem, bypos ? MF_BYPOSITION : 0 );
-    return SetMenuItemInfo_common(item, (const MENUITEMINFOW *)&mii, FALSE);
+    return SetMenuItemInfo_common(item, &mii, FALSE);
 }
 
 
@@ -4931,16 +4930,7 @@ BOOL WINAPI InsertMenuItemW(HMENU hMenu, UINT uItem, BOOL bypos,
 
     TRACE("hmenu %p, item %04x, by pos %d, info %p\n", hMenu, uItem, bypos, lpmii);
 
-    if( lpmii->cbSize != sizeof( mii) &&
-            lpmii->cbSize != sizeof( mii) - sizeof ( mii.hbmpItem)) {
-        SetLastError( ERROR_INVALID_PARAMETER);
-        return FALSE;
-    }
-    memcpy( &mii, lpmii, lpmii->cbSize);
-    if( lpmii->cbSize != sizeof( mii)) {
-        mii.cbSize = sizeof( mii);
-        mii.hbmpItem = NULL;
-    }
+    if (!MENU_NormalizeMenuItemInfoStruct( lpmii, &mii )) return FALSE;
 
     item = MENU_InsertItem(hMenu, uItem, bypos ? MF_BYPOSITION : 0 );
     return SetMenuItemInfo_common(item, &mii, TRUE);




More information about the wine-cvs mailing list