diff options
author | kosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-01-27 09:50:30 +0000 |
---|---|---|
committer | kosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-01-27 09:50:30 +0000 |
commit | ab720532ef884a69fbf9dc104b8a113b5a6c9a18 (patch) | |
tree | 155bdd89369029669f032d4ecf0b63f265e077f8 | |
parent | 18c11392aff96003cc6713b447a160c20d66a0a6 (diff) | |
download | ruby-ab720532ef884a69fbf9dc104b8a113b5a6c9a18.tar.gz |
* win32/win32.c (open_dir_handle): get rid of too huge alloca().
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30668 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | win32/win32.c | 5 |
2 files changed, 7 insertions, 2 deletions
@@ -1,3 +1,7 @@ +Thu Jan 27 18:49:53 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com> + + * win32/win32.c (open_dir_handle): get rid of too huge alloca(). + Thu Jan 27 18:34:58 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com> * file.c (w32_io_info): get rid of too huge alloca(). diff --git a/win32/win32.c b/win32/win32.c index f2bffa6481..a287749173 100644 --- a/win32/win32.c +++ b/win32/win32.c @@ -1654,12 +1654,13 @@ open_dir_handle(const WCHAR *filename, WIN32_FIND_DATAW *fd) WCHAR *scanname; WCHAR *p; int len; + VALUE v; // // Create the search pattern // len = lstrlenW(filename); - scanname = ALLOCA_N(WCHAR, len + sizeof(wildcard) / sizeof(WCHAR)); + scanname = ALLOCV_N(WCHAR, v, len + sizeof(wildcard) / sizeof(WCHAR)); lstrcpyW(scanname, filename); p = CharPrevW(scanname, scanname + len); if (*p == L'/' || *p == L'\\' || *p == L':') @@ -1671,6 +1672,7 @@ open_dir_handle(const WCHAR *filename, WIN32_FIND_DATAW *fd) // do the FindFirstFile call // fh = FindFirstFileW(scanname, fd); + ALLOCV_END(v); if (fh == INVALID_HANDLE_VALUE) { errno = map_errno(GetLastError()); } @@ -1799,7 +1801,6 @@ rb_w32_opendir(const char *filename) errno = ENOTDIR; return NULL; } - fh = open_dir_handle(wpath, &fd); free(wpath); return opendir_internal(fh, &fd); |