diff options
Diffstat (limited to '')
-rw-r--r-- | c/src/exec/libfs/src/imfs/imfs_symlink.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/c/src/exec/libfs/src/imfs/imfs_symlink.c b/c/src/exec/libfs/src/imfs/imfs_symlink.c new file mode 100644 index 0000000000..0d3ebbd670 --- /dev/null +++ b/c/src/exec/libfs/src/imfs/imfs_symlink.c @@ -0,0 +1,60 @@ +/* + * IMFS_symlink + * + * The following rouine creates a new symbolic link node under parent + * with the name given in name. The node is set to point to the node at + * to_loc. + * + * COPYRIGHT (c) 1989-1998. + * On-Line Applications Research Corporation (OAR). + * Copyright assigned to U.S. Government, 1994. + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + */ + +#include <errno.h> +#include "imfs.h" +#include "libio_.h" + +int IMFS_symlink( + rtems_filesystem_location_info_t *parent_loc, + const char *link_name, + const char *node_name +) +{ + IMFS_types_union info; + IMFS_jnode_t *new_node; + char new_name[ NAME_MAX + 1 ]; + int i; + + /* + * Remove any separators at the end of the string. + */ + + IMFS_get_token( node_name, new_name, &i ); + + info.sym_link.name = link_name; + + /* + * Create a new link node. + */ + + new_node = IMFS_create_node( + parent_loc, + IMFS_SYM_LINK, + new_name, + ( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )), + &info + ); + + if ( !new_node ) + set_errno_and_return_minus_one( ENOMEM ); + + return 0; +} + + |