2 Copyright © 2008-2013, The AROS Development Team. All rights reserved.
6 #include "__posixc_intbase.h"
9 #include <exec/types.h>
11 #include <proto/dos.h>
12 #include <aros/symbolsets.h>
15 #include <aros/debug.h>
17 /*****************************************************************************
28 Change the current working directory to the directory given as an open
32 fd - File descriptor of the directory to change to.
35 If the current directory was changed successfully, zero is returned.
36 Otherwise, -1 is returned and errno set apropriately.
39 At program exit, the current working directory will be changed back
40 to the one that was current when the program first started. If you
41 do not desire this behaviour, use dos.library/CurrentDir() instead.
51 ******************************************************************************/
53 struct PosixCIntBase
*PosixCBase
=
54 (struct PosixCIntBase
*)__aros_getbase_PosixCBase();
59 fdesc
*fdc
= __getfdesc(fd
);
60 if (!(fdc
->fcb
->privflags
& _FCB_ISDIR
))
66 if ( __get_default_file(fd
, (long*) &handle
) != 0 )
72 newlock
= DupLock(handle
);
74 if( newlock
== BNULL
)
76 errno
= __stdc_ioerr2errno( IoErr() );
79 oldlock
= CurrentDir( newlock
);
81 if( PosixCBase
->cd_changed
)
87 PosixCBase
->cd_changed
= TRUE
;
88 PosixCBase
->cd_lock
= oldlock
;
93 if( newlock
!= BNULL
)