Annotation of qemu/roms/openbios/fs/ext2/ext2_open.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  *
                      3:  * (c) 2008-2009 Laurent Vivier <[email protected]>
                      4:  *
                      5:  * This file has been copied from EMILE, http://emile.sf.net
                      6:  *
                      7:  */
                      8: 
                      9: #include "libext2.h"
                     10: #include "ext2.h"
                     11: #include "ext2_utils.h"
                     12: 
                     13: ext2_FILE* ext2_open(ext2_VOLUME *volume, const char* pathname)
                     14: {
                     15:        ext2_FILE *file;
                     16:        struct ext2_inode *inode;
                     17:        int ino;
                     18:        int ret;
                     19: 
                     20:        ino = ext2_seek_name(volume, pathname);
                     21:        if (ino == 0)
                     22:                return NULL;
                     23: 
                     24:        inode = (struct ext2_inode*)malloc(sizeof(struct ext2_inode));
                     25:        if (inode == NULL)
                     26:                return NULL;
                     27: 
                     28:        ret = ext2_get_inode(volume, ino, inode);
                     29:        if (ret == -1) {
                     30:                free(inode);
                     31:                return NULL;
                     32:        }
                     33:        if (S_ISLNK(inode->i_mode)) {
                     34:                static char buffer[1024];
                     35:                int i, last = 0;
                     36:                strcpy(buffer, pathname);
                     37:                for (i = 0; buffer[i]; i++)
                     38:                        if (buffer[i] == '\\')
                     39:                                last = i;
                     40:                buffer[last] = '\\';
                     41:                strcpy(buffer + last + 1, (char*)inode->i_block);
                     42:                ino = ext2_seek_name((ext2_VOLUME*)volume, buffer);
                     43:                if (ino == 0) {
                     44:                        free(inode);
                     45:                        return NULL;
                     46:                }
                     47:                ret = ext2_get_inode((ext2_VOLUME*)volume, ino, inode);
                     48:                if (ret == -1) {
                     49:                        free(inode);
                     50:                        return NULL;
                     51:                }
                     52:        }
                     53: 
                     54:        file = (ext2_FILE*)malloc(sizeof(ext2_FILE));
                     55:        if (file == NULL) {
                     56:                free(inode);
                     57:                return NULL;
                     58:        }
                     59:        file->volume = volume;
                     60:        file->inode = inode;
                     61:        file->offset = 0;
                     62:        file->path = strdup(pathname);
                     63: 
                     64:        return file;
                     65: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.