* 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:
		| @@ -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. | ||||
|   | ||||
		Reference in New Issue
	
	Block a user