comparison win/dw.c @ 1623:33d7cf373938

After looking at that last commit I realized what I was doing was unsafe... so rewriting the code safely.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Tue, 27 Mar 2012 17:00:44 +0000
parents fb3c9d7509dd
children c5aab296fba3
comparison
equal deleted inserted replaced
1622:fb3c9d7509dd 1623:33d7cf373938
7753 void API dw_listbox_get_text(HWND handle, unsigned int index, char *buffer, unsigned int length) 7753 void API dw_listbox_get_text(HWND handle, unsigned int index, char *buffer, unsigned int length)
7754 { 7754 {
7755 TCHAR tmpbuf[100] = {0}, *wbuffer; 7755 TCHAR tmpbuf[100] = {0}, *wbuffer;
7756 unsigned int len; 7756 unsigned int len;
7757 7757
7758 if(!buffer || !length || !(wbuffer = _alloca((length+1)*sizeof(TCHAR)))) 7758 buffer[0] = 0;
7759
7760 if(!buffer || !length)
7759 return; 7761 return;
7760 7762
7761 buffer[0] = 0;
7762
7763 GetClassName(handle, tmpbuf, 99); 7763 GetClassName(handle, tmpbuf, 99);
7764 7764
7765 if(_tcsnicmp(tmpbuf, COMBOBOXCLASSNAME, _tcslen(COMBOBOXCLASSNAME)+1)==0) 7765 if(_tcsnicmp(tmpbuf, COMBOBOXCLASSNAME, _tcslen(COMBOBOXCLASSNAME)+1)==0)
7766 { 7766 {
7767 len = (int)SendMessage(handle, CB_GETLBTEXTLEN, (WPARAM)index, 0); 7767 len = (int)SendMessage(handle, CB_GETLBTEXTLEN, (WPARAM)index, 0);
7768 7768
7769 if(len < length && len != CB_ERR) 7769 if(len != CB_ERR && (wbuffer = _alloca((len+1)*sizeof(TCHAR))))
7770 { 7770 {
7771 SendMessage(handle, CB_GETLBTEXT, (WPARAM)index, (LPARAM)wbuffer); 7771 SendMessage(handle, CB_GETLBTEXT, (WPARAM)index, (LPARAM)wbuffer);
7772 strncpy(buffer, WideToUTF8(wbuffer), length); 7772 strncpy(buffer, WideToUTF8(wbuffer), length);
7773 } 7773 }
7774 } 7774 }
7775 else 7775 else
7776 { 7776 {
7777 len = (int)SendMessage(handle, LB_GETTEXTLEN, (WPARAM)index, 0); 7777 len = (int)SendMessage(handle, LB_GETTEXTLEN, (WPARAM)index, 0);
7778 7778
7779 if(len < length && len != LB_ERR) 7779 if(len != LB_ERR && (wbuffer = _alloca((len+1)*sizeof(TCHAR))))
7780 { 7780 {
7781 SendMessage(handle, LB_GETTEXT, (WPARAM)index, (LPARAM)wbuffer); 7781 SendMessage(handle, LB_GETTEXT, (WPARAM)index, (LPARAM)wbuffer);
7782 strncpy(buffer, WideToUTF8(wbuffer), length); 7782 strncpy(buffer, WideToUTF8(wbuffer), length);
7783 } 7783 }
7784 } 7784 }
7785
7786 } 7785 }
7787 7786
7788 /* 7787 /*
7789 * Returns the index to the item in the list currently selected. 7788 * Returns the index to the item in the list currently selected.
7790 * Parameters: 7789 * Parameters: