* ext/win32ole/win32ole.c (ole_type_progid, reg_enum_key,

reg_get_val, ole_wc2mb): fix the bug. Thanks, arton. 
  [ruby-dev:31576]



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@13297 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
suke 2007-08-28 14:16:24 +00:00
parent 03785cd9b1
commit 763e41cbca
3 changed files with 22 additions and 11 deletions

View file

@ -1,3 +1,9 @@
Tue Aug 28 23:26:12 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
* ext/win32ole/win32ole.c (ole_type_progid, reg_enum_key,
reg_get_val, ole_wc2mb): fix the bug. Thanks, arton.
[ruby-dev:31576]
Mon Aug 27 19:10:50 2007 Yukihiro Matsumoto <matz@ruby-lang.org> Mon Aug 27 19:10:50 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
* ext/etc/etc.c (etc_getlogin): update documentation to note * ext/etc/etc.c (etc_getlogin): update documentation to note

View file

@ -79,7 +79,7 @@
#define WC2VSTR(x) ole_wc2vstr((x), TRUE) #define WC2VSTR(x) ole_wc2vstr((x), TRUE)
#define WIN32OLE_VERSION "0.7.1" #define WIN32OLE_VERSION "0.7.2"
typedef HRESULT (STDAPICALLTYPE FNCOCREATEINSTANCEEX) typedef HRESULT (STDAPICALLTYPE FNCOCREATEINSTANCEEX)
(REFCLSID, IUnknown*, DWORD, COSERVERINFO*, DWORD, MULTI_QI*); (REFCLSID, IUnknown*, DWORD, COSERVERINFO*, DWORD, MULTI_QI*);
@ -477,8 +477,9 @@ ole_wc2mb(pw)
LPSTR pm; LPSTR pm;
size = WideCharToMultiByte(cWIN32OLE_cp, 0, pw, -1, NULL, 0, NULL, NULL); size = WideCharToMultiByte(cWIN32OLE_cp, 0, pw, -1, NULL, 0, NULL, NULL);
if (size) { if (size) {
pm = ALLOC_N(char, size); pm = ALLOC_N(char, size + 1);
WideCharToMultiByte(cWIN32OLE_cp, 0, pw, -1, pm, size, NULL, NULL); WideCharToMultiByte(cWIN32OLE_cp, 0, pw, -1, pm, size, NULL, NULL);
pm[size] = '\0';
} }
else { else {
pm = ALLOC_N(char, 1); pm = ALLOC_N(char, 1);
@ -1138,12 +1139,13 @@ reg_enum_key(hkey, i)
HKEY hkey; HKEY hkey;
DWORD i; DWORD i;
{ {
char buf[BUFSIZ]; char buf[BUFSIZ + 1];
DWORD size_buf = sizeof(buf); DWORD size_buf = sizeof(buf) - 1;
FILETIME ft; FILETIME ft;
LONG err = RegEnumKeyEx(hkey, i, buf, &size_buf, LONG err = RegEnumKeyEx(hkey, i, buf, &size_buf,
NULL, NULL, NULL, &ft); NULL, NULL, NULL, &ft);
if(err == ERROR_SUCCESS) { if(err == ERROR_SUCCESS) {
buf[BUFSIZ] = '\0';
return rb_str_new2(buf); return rb_str_new2(buf);
} }
return Qnil; return Qnil;
@ -1154,10 +1156,11 @@ reg_get_val(hkey, subkey)
HKEY hkey; HKEY hkey;
const char *subkey; const char *subkey;
{ {
char buf[BUFSIZ]; char buf[BUFSIZ + 1];
LONG size_buf = sizeof(buf); LONG size_buf = sizeof(buf) - 1;
LONG err = RegQueryValue(hkey, subkey, buf, &size_buf); LONG err = RegQueryValue(hkey, subkey, buf, &size_buf);
if (err == ERROR_SUCCESS) { if (err == ERROR_SUCCESS) {
buf[BUFSIZ] = '\0';
return rb_str_new2(buf); return rb_str_new2(buf);
} }
return Qnil; return Qnil;
@ -3618,8 +3621,10 @@ ole_type_progid(pTypeInfo)
if (FAILED(hr)) if (FAILED(hr))
return progid; return progid;
hr = ProgIDFromCLSID(&pTypeAttr->guid, &pbuf); hr = ProgIDFromCLSID(&pTypeAttr->guid, &pbuf);
if (SUCCEEDED(hr)) if (SUCCEEDED(hr)) {
progid = WC2VSTR(pbuf); progid = ole_wc2vstr(pbuf, FALSE);
CoTaskMemFree(pbuf);
}
OLE_RELEASE_TYPEATTR(pTypeInfo, pTypeAttr); OLE_RELEASE_TYPEATTR(pTypeInfo, pTypeAttr);
return progid; return progid;
} }

View file

@ -1,7 +1,7 @@
#define RUBY_VERSION "1.8.6" #define RUBY_VERSION "1.8.6"
#define RUBY_RELEASE_DATE "2007-08-27" #define RUBY_RELEASE_DATE "2007-08-28"
#define RUBY_VERSION_CODE 186 #define RUBY_VERSION_CODE 186
#define RUBY_RELEASE_CODE 20070827 #define RUBY_RELEASE_CODE 20070828
#define RUBY_PATCHLEVEL 5000 #define RUBY_PATCHLEVEL 5000
#define RUBY_VERSION_MAJOR 1 #define RUBY_VERSION_MAJOR 1
@ -9,7 +9,7 @@
#define RUBY_VERSION_TEENY 6 #define RUBY_VERSION_TEENY 6
#define RUBY_RELEASE_YEAR 2007 #define RUBY_RELEASE_YEAR 2007
#define RUBY_RELEASE_MONTH 8 #define RUBY_RELEASE_MONTH 8
#define RUBY_RELEASE_DAY 27 #define RUBY_RELEASE_DAY 28
#ifdef RUBY_EXTERN #ifdef RUBY_EXTERN
RUBY_EXTERN const char ruby_version[]; RUBY_EXTERN const char ruby_version[];