misc. code fixes

Andreas Mohr andi at rhlx01.fht-esslingen.de
Sun Nov 18 09:41:49 CST 2001


Hi all,

- make listbox.c use reasonable bounds checking
- dlls/wineps/wps_De.rc: fix terribly wrong spelling, make accel key
  conform to NT 4.0 key.
- server/file.c: move file_set_error() to top to allow for easier finding
- win32/time.c: fix copy&paste "bug"

-- 
Andreas Mohr                        Stauferstr. 6, D-71272 Renningen, Germany
-------------- next part --------------
Determining best CVS host...
Using CVSROOT :pserver:cvs at rhlx01.fht-esslingen.de:/home/wine
Index: controls/listbox.c
===================================================================
RCS file: /home/wine/wine/controls/listbox.c,v
retrieving revision 1.79
diff -u -r1.79 listbox.c
--- controls/listbox.c	7 Sep 2001 18:38:57 -0000	1.79
+++ controls/listbox.c	18 Nov 2001 13:39:00 -0000
@@ -434,7 +434,7 @@
 static LRESULT LISTBOX_GetItemRect( LB_DESCR *descr, INT index, RECT *rect )
 {
     /* Index <= 0 is legal even on empty listboxes */
-    if (index && (index >= descr->nb_items)) return -1;
+    if (index && (index > descr->nb_items-1)) return -1;
     SetRect( rect, 0, 0, descr->width, descr->height );
     if (descr->style & LBS_MULTICOLUMN)
     {
@@ -449,7 +449,7 @@
     {
         INT i;
         rect->right += descr->horz_pos;
-        if ((index >= 0) && (index < descr->nb_items))
+        if ((index >= 0) && (index <= descr->nb_items-1))
         {
             if (index < descr->top_item)
             {
@@ -492,7 +492,7 @@
         INT pos = 0;
         if (y >= 0)
         {
-            while (index < descr->nb_items)
+            while (index <= descr->nb_items-1)
             {
                 if ((pos += descr->items[index].height) > y) break;
                 index++;
@@ -519,7 +519,7 @@
         index += (y / descr->item_height);
     }
     if (index < 0) return 0;
-    if (index >= descr->nb_items) return -1;
+    if (index > descr->nb_items-1) return -1;
     return index;
 }
 
@@ -533,7 +533,7 @@
                                const RECT *rect, INT index, UINT action, BOOL ignoreFocus )
 {
     LB_ITEMDATA *item = NULL;
-    if (index < descr->nb_items) item = &descr->items[index];
+    if (index <= descr->nb_items-1) item = &descr->items[index];
 
     if (IS_OWNERDRAW(descr))
     {
@@ -750,7 +750,7 @@
  */
 static LRESULT LISTBOX_GetText( LB_DESCR *descr, INT index, LPARAM lParam, BOOL unicode )
 {
-    if ((index < 0) || (index >= descr->nb_items)) return LB_ERR;
+    if ((index < 0) || (index > descr->nb_items-1)) return LB_ERR;
     if (HAS_STRINGS(descr))
     {
         if (!lParam)
@@ -875,7 +875,7 @@
     INT i;
     LB_ITEMDATA *item;
 
-    if (start >= descr->nb_items) start = -1;
+    if (start > descr->nb_items-1) start = -1;
     item = descr->items + start + 1;
     if (HAS_STRINGS(descr))
     {
@@ -1125,7 +1125,7 @@
 {
     if (descr->style & LBS_OWNERDRAWVARIABLE)
     {
-        if ((index < 0) || (index >= descr->nb_items)) return LB_ERR;
+        if ((index < 0) || (index > descr->nb_items-1)) return LB_ERR;
         return descr->items[index].height;
     }
     else return descr->item_height;
@@ -1142,7 +1142,7 @@
 
     if (descr->style & LBS_OWNERDRAWVARIABLE)
     {
-        if ((index < 0) || (index >= descr->nb_items)) return LB_ERR;
+        if ((index < 0) || (index > descr->nb_items-1)) return LB_ERR;
         TRACE("[%04x]: item %d height = %d\n", hwnd, index, height );
         descr->items[index].height = height;
         LISTBOX_UpdateScroll( hwnd, descr );
@@ -1292,7 +1292,7 @@
     INT oldfocus = descr->focus_item;
 
     if (descr->style & LBS_NOSEL) return LB_ERR;
-    if ((index < 0) || (index >= descr->nb_items)) return LB_ERR;
+    if ((index < 0) || (index > descr->nb_items-1)) return LB_ERR;
     if (index == oldfocus) return LB_OKAY;
     descr->focus_item = index;
     if ((oldfocus != -1) && descr->caret_on && (descr->in_focus))
@@ -1322,8 +1322,8 @@
     if ((last == -1) && (descr->nb_items == 0)) return LB_OKAY;
     if (!(descr->style & LBS_MULTIPLESEL)) return LB_ERR;
     if (last == -1) last = descr->nb_items - 1;
-    if ((first < 0) || (first >= descr->nb_items)) return LB_ERR;
-    if ((last < 0) || (last >= descr->nb_items)) return LB_ERR;
+    if ((first < 0) || (first > descr->nb_items-1)) return LB_ERR;
+    if ((last < 0) || (last > descr->nb_items-1)) return LB_ERR;
     /* selected_item reflects last selected/unselected item on multiple sel */
     descr->selected_item = last;
 
@@ -1358,7 +1358,7 @@
     TRACE( "index=%d notify=%s\n", index, send_notify ? "YES" : "NO" );
 
     if (descr->style & LBS_NOSEL) return LB_ERR;
-    if ((index < -1) || (index >= descr->nb_items)) return LB_ERR;
+    if ((index < -1) || (index > descr->nb_items-1)) return LB_ERR;
     if (descr->style & LBS_MULTIPLESEL)
     {
         if (index == -1)  /* Select all items */
@@ -1395,7 +1395,7 @@
 {
     INT oldfocus = descr->focus_item;
 
-    if ((index <  0) || (index >= descr->nb_items))
+    if ((index <  0) || (index > descr->nb_items-1))
         return;
 
     /* Important, repaint needs to be done in this order if
@@ -1598,7 +1598,7 @@
     INT max_items;
 
     if ((index == -1) && (descr->nb_items > 0)) index = descr->nb_items - 1;
-    else if ((index < 0) || (index >= descr->nb_items)) return LB_ERR;
+    else if ((index < 0) || (index > descr->nb_items-1)) return LB_ERR;
 
     /* We need to invalidate the original rect instead of the updated one. */
     LISTBOX_InvalidateItems( hwnd, descr, index );
@@ -1645,7 +1645,7 @@
     }
     }
 
-    if (descr->focus_item >= descr->nb_items)
+    if (descr->focus_item > descr->nb_items-1)
     {
           descr->focus_item = descr->nb_items - 1;
           if (descr->focus_item < 0) descr->focus_item = 0;
@@ -2132,7 +2132,7 @@
     case LB_TIMER_DOWN:
         index = descr->top_item + LISTBOX_GetCurrentPageSize( descr );
         if (index == descr->focus_item) index++;
-        if (index >= descr->nb_items) index = descr->nb_items - 1;
+        if (index > descr->nb_items-1) index = descr->nb_items - 1;
         break;
     case LB_TIMER_RIGHT:
         if (index + descr->page_size < descr->nb_items)
@@ -2256,7 +2256,7 @@
         /* fall through */
     case VK_DOWN:
         caret = descr->focus_item + 1;
-        if (caret >= descr->nb_items) caret = descr->nb_items - 1;
+        if (caret > descr->nb_items-1) caret = descr->nb_items - 1;
         break;
 
     case VK_PRIOR:
@@ -2277,7 +2277,7 @@
             caret = descr->focus_item + (page * descr->page_size) - 1;
         }
         else caret = descr->focus_item + LISTBOX_GetCurrentPageSize(descr) - 1;
-        if (caret >= descr->nb_items) caret = descr->nb_items - 1;
+        if (caret > descr->nb_items-1) caret = descr->nb_items - 1;
         break;
     case VK_HOME:
         caret = 0;
@@ -2566,13 +2566,13 @@
 
     case LB_GETITEMDATA16:
     case LB_GETITEMDATA:
-        if (((INT)wParam < 0) || ((INT)wParam >= descr->nb_items))
+        if (((INT)wParam < 0) || ((INT)wParam > descr->nb_items-1))
             return LB_ERR;
         return descr->items[wParam].data;
 
     case LB_SETITEMDATA16:
     case LB_SETITEMDATA:
-        if (((INT)wParam < 0) || ((INT)wParam >= descr->nb_items))
+        if (((INT)wParam < 0) || ((INT)wParam > descr->nb_items-1))
             return LB_ERR;
         descr->items[wParam].data = (DWORD)lParam;
         return LB_OKAY;
@@ -2590,7 +2590,7 @@
     case LB_GETTEXTLEN16:
         /* fall through */
     case LB_GETTEXTLEN:
-        if ((INT)wParam >= descr->nb_items || (INT)wParam < 0)
+        if (((INT)wParam < 0) || ((INT)wParam > descr->nb_items-1))
             return LB_ERR;
         return (HAS_STRINGS(descr) ? strlenW(descr->items[wParam].str)
                                    : sizeof(DWORD));
@@ -2753,7 +2753,7 @@
         wParam = (INT)(INT16)wParam;
         /* fall through */
     case LB_GETSEL:
-        if (((INT)wParam < 0) || ((INT)wParam >= descr->nb_items))
+        if (((INT)wParam < 0) || ((INT)wParam > descr->nb_items-1))
             return LB_ERR;
         return descr->items[wParam].selected;
 
@@ -2813,7 +2813,7 @@
         wParam = (INT)(INT16)wParam;
         /* fall through */
     case LB_SETANCHORINDEX:
-        if (((INT)wParam < -1) || ((INT)wParam >= descr->nb_items))
+        if (((INT)wParam < -1) || ((INT)wParam > descr->nb_items-1))
             return LB_ERR;
         descr->anchor_item = (INT)wParam;
         return LB_OKAY;
Index: dlls/wineps/wps_De.rc
===================================================================
RCS file: /home/wine/wine/dlls/wineps/wps_De.rc,v
retrieving revision 1.1
diff -u -r1.1 wps_De.rc
--- dlls/wineps/wps_De.rc	7 May 2001 18:13:13 -0000	1.1
+++ dlls/wineps/wps_De.rc	18 Nov 2001 13:39:00 -0000
@@ -5,7 +5,7 @@
 CAPTION "Papier"
 FONT 8, "Helv"
 {
- LTEXT "Papier &Gr??e:", -1, 10, 6, 100, 8
+ LTEXT "&Papiergr??e:", -1, 10, 6, 100, 8
  LISTBOX IDD_PAPERS, 10, 15, 200, 45, LBS_STANDARD | LBS_HASSTRINGS |
 	 WS_TABSTOP
  GROUPBOX "Ausrichtung", -1, 10, 80, 200, 50
Index: server/file.c
===================================================================
RCS file: /home/wine/wine/server/file.c,v
retrieving revision 1.48
diff -u -r1.48 file.c
--- server/file.c	24 Oct 2001 00:23:26 -0000	1.48
+++ server/file.c	18 Nov 2001 13:39:00 -0000
@@ -69,6 +69,32 @@
 };
 
 
+/* set the last error depending on errno */
+void file_set_error(void)
+{
+    switch (errno)
+    {
+    case EAGAIN:    set_error( STATUS_SHARING_VIOLATION ); break;
+    case EBADF:     set_error( STATUS_INVALID_HANDLE ); break;
+    case ENOSPC:    set_error( STATUS_DISK_FULL ); break;
+    case EACCES:
+    case ESRCH:
+    case EPERM:     set_error( STATUS_ACCESS_DENIED ); break;
+    case EROFS:     set_error( STATUS_MEDIA_WRITE_PROTECTED ); break;
+    case EBUSY:     set_error( STATUS_FILE_LOCK_CONFLICT ); break;
+    case ENOENT:    set_error( STATUS_NO_SUCH_FILE ); break;
+    case EISDIR:    set_error( 0xc0010000 | ERROR_CANNOT_MAKE /* FIXME */ ); break;
+    case ENFILE:
+    case EMFILE:    set_error( STATUS_NO_MORE_FILES ); break;
+    case EEXIST:    set_error( STATUS_OBJECT_NAME_COLLISION ); break;
+    case EINVAL:    set_error( STATUS_INVALID_PARAMETER ); break;
+    case ESPIPE:    set_error( 0xc0010000 | ERROR_SEEK /* FIXME */ ); break;
+    case ENOTEMPTY: set_error( STATUS_DIRECTORY_NOT_EMPTY ); break;
+    case EIO:       set_error( STATUS_ACCESS_VIOLATION ); break;
+    default:        perror("file_set_error"); set_error( ERROR_UNKNOWN /* FIXME */ ); break;
+    }
+}
+
 static int get_name_hash( const char *name )
 {
     int hash = 0;
@@ -324,32 +350,6 @@
         *pptr = (*pptr)->next;
         if (file->flags & FILE_FLAG_DELETE_ON_CLOSE) unlink( file->name );
         free( file->name );
-    }
-}
-
-/* set the last error depending on errno */
-void file_set_error(void)
-{
-    switch (errno)
-    {
-    case EAGAIN:    set_error( STATUS_SHARING_VIOLATION ); break;
-    case EBADF:     set_error( STATUS_INVALID_HANDLE ); break;
-    case ENOSPC:    set_error( STATUS_DISK_FULL ); break;
-    case EACCES:
-    case ESRCH:
-    case EPERM:     set_error( STATUS_ACCESS_DENIED ); break;
-    case EROFS:     set_error( STATUS_MEDIA_WRITE_PROTECTED ); break;
-    case EBUSY:     set_error( STATUS_FILE_LOCK_CONFLICT ); break;
-    case ENOENT:    set_error( STATUS_NO_SUCH_FILE ); break;
-    case EISDIR:    set_error( 0xc0010000 | ERROR_CANNOT_MAKE /* FIXME */ ); break;
-    case ENFILE:
-    case EMFILE:    set_error( STATUS_NO_MORE_FILES ); break;
-    case EEXIST:    set_error( STATUS_OBJECT_NAME_COLLISION ); break;
-    case EINVAL:    set_error( STATUS_INVALID_PARAMETER ); break;
-    case ESPIPE:    set_error( 0xc0010000 | ERROR_SEEK /* FIXME */ ); break;
-    case ENOTEMPTY: set_error( STATUS_DIRECTORY_NOT_EMPTY ); break;
-    case EIO:       set_error( STATUS_ACCESS_VIOLATION ); break;
-    default:        perror("file_set_error"); set_error( ERROR_UNKNOWN /* FIXME */ ); break;
     }
 }
 
Index: win32/time.c
===================================================================
RCS file: /home/wine/wine/win32/time.c,v
retrieving revision 1.18
diff -u -r1.18 time.c
--- win32/time.c	14 Feb 2001 23:11:20 -0000	1.18
+++ win32/time.c	18 Nov 2001 13:39:00 -0000
@@ -42,20 +42,20 @@
  */
 VOID WINAPI GetSystemTime(LPSYSTEMTIME systime)
 {
-    time_t local_time;
-    struct tm *local_tm;
+    time_t system_time;
+    struct tm *system_tm;
     struct timeval tv;
 
     gettimeofday(&tv, NULL);
-    local_time = tv.tv_sec;
-    local_tm = gmtime(&local_time);
+    system_time = tv.tv_sec;
+    system_tm = gmtime(&system_time);
 
-    systime->wYear = local_tm->tm_year + 1900;
-    systime->wMonth = local_tm->tm_mon + 1;
-    systime->wDayOfWeek = local_tm->tm_wday;
-    systime->wDay = local_tm->tm_mday;
-    systime->wHour = local_tm->tm_hour;
-    systime->wMinute = local_tm->tm_min;
-    systime->wSecond = local_tm->tm_sec;
+    systime->wYear = system_tm->tm_year + 1900;
+    systime->wMonth = system_tm->tm_mon + 1;
+    systime->wDayOfWeek = system_tm->tm_wday;
+    systime->wDay = system_tm->tm_mday;
+    systime->wHour = system_tm->tm_hour;
+    systime->wMinute = system_tm->tm_min;
+    systime->wSecond = system_tm->tm_sec;
     systime->wMilliseconds = (tv.tv_usec / 1000) % 1000;
 }


More information about the wine-patches mailing list