Changeset b6035ba in mainline for uspace/srv/fs/tmpfs/tmpfs_dump.c


Ignore:
Timestamp:
2009-05-05T22:09:13Z (16 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
770d281
Parents:
c852f4be
Message:

Introduce the concept of FS nodes. A FS node is a typed abstraction of
file-system-specific node type. It replaces the void * in libfs interfaces
and is suitable for holding various information such as mount point data.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/fs/tmpfs/tmpfs_dump.c

    rc852f4be rb6035ba  
    5656static bool
    5757tmpfs_restore_recursion(int dev, off_t *bufpos, size_t *buflen, off_t *pos,
    58     tmpfs_dentry_t *parent)
     58    fs_node_t *pfn)
    5959{
    6060        struct rdentry entry;
     
    6464        do {
    6565                char *fname;
    66                 tmpfs_dentry_t *node;
     66                fs_node_t *fn;
     67                tmpfs_dentry_t *nodep;
    6768                uint32_t size;
    6869               
     
    8182                                return false;
    8283                       
    83                         node = (tmpfs_dentry_t *) ops->create(dev, L_FILE);
    84                         if (node == NULL) {
     84                        fn = ops->create(dev, L_FILE);
     85                        if (fn == NULL) {
    8586                                free(fname);
    8687                                return false;
     
    8990                        if (block_read(dev, bufpos, buflen, pos, fname,
    9091                            entry.len, TMPFS_BLOCK_SIZE) != EOK) {
    91                                 ops->destroy((void *) node);
     92                                ops->destroy(fn);
    9293                                free(fname);
    9394                                return false;
     
    9596                        fname[entry.len] = 0;
    9697                       
    97                         rc = ops->link((void *) parent, (void *) node, fname);
     98                        rc = ops->link(pfn, fn, fname);
    9899                        if (rc != EOK) {
    99                                 ops->destroy((void *) node);
     100                                ops->destroy(fn);
    100101                                free(fname);
    101102                                return false;
     
    109110                        size = uint32_t_le2host(size);
    110111                       
    111                         node->data = malloc(size);
    112                         if (node->data == NULL)
     112                        nodep = TMPFS_NODE(fn);
     113                        nodep->data = malloc(size);
     114                        if (nodep->data == NULL)
    113115                                return false;
    114116                       
    115                         node->size = size;
    116                         if (block_read(dev, bufpos, buflen, pos, node->data,
     117                        nodep->size = size;
     118                        if (block_read(dev, bufpos, buflen, pos, nodep->data,
    117119                            size, TMPFS_BLOCK_SIZE) != EOK)
    118120                                return false;
     
    124126                                return false;
    125127                       
    126                         node = (tmpfs_dentry_t *) ops->create(dev, L_DIRECTORY);
    127                         if (node == NULL) {
     128                        fn = ops->create(dev, L_DIRECTORY);
     129                        if (fn == NULL) {
    128130                                free(fname);
    129131                                return false;
     
    132134                        if (block_read(dev, bufpos, buflen, pos, fname,
    133135                            entry.len, TMPFS_BLOCK_SIZE) != EOK) {
    134                                 ops->destroy((void *) node);
     136                                ops->destroy(fn);
    135137                                free(fname);
    136138                                return false;
     
    138140                        fname[entry.len] = 0;
    139141
    140                         rc = ops->link((void *) parent, (void *) node, fname);
     142                        rc = ops->link(pfn, fn, fname);
    141143                        if (rc != EOK) {
    142                                 ops->destroy((void *) node);
     144                                ops->destroy(fn);
    143145                                free(fname);
    144146                                return false;
     
    147149                       
    148150                        if (!tmpfs_restore_recursion(dev, bufpos, buflen, pos,
    149                             node))
     151                            fn))
    150152                                return false;
    151153                       
Note: See TracChangeset for help on using the changeset viewer.