source:
rtems/cpukit/libcsupport/src/fchdir.c
@
9c3fa30
Last change on this file since 9c3fa30 was 9c3fa30, checked in by Joel Sherrill <joel.sherrill@…>, on 09/28/00 at 20:19:23 | |
---|---|
|
|
File size: 1.5 KB |
Line | |
---|---|
1 | /* |
2 | * fchdir() - compatible with SVr4, 4.4BSD and X/OPEN - Change Directory |
3 | * |
4 | * COPYRIGHT (c) 1989-2000. |
5 | * On-Line Applications Research Corporation (OAR). |
6 | * |
7 | * The license and distribution terms for this file may be |
8 | * found in the file LICENSE in this distribution or at |
9 | * http://www.OARcorp.com/rtems/license.html. |
10 | * |
11 | * $Id$ |
12 | */ |
13 | |
14 | #include <unistd.h> |
15 | #include <sys/stat.h> |
16 | #include <errno.h> |
17 | |
18 | #include <rtems.h> |
19 | #include <rtems/libio.h> |
20 | #include "libio_.h" |
21 | |
22 | int fchdir( |
23 | int fd |
24 | ) |
25 | { |
26 | rtems_libio_t *iop; |
27 | |
28 | rtems_libio_check_fd( fd ); |
29 | iop = rtems_libio_iop( fd ); |
30 | rtems_libio_check_is_open(iop); |
31 | |
32 | /* |
33 | * Now process the fchmod(). |
34 | */ |
35 | |
36 | rtems_libio_check_permissions( iop, LIBIO_FLAGS_READ ); |
37 | |
38 | /* |
39 | * Verify you can change directory into this node. |
40 | */ |
41 | |
42 | if ( !iop->pathinfo.ops ) { |
43 | set_errno_and_return_minus_one( ENOTSUP ); |
44 | } |
45 | |
46 | if ( !iop->pathinfo.ops->node_type_h ) { |
47 | set_errno_and_return_minus_one( ENOTSUP ); |
48 | } |
49 | |
50 | if ( (*iop->pathinfo.ops->node_type_h)( &iop->pathinfo ) != |
51 | RTEMS_FILESYSTEM_DIRECTORY ) { |
52 | set_errno_and_return_minus_one( ENOTDIR ); |
53 | } |
54 | |
55 | rtems_filesystem_freenode( &rtems_filesystem_current ); |
56 | |
57 | /* |
58 | * FIXME : I feel there should be another call to |
59 | * actually take into account the extra reference to |
60 | * this node which we are making here. I can |
61 | * see the freenode interface but do not see |
62 | * allocnode node interface. It maybe node_type. |
63 | */ |
64 | |
65 | rtems_filesystem_current = iop->pathinfo; |
66 | |
67 | return 0; |
68 | } |
69 |
Note: See TracBrowser
for help on using the repository browser.