File indexing completed on 2025-05-11 08:24:15
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039 #ifdef HAVE_CONFIG_H
0040 #include "config.h"
0041 #endif
0042
0043 #if defined(RTEMS_NEWLIB) && !defined(HAVE__RENAME_R)
0044
0045 #include <stdio.h>
0046
0047 #include <rtems/libio_.h>
0048
0049
0050
0051
0052 int _rename_r(
0053 struct _reent *ptr RTEMS_UNUSED,
0054 const char *old,
0055 const char *new
0056 )
0057 {
0058 int rv = 0;
0059 rtems_filesystem_eval_path_context_t old_ctx;
0060 int old_eval_flags = 0;
0061 rtems_filesystem_location_info_t old_parentloc;
0062 int old_parent_eval_flags = RTEMS_FS_PERMS_WRITE
0063 | RTEMS_FS_FOLLOW_HARD_LINK;
0064 const rtems_filesystem_location_info_t *old_currentloc =
0065 rtems_filesystem_eval_path_start_with_parent(
0066 &old_ctx,
0067 old,
0068 old_eval_flags,
0069 &old_parentloc,
0070 old_parent_eval_flags
0071 );
0072 rtems_filesystem_eval_path_context_t new_ctx;
0073
0074
0075 int new_eval_flags = RTEMS_FS_FOLLOW_HARD_LINK
0076 | RTEMS_FS_MAKE
0077 | RTEMS_FS_EXCLUSIVE;
0078
0079 const rtems_filesystem_location_info_t *new_currentloc =
0080 rtems_filesystem_eval_path_start( &new_ctx, new, new_eval_flags );
0081
0082 rv = rtems_filesystem_location_exists_in_same_instance_as(
0083 old_currentloc,
0084 new_currentloc
0085 );
0086 if ( rv == 0 ) {
0087 rv = (*new_currentloc->mt_entry->ops->rename_h)(
0088 &old_parentloc,
0089 old_currentloc,
0090 new_currentloc,
0091 rtems_filesystem_eval_path_get_token( &new_ctx ),
0092 rtems_filesystem_eval_path_get_tokenlen( &new_ctx )
0093 );
0094 }
0095
0096 rtems_filesystem_eval_path_cleanup_with_parent( &old_ctx, &old_parentloc );
0097 rtems_filesystem_eval_path_cleanup( &new_ctx );
0098
0099 return rv;
0100 }
0101 #endif