Lei Zhang : comctl32: Do ascii to integer conversion only once.

Alexandre Julliard julliard at winehq.org
Wed Nov 26 07:32:35 CST 2008


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

Author: Lei Zhang <thestig at google.com>
Date:   Tue Nov 25 14:19:19 2008 -0800

comctl32: Do ascii to integer conversion only once.

---

 dlls/comctl32/datetime.c |   40 +++++++++++++++++++++-------------------
 1 files changed, 21 insertions(+), 19 deletions(-)

diff --git a/dlls/comctl32/datetime.c b/dlls/comctl32/datetime.c
index e953178..de31fa0 100644
--- a/dlls/comctl32/datetime.c
+++ b/dlls/comctl32/datetime.c
@@ -954,30 +954,32 @@ DATETIME_Char (DATETIME_INFO *infoPtr, WPARAM vkCode, LPARAM keyData)
     int fieldNum = infoPtr->select & DTHT_DATEFIELD;
 
     if (vkCode >= '0' && vkCode <= '9') {
+        int num = vkCode-'0';
+
         /* this is a somewhat simplified version of what Windows does */
         SYSTEMTIME *date = &infoPtr->date;
         switch (infoPtr->fieldspec[fieldNum]) {
             case ONEDIGITYEAR:
             case TWODIGITYEAR:
                 date->wYear = date->wYear - (date->wYear%100) +
-                        (date->wYear%10)*10 + (vkCode-'0');
+                        (date->wYear%10)*10 + num;
                 date->wDayOfWeek = DATETIME_CalculateDayOfWeek(
                         date->wDay,date->wMonth,date->wYear);
                 DATETIME_SendDateTimeChangeNotify (infoPtr);
                 break;
             case INVALIDFULLYEAR:
             case FULLYEAR:
-                date->wYear = (date->wYear%1000)*10 + (vkCode-'0');
+                date->wYear = (date->wYear%1000)*10 + num;
                 date->wDayOfWeek = DATETIME_CalculateDayOfWeek(
                         date->wDay,date->wMonth,date->wYear);
                 DATETIME_SendDateTimeChangeNotify (infoPtr);
                 break;
             case ONEDIGITMONTH:
             case TWODIGITMONTH:
-                if ((date->wMonth%10) > 1 || (vkCode-'0') > 2)
-                    date->wMonth = vkCode-'0';
+                if ((date->wMonth%10) > 1 || num > 2)
+                    date->wMonth = num;
                 else
-                    date->wMonth = (date->wMonth%10)*10+vkCode-'0';
+                    date->wMonth = (date->wMonth%10)*10+num;
                 date->wDayOfWeek = DATETIME_CalculateDayOfWeek(
                         date->wDay,date->wMonth,date->wYear);
                 DATETIME_SendDateTimeChangeNotify (infoPtr);
@@ -985,46 +987,46 @@ DATETIME_Char (DATETIME_INFO *infoPtr, WPARAM vkCode, LPARAM keyData)
             case ONEDIGITDAY:
             case TWODIGITDAY:
                 /* probably better checking here would help */
-                if ((date->wDay%10) >= 3 && (vkCode-'0') > 1)
-                    date->wDay = vkCode-'0';
+                if ((date->wDay%10) >= 3 && num > 1)
+                    date->wDay = num;
                 else
-                    date->wDay = (date->wDay%10)*10+vkCode-'0';
+                    date->wDay = (date->wDay%10)*10+num;
                 date->wDayOfWeek = DATETIME_CalculateDayOfWeek(
                         date->wDay,date->wMonth,date->wYear);
                 DATETIME_SendDateTimeChangeNotify (infoPtr);
                 break;
             case ONEDIGIT12HOUR:
             case TWODIGIT12HOUR:
-                if ((date->wHour%10) > 1 || (vkCode-'0') > 2)
-                    date->wHour = vkCode-'0';
+                if ((date->wHour%10) > 1 || num > 2)
+                    date->wHour = num;
                 else
-                    date->wHour = (date->wHour%10)*10+vkCode-'0';
+                    date->wHour = (date->wHour%10)*10+num;
                 DATETIME_SendDateTimeChangeNotify (infoPtr);
                 break;
             case ONEDIGIT24HOUR:
             case TWODIGIT24HOUR:
                 if ((date->wHour%10) > 2)
-                    date->wHour = vkCode-'0';
-                else if ((date->wHour%10) == 2 && (vkCode-'0') > 3)
-                    date->wHour = vkCode-'0';
+                    date->wHour = num;
+                else if ((date->wHour%10) == 2 && num > 3)
+                    date->wHour = num;
                 else
-                    date->wHour = (date->wHour%10)*10+vkCode-'0';
+                    date->wHour = (date->wHour%10)*10+num;
                 DATETIME_SendDateTimeChangeNotify (infoPtr);
                 break;
             case ONEDIGITMINUTE:
             case TWODIGITMINUTE:
                 if ((date->wMinute%10) > 5)
-                    date->wMinute = vkCode-'0';
+                    date->wMinute = num;
                 else
-                    date->wMinute = (date->wMinute%10)*10+vkCode-'0';
+                    date->wMinute = (date->wMinute%10)*10+num;
                 DATETIME_SendDateTimeChangeNotify (infoPtr);
                 break;
             case ONEDIGITSECOND:
             case TWODIGITSECOND:
                 if ((date->wSecond%10) > 5)
-                    date->wSecond = vkCode-'0';
+                    date->wSecond = num;
                 else
-                    date->wSecond = (date->wSecond%10)*10+vkCode-'0';
+                    date->wSecond = (date->wSecond%10)*10+num;
                 DATETIME_SendDateTimeChangeNotify (infoPtr);
                 break;
         }




More information about the wine-cvs mailing list