> On 23 Aug 2015, at 6:09 , Nicolai Hess <nicolaih...@web.de> wrote: > > And If you want to review the changes: > > https://github.com/nicolaihess/pharo-vm/compare/master...nicolaihess:win-long-filename > > <https://github.com/nicolaihess/pharo-vm/compare/master...nicolaihess:win-long-filename> > > > 2015-08-23 13:44 GMT+02:00 Nicolai Hess <nicolaih...@web.de > <mailto:nicolaih...@web.de>>: > For those who had problems with pharo on windows and github based > repositories, > I built a windows vm with support for long paths: > > https://drive.google.com/file/d/0B8yEahnuIem2bmxwdzJuUXFxVGM/view?usp=sharing > <https://drive.google.com/file/d/0B8yEahnuIem2bmxwdzJuUXFxVGM/view?usp=sharing> > > > For browsing directories with large paths (FileList or Inspect), > you may need one additional change in the image (But I am not really sure > about that) : > > DiskStore>>initialize > super initialize. > maxFileNameLength := Smalltalk vm maxFilenameLength ifNil: [ 32767 ]. > > > please test and give feedback. > > This wasn't as easy as I thought, and I had to make some more changes > for the file permissions (the stat-functions don't work for files with long > paths). > Please test other file/folder operations. > > > nicolai > > > >
+ #define CONVERT_MULTIBYTE_TO_WIDECHAR_PATH(buffer, size, fileNameString, fileNameLength) { \ + buffer = (WCHAR*)alloca((size+4+1)*sizeof(WCHAR));\ + buffer[0] = L'\\';buffer[1] = L'\\'; buffer[2] = L'?'; buffer[3] = L'\\';\ + MultiByteToWideChar(CP_UTF8, 0, fileNameString, fileNameLength, buffer + 4, size);\ + buffer[size + 4] = 0;\ + size += 4;} - Is an alloca version really worth it for the potential problems? - Also, LONG_PATH_PREFIX_SIZE is defined above in the header, should probably use this instead of 4 in the last two lines? - The comment on lines 111/164/265/381, while not modified, are somewhat incorrect, null-terminated C-string indicates UTF8, which we are converting from, not into. I'm curious what the "\\?\ <smb://?/>" prefix does to hasCaseSensitiveDuplicate (adding a new ? segment to the path), but I cba to understand that code, and considering int caseSensitiveFileMode = 0; if(!caseSensitiveFileMode) return 0; I guess it doesn't really matter. Otherwise, looks good to me! Cheers, Henry