* 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:
		@@ -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>
 | 
			
		||||
 | 
			
		||||
	* syscalls.cc (seteuid): Set environment variables USERNAME and
 | 
			
		||||
 
 | 
			
		||||
@@ -191,6 +191,8 @@ _f_atan2
 | 
			
		||||
__f_atan2 = _f_atan2
 | 
			
		||||
_f_atan2f
 | 
			
		||||
__f_atan2f = _f_atan2f
 | 
			
		||||
fchdir
 | 
			
		||||
_fchdir = fchdir
 | 
			
		||||
fchmod
 | 
			
		||||
_fchmod = fchmod
 | 
			
		||||
fchown
 | 
			
		||||
 
 | 
			
		||||
@@ -133,10 +133,11 @@ details. */
 | 
			
		||||
       37: [f]pathconv support _PC_POSIX_PERMISSIONS and _PC_POSIX_SECURITY
 | 
			
		||||
       38: vscanf, vscanf_r, and random pthread functions
 | 
			
		||||
       39: asctime_r, ctime_r, gmtime_r, localtime_r
 | 
			
		||||
       40: fchdir
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
#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
 | 
			
		||||
	shared memory regions.  It is incremented when incompatible
 | 
			
		||||
 
 | 
			
		||||
@@ -2994,8 +2994,14 @@ int
 | 
			
		||||
chdir (const char *dir)
 | 
			
		||||
{
 | 
			
		||||
  MALLOC_CHECK;
 | 
			
		||||
  syscall_printf ("dir %s", dir);
 | 
			
		||||
  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;
 | 
			
		||||
  /* 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)); )
 | 
			
		||||
    *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
 | 
			
		||||
     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
 | 
			
		||||
@@ -3068,6 +3067,23 @@ chdir (const char *dir)
 | 
			
		||||
  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 *********************/
 | 
			
		||||
 | 
			
		||||
/* Cover functions to the path conversion routines.
 | 
			
		||||
 
 | 
			
		||||
@@ -153,7 +153,6 @@ internal_getlogin (cygheap_user &user)
 | 
			
		||||
	  cygsid gsid (NO_SID);
 | 
			
		||||
	  if (ret)
 | 
			
		||||
	    {
 | 
			
		||||
	      char dom[INTERNET_MAX_HOST_NAME_LENGTH + 1];
 | 
			
		||||
	      cygsid psid;
 | 
			
		||||
 | 
			
		||||
	      for (int pidx = 0; (pw = internal_getpwent (pidx)); ++pidx)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user