Call SetLastError on errors.

This commit is contained in:
Robert Shearman 2005-07-12 18:11:40 +00:00 committed by Alexandre Julliard
parent ff93df6e0f
commit 30ff940a68
1 changed files with 44 additions and 7 deletions

View File

@ -431,7 +431,12 @@ static void LISTBOX_UpdateSize( LB_DESCR *descr )
static LRESULT LISTBOX_GetItemRect( LB_DESCR *descr, INT index, RECT *rect ) static LRESULT LISTBOX_GetItemRect( LB_DESCR *descr, INT index, RECT *rect )
{ {
/* Index <= 0 is legal even on empty listboxes */ /* Index <= 0 is legal even on empty listboxes */
if (index && (index >= descr->nb_items)) return -1; if (index && (index >= descr->nb_items))
{
memset(rect, 0, sizeof(*rect));
SetLastError(ERROR_INVALID_INDEX);
return LB_ERR;
}
SetRect( rect, 0, 0, descr->width, descr->height ); SetRect( rect, 0, 0, descr->width, descr->height );
if (descr->style & LBS_MULTICOLUMN) if (descr->style & LBS_MULTICOLUMN)
{ {
@ -762,7 +767,11 @@ static BOOL LISTBOX_SetTabStops( LB_DESCR *descr, INT count, LPINT tabs, BOOL sh
*/ */
static LRESULT LISTBOX_GetText( LB_DESCR *descr, INT index, LPWSTR buffer, BOOL unicode ) static LRESULT LISTBOX_GetText( LB_DESCR *descr, INT index, LPWSTR buffer, BOOL unicode )
{ {
if ((index < 0) || (index >= descr->nb_items)) return LB_ERR; if ((index < 0) || (index >= descr->nb_items))
{
SetLastError(ERROR_INVALID_INDEX);
return LB_ERR;
}
if (HAS_STRINGS(descr)) if (HAS_STRINGS(descr))
{ {
if (!buffer) if (!buffer)
@ -1163,7 +1172,11 @@ static LRESULT LISTBOX_GetItemHeight( LB_DESCR *descr, INT index )
{ {
if (descr->style & LBS_OWNERDRAWVARIABLE) if (descr->style & LBS_OWNERDRAWVARIABLE)
{ {
if ((index < 0) || (index >= descr->nb_items)) return LB_ERR; if ((index < 0) || (index >= descr->nb_items))
{
SetLastError(ERROR_INVALID_INDEX);
return LB_ERR;
}
return descr->items[index].height; return descr->items[index].height;
} }
else return descr->item_height; else return descr->item_height;
@ -1179,7 +1192,11 @@ static LRESULT LISTBOX_SetItemHeight( LB_DESCR *descr, INT index, INT height, BO
if (descr->style & LBS_OWNERDRAWVARIABLE) if (descr->style & LBS_OWNERDRAWVARIABLE)
{ {
if ((index < 0) || (index >= descr->nb_items)) return LB_ERR; if ((index < 0) || (index >= descr->nb_items))
{
SetLastError(ERROR_INVALID_INDEX);
return LB_ERR;
}
TRACE("[%p]: item %d height = %d\n", descr->self, index, height ); TRACE("[%p]: item %d height = %d\n", descr->self, index, height );
descr->items[index].height = height; descr->items[index].height = height;
LISTBOX_UpdateScroll( descr ); LISTBOX_UpdateScroll( descr );
@ -1728,7 +1745,12 @@ static LRESULT LISTBOX_SetCount( LB_DESCR *descr, INT count )
{ {
LRESULT ret; LRESULT ret;
if (HAS_STRINGS(descr)) return LB_ERR; if (HAS_STRINGS(descr))
{
SetLastError(ERROR_SETCOUNT_ON_BAD_LB);
return LB_ERR;
}
/* FIXME: this is far from optimal... */ /* FIXME: this is far from optimal... */
if (count > descr->nb_items) if (count > descr->nb_items)
{ {
@ -2628,20 +2650,29 @@ static LRESULT WINAPI ListBoxWndProc_common( HWND hwnd, UINT msg,
case LB_DELETESTRING16: case LB_DELETESTRING16:
case LB_DELETESTRING: case LB_DELETESTRING:
if (LISTBOX_RemoveItem( descr, wParam) != LB_ERR) if (LISTBOX_RemoveItem( descr, wParam) != LB_ERR)
return descr->nb_items; return descr->nb_items;
else else
return LB_ERR; {
SetLastError(ERROR_INVALID_INDEX);
return LB_ERR;
}
case LB_GETITEMDATA16: case LB_GETITEMDATA16:
case LB_GETITEMDATA: case LB_GETITEMDATA:
if (((INT)wParam < 0) || ((INT)wParam >= descr->nb_items)) if (((INT)wParam < 0) || ((INT)wParam >= descr->nb_items))
{
SetLastError(ERROR_INVALID_INDEX);
return LB_ERR; return LB_ERR;
}
return descr->items[wParam].data; return descr->items[wParam].data;
case LB_SETITEMDATA16: case LB_SETITEMDATA16:
case LB_SETITEMDATA: case LB_SETITEMDATA:
if (((INT)wParam < 0) || ((INT)wParam >= descr->nb_items)) if (((INT)wParam < 0) || ((INT)wParam >= descr->nb_items))
{
SetLastError(ERROR_INVALID_INDEX);
return LB_ERR; return LB_ERR;
}
descr->items[wParam].data = (DWORD)lParam; descr->items[wParam].data = (DWORD)lParam;
return LB_OKAY; return LB_OKAY;
@ -2659,7 +2690,10 @@ static LRESULT WINAPI ListBoxWndProc_common( HWND hwnd, UINT msg,
/* fall through */ /* fall through */
case LB_GETTEXTLEN: case LB_GETTEXTLEN:
if ((INT)wParam >= descr->nb_items || (INT)wParam < 0) if ((INT)wParam >= descr->nb_items || (INT)wParam < 0)
{
SetLastError(ERROR_INVALID_INDEX);
return LB_ERR; return LB_ERR;
}
if (!HAS_STRINGS(descr)) return sizeof(DWORD); if (!HAS_STRINGS(descr)) return sizeof(DWORD);
if (unicode) return strlenW( descr->items[wParam].str ); if (unicode) return strlenW( descr->items[wParam].str );
return WideCharToMultiByte( CP_ACP, 0, descr->items[wParam].str, return WideCharToMultiByte( CP_ACP, 0, descr->items[wParam].str,
@ -2888,7 +2922,10 @@ static LRESULT WINAPI ListBoxWndProc_common( HWND hwnd, UINT msg,
/* fall through */ /* fall through */
case LB_SETANCHORINDEX: case LB_SETANCHORINDEX:
if (((INT)wParam < -1) || ((INT)wParam >= descr->nb_items)) if (((INT)wParam < -1) || ((INT)wParam >= descr->nb_items))
{
SetLastError(ERROR_INVALID_INDEX);
return LB_ERR; return LB_ERR;
}
descr->anchor_item = (INT)wParam; descr->anchor_item = (INT)wParam;
return LB_OKAY; return LB_OKAY;