+2005-10-11 Christopher Faylor <cgf@timesys.com>
+
+ * (symlink_info::set_error): Change to return bool if input error
+ should be ignored.
+ (symlink_info::check): Treat path as a normal file if set_error returns
+ false.
+
2005-10-03 Christopher Faylor <cgf@timesys.com>
* cygheap.h (class process_lock): New class.
bool case_check (char *path);
int check_sysfile (const char *path, HANDLE h);
int check_shortcut (const char *path, HANDLE h);
- void set_error (int);
+ bool set_error (int);
};
muto NO_COPY cwdstuff::cwd_lock;
}
}
-void
+bool
symlink_info::set_error (int in_errno)
{
- if ((pflags & PATH_NO_ACCESS_CHECK) && in_errno != ENAMETOOLONG)
- return;
- error = in_errno;
+ bool res;
+ if (!(pflags & PATH_NO_ACCESS_CHECK) || in_errno == ENAMETOOLONG || in_errno == EIO)
+ {
+ error = in_errno;
+ res = true;
+ }
+ else if (in_errno == ENOENT)
+ res = true;
+ else
+ {
+ fileattr = FILE_ATTRIBUTE_NORMAL;
+ res = false;
+ }
+ return res;
}
bool
fileattr = 0;
goto file_not_symlink;
}
- set_error (geterrno_from_win_error (win_error, EACCES));
- continue;
+ if (set_error (geterrno_from_win_error (win_error, EACCES)))
+ continue;
}
ext_tacked_on = !!*ext_here;