forked from Imagelibrary/rtems
Teach rtems_tarfs_load() about symlinks
This commit is contained in:
committed by
Sebastian Huber
parent
71d97c92e5
commit
9d9c42601a
@@ -24,6 +24,7 @@
|
||||
#include <sys/stat.h>
|
||||
#include <string.h>
|
||||
#include <tar.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <rtems/untar.h>
|
||||
|
||||
@@ -96,6 +97,7 @@ int rtems_tarfs_load(
|
||||
* Generate an IMFS node depending on the file type.
|
||||
* - For directories, just create directories as usual. IMFS
|
||||
* will take care of the rest.
|
||||
* - For symbolic links, create as usual
|
||||
* - For files, create a file node with special tarfs properties.
|
||||
*/
|
||||
if (linkflag == DIRTYPE) {
|
||||
@@ -136,6 +138,21 @@ int rtems_tarfs_load(
|
||||
nblocks = (((file_size) + 511) & ~511) / 512;
|
||||
offset += 512 * nblocks;
|
||||
}
|
||||
/*
|
||||
* Create a symbolic link
|
||||
*/
|
||||
else if (linkflag == SYMTYPE) {
|
||||
const char *linkto = hdr_ptr + 157;
|
||||
int len;
|
||||
|
||||
strncpy(full_filename, mountpoint, 255);
|
||||
if (full_filename[(len=strlen(full_filename))-1] != '/')
|
||||
strcat(full_filename, "/");
|
||||
++len;
|
||||
strncat(full_filename, filename, 256-len-1);
|
||||
|
||||
rv = symlink(linkto, full_filename);
|
||||
}
|
||||
}
|
||||
|
||||
rtems_filesystem_location_free( &rootloc );
|
||||
|
||||
@@ -57,10 +57,8 @@ void test_tarfs_load(void)
|
||||
test_cat( "/home/test_file", 0, 0 );
|
||||
|
||||
/******************/
|
||||
#if 0
|
||||
printf( "========= /symlink =========\n" );
|
||||
test_cat( "/symlink", 0, 0 );
|
||||
#endif
|
||||
}
|
||||
|
||||
rtems_task Init(
|
||||
|
||||
@@ -4,12 +4,18 @@ Loading tarfs image ... successful
|
||||
(0)This is a test of loading an RTEMS filesystem from an
|
||||
initial tar image.
|
||||
|
||||
*** Skipping symlink -- NOT CURRENTLY SUPPORTED ***
|
||||
========= /symlink =========
|
||||
(0)This is a test of loading an RTEMS filesystem from an
|
||||
initial tar image.
|
||||
|
||||
*************** Dump of Entire IMFS ***************
|
||||
/
|
||||
....dev/
|
||||
........ttyS0 (device 0, 0)
|
||||
........console (device 0, 0)
|
||||
........ttyS1 (device 0, 1)
|
||||
....home/
|
||||
........test_file (file 73 0x12022c)
|
||||
........test_file (file 73 0x390f8)
|
||||
....symlink links not printed
|
||||
*************** End of Dump ***************
|
||||
*** END OF TAR02 TEST ***
|
||||
|
||||
Reference in New Issue
Block a user