* cygwin.din: Add fchdir symbols.

* path.cc (chdir): Guard against invalid parameter.
         (fchdir): New function.
         * include/cygwin/version.h: Bump API minor version to 40.
         * uinfo.cc (internal_getlogin): Remove unused variable.
This commit is contained in:
Corinna Vinschen 2001-06-10 10:00:21 +00:00
parent d4217d5680
commit 463513f0e2
5 changed files with 36 additions and 10 deletions

View File

@ -1,3 +1,11 @@
Sun Jun 10 11:56:00 2001 Corinna Vinschen <corinna@vinschen.de>
* cygwin.din: Add fchdir symbols.
* path.cc (chdir): Guard against invalid parameter.
(fchdir): New function.
* include/cygwin/version.h: Bump API minor version to 40.
* uinfo.cc (internal_getlogin): Remove unused variable.
Sat Jun 9 23:20:00 2001 Corinna Vinschen <corinna@vinschen.de> Sat Jun 9 23:20:00 2001 Corinna Vinschen <corinna@vinschen.de>
* syscalls.cc (seteuid): Set environment variables USERNAME and * syscalls.cc (seteuid): Set environment variables USERNAME and

View File

@ -191,6 +191,8 @@ _f_atan2
__f_atan2 = _f_atan2 __f_atan2 = _f_atan2
_f_atan2f _f_atan2f
__f_atan2f = _f_atan2f __f_atan2f = _f_atan2f
fchdir
_fchdir = fchdir
fchmod fchmod
_fchmod = fchmod _fchmod = fchmod
fchown fchown

View File

@ -133,10 +133,11 @@ details. */
37: [f]pathconv support _PC_POSIX_PERMISSIONS and _PC_POSIX_SECURITY 37: [f]pathconv support _PC_POSIX_PERMISSIONS and _PC_POSIX_SECURITY
38: vscanf, vscanf_r, and random pthread functions 38: vscanf, vscanf_r, and random pthread functions
39: asctime_r, ctime_r, gmtime_r, localtime_r 39: asctime_r, ctime_r, gmtime_r, localtime_r
40: fchdir
*/ */
#define CYGWIN_VERSION_API_MAJOR 0 #define CYGWIN_VERSION_API_MAJOR 0
#define CYGWIN_VERSION_API_MINOR 39 #define CYGWIN_VERSION_API_MINOR 40
/* There is also a compatibity version number associated with the /* There is also a compatibity version number associated with the
shared memory regions. It is incremented when incompatible shared memory regions. It is incremented when incompatible

View File

@ -2994,8 +2994,14 @@ int
chdir (const char *dir) chdir (const char *dir)
{ {
MALLOC_CHECK; MALLOC_CHECK;
syscall_printf ("dir %s", dir);
path_conv path (dir, PC_FULL | PC_SYM_FOLLOW); path_conv path (dir, PC_FULL | PC_SYM_FOLLOW);
if (path.error)
{
set_errno (path.error);
syscall_printf ("-1 = chdir (%s)", dir);
return -1;
}
syscall_printf ("dir %s", dir);
char *s; char *s;
/* Incredibly. Windows allows you to specify a path with trailing /* Incredibly. Windows allows you to specify a path with trailing
@ -3005,13 +3011,6 @@ chdir (const char *dir)
for (s = strchr (dir, '\0'); --s >= dir && isspace ((unsigned int) (*s & 0xff)); ) for (s = strchr (dir, '\0'); --s >= dir && isspace ((unsigned int) (*s & 0xff)); )
*s = '\0'; *s = '\0';
if (path.error)
{
set_errno (path.error);
syscall_printf ("-1 = chdir (%s)", dir);
return -1;
}
/* Look for trailing path component consisting entirely of dots. This /* Look for trailing path component consisting entirely of dots. This
is needed only in case of chdir since Windows simply ignores count is needed only in case of chdir since Windows simply ignores count
of dots > 2 here instead of returning an error code. Counts of dots of dots > 2 here instead of returning an error code. Counts of dots
@ -3068,6 +3067,23 @@ chdir (const char *dir)
return res; return res;
} }
extern "C"
int
fchdir (int fd)
{
sigframe thisframe (mainthread);
if (cygheap->fdtab.not_open (fd))
{
syscall_printf ("-1 = fchdir (%d)", fd);
set_errno (EBADF);
return -1;
}
int ret = chdir (cygheap->fdtab[fd]->get_name ());
syscall_printf ("%d = fchdir (%d)", ret, fd);
return ret;
}
/******************** Exported Path Routines *********************/ /******************** Exported Path Routines *********************/
/* Cover functions to the path conversion routines. /* Cover functions to the path conversion routines.

View File

@ -153,7 +153,6 @@ internal_getlogin (cygheap_user &user)
cygsid gsid (NO_SID); cygsid gsid (NO_SID);
if (ret) if (ret)
{ {
char dom[INTERNET_MAX_HOST_NAME_LENGTH + 1];
cygsid psid; cygsid psid;
for (int pidx = 0; (pw = internal_getpwent (pidx)); ++pidx) for (int pidx = 0; (pw = internal_getpwent (pidx)); ++pidx)