mirror of
https://github.com/vivier/EMILE.git
synced 2025-02-01 19:30:36 +00:00
Manage one level software link
This commit is contained in:
parent
27f4864fac
commit
3023f1af53
@ -5,6 +5,12 @@
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "libext2.h"
|
||||
#include "ext2.h"
|
||||
@ -30,6 +36,26 @@ stream_FILE* ext2_open(stream_VOLUME *volume, char* pathname)
|
||||
free(inode);
|
||||
return NULL;
|
||||
}
|
||||
if (S_ISLNK(inode->i_mode)) {
|
||||
static char buffer[1024];
|
||||
int i, last = 0;
|
||||
strcpy(buffer, pathname);
|
||||
for (i = 0; buffer[i]; i++)
|
||||
if (buffer[i] == '/')
|
||||
last = i;
|
||||
buffer[last] = '/';
|
||||
strcpy(buffer + last + 1, (char*)inode->i_block);
|
||||
ino = ext2_seek_name((ext2_VOLUME*)volume, buffer);
|
||||
if (ino == 0) {
|
||||
free(inode);
|
||||
return NULL;
|
||||
}
|
||||
ret = ext2_get_inode((ext2_VOLUME*)volume, ino, inode);
|
||||
if (ret == -1) {
|
||||
free(inode);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
file = (ext2_FILE*)malloc(sizeof(ext2_FILE));
|
||||
if (file == NULL) {
|
||||
|
@ -4,6 +4,9 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
@ -137,8 +140,12 @@ int ext2_get_inode(ext2_VOLUME* volume,
|
||||
inode->i_links_count = __le16_to_cpu(le_inode->i_links_count);
|
||||
inode->i_blocks = __le32_to_cpu(le_inode->i_blocks);
|
||||
inode->i_flags = __le32_to_cpu(le_inode->i_flags);
|
||||
for (i = 0; i < EXT2_N_BLOCKS; i++)
|
||||
inode->i_block[i] = __le32_to_cpu(le_inode->i_block[i]);
|
||||
if (S_ISLNK(inode->i_mode)) {
|
||||
memcpy(inode->i_block, le_inode->i_block, EXT2_N_BLOCKS * 4);
|
||||
} else {
|
||||
for (i = 0; i < EXT2_N_BLOCKS; i++)
|
||||
inode->i_block[i] = __le32_to_cpu(le_inode->i_block[i]);
|
||||
}
|
||||
inode->i_generation = __le32_to_cpu(le_inode->i_generation);
|
||||
inode->i_file_acl = __le32_to_cpu(le_inode->i_file_acl);
|
||||
inode->i_dir_acl = __le32_to_cpu(le_inode->i_dir_acl);
|
||||
|
Loading…
x
Reference in New Issue
Block a user