Skip to content

Commit

Permalink
* file.c: fixes to compile on mswin32. Patch from U. Nakamura
Browse files Browse the repository at this point in the history
	  <usa at garbagecollect.jp>. [ruby-dev:35127]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_6@17397 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
shyouhei committed Jun 18, 2008
1 parent a938a27 commit 7af00f1
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 42 deletions.
5 changes: 5 additions & 0 deletions ChangeLog
@@ -1,3 +1,8 @@
Wed Jun 18 13:19:55 2008 URABE Shyouhei <shyouhei@ruby-lang.org>

* file.c: fixes to compile on mswin32. Patch from U. Nakamura
<usa at garbagecollect.jp>. [ruby-dev:35127]

Tue Jun 17 22:16:44 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>

* configure.in (LIBPATHFLAG, RPATHFLAG): no needs to be quoted,
Expand Down
63 changes: 25 additions & 38 deletions file.c
Expand Up @@ -16,11 +16,12 @@
#include "missing/file.h"
#endif
#ifdef __CYGWIN__
#define OpenFile WINAPI_OpenFile
#include <windows.h>
#include <sys/cygwin.h>
#undef OpenFile
#endif

#define OpenFile rb_io_t
#include "ruby.h"
#include "rubyio.h"
#include "rubysig.h"
Expand Down Expand Up @@ -2335,18 +2336,6 @@ rb_file_s_umask(argc, argv)
# endif
#endif

#if defined _WIN32 || defined __CYGWIN__
#define USE_NTFS 1
#else
#define USE_NTFS 0
#endif

#if USE_NTFS
#define istrailinggabage(x) ((x) == '.' || (x) == ' ')
#else
#define istrailinggabage(x) 0
#endif

#ifdef DOSISH_DRIVE_LETTER
static inline int
has_drive_letter(buf)
Expand Down Expand Up @@ -2487,6 +2476,7 @@ rb_path_end(path)
static char *
ntfs_tail(const char *path)
{
while (*path == '.') path++;
while (*path && *path != ':') {
if (istrailinggabage(*path)) {
const char *last = path++;
Expand Down Expand Up @@ -2516,10 +2506,6 @@ ntfs_tail(const char *path)
p = buf + bdiff;\
pend = buf + buflen;\
}\
rb_str_resize(result, buflen);\
buf = RSTRING(result)->ptr;\
p = buf + bdiff;\
pend = buf + buflen;\
} while (0)

#define BUFINIT() (\
Expand Down Expand Up @@ -2758,53 +2744,54 @@ file_expand_path(fname, dname, result)

#if USE_NTFS
*p = '\0';
if (!strpbrk(b = buf, "*?")) {
if ((s = strrdirsep(b = buf)) != 0 && !strpbrk(s, "*?")) {
size_t len;
WIN32_FIND_DATA wfd;
#ifdef __CYGWIN__
int lnk_added = 0;
int lnk_added = 0, is_symlink = 0;
struct stat st;
char w32buf[MAXPATHLEN], sep = 0;
p = 0;
char w32buf[MAXPATHLEN];
p = (char *)s;
if (lstat(buf, &st) == 0 && S_ISLNK(st.st_mode)) {
p = strrdirsep(buf);
if (!p) p = skipprefix(buf);
if (p) {
sep = *p;
*p = '\0';
}
is_symlink = 1;
*p = '\0';
}
if (cygwin_conv_to_win32_path(buf, w32buf) == 0) {
if (cygwin_conv_to_win32_path((*buf ? buf : "/"), w32buf) == 0) {
b = w32buf;
}
if (p) *p = sep;
else p = buf;
if (b == w32buf) {
if (is_symlink && b == w32buf) {
*p = '\\';
strlcat(w32buf, p, sizeof(w32buf));
len = strlen(p);
if (len > 4 && strcasecmp(p + len - 4, ".lnk") != 0) {
lnk_added = 1;
strlcat(w32buf, ".lnk", sizeof(w32buf));
}
}
*p = '/';
#endif
HANDLE h = FindFirstFile(b, &wfd);
if (h != INVALID_HANDLE_VALUE) {
FindClose(h);
p = strrdirsep(buf);
len = strlen(wfd.cFileName);
#ifdef __CYGWIN__
if (lnk_added && len > 4 &&
strcasecmp(wfd.cFileName + len - 4, ".lnk") == 0) {
len -= 4;
wfd.cFileName[len -= 4] = '\0';
}
#else
p = (char *)s;
#endif
if (!p) p = buf;
buflen = ++p - buf + len;
rb_str_resize(result, buflen);
++p;
BUFCHECK(bdiff + len >= buflen);
memcpy(p, wfd.cFileName, len + 1);
p += len;
}
#ifdef __CYGWIN__
else {
p += strlen(p);
}
#endif
}
#endif

Expand Down Expand Up @@ -3041,7 +3028,7 @@ rb_file_s_extname(klass, fname)
if (!p)
p = name;
else
p++;
name = ++p;

e = 0;
while (*p) {
Expand Down Expand Up @@ -3071,7 +3058,7 @@ rb_file_s_extname(klass, fname)
break;
p = CharNext(p);
}
if (!e || e+1 == p) /* no dot, or the only dot is first or end? */
if (!e || e == name || e+1 == p) /* no dot, or the only dot is first or end? */
return rb_str_new(0, 0);
extname = rb_str_new(e, p - e); /* keep the dot, too! */
OBJ_INFECT(extname, fname);
Expand Down
8 changes: 4 additions & 4 deletions version.h
@@ -1,15 +1,15 @@
#define RUBY_VERSION "1.8.6"
#define RUBY_RELEASE_DATE "2008-06-17"
#define RUBY_RELEASE_DATE "2008-06-18"
#define RUBY_VERSION_CODE 186
#define RUBY_RELEASE_CODE 20080617
#define RUBY_PATCHLEVEL 223
#define RUBY_RELEASE_CODE 20080618
#define RUBY_PATCHLEVEL 224

#define RUBY_VERSION_MAJOR 1
#define RUBY_VERSION_MINOR 8
#define RUBY_VERSION_TEENY 6
#define RUBY_RELEASE_YEAR 2008
#define RUBY_RELEASE_MONTH 6
#define RUBY_RELEASE_DAY 17
#define RUBY_RELEASE_DAY 18

#ifdef RUBY_EXTERN
RUBY_EXTERN const char ruby_version[];
Expand Down

0 comments on commit 7af00f1

Please sign in to comment.