Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/init/init.c

    ra35b458 r75701004  
    4848#include <config.h>
    4949#include <io/logctl.h>
     50#include "untar.h"
    5051#include "init.h"
    5152
     
    8384        switch (rc) {
    8485        case EOK:
    85                 if (dev != NULL)
     86                if ((dev != NULL) && (str_cmp(dev, "") != 0))
    8687                        printf("%s: %s mounted on %s (%s at %s)\n", NAME, desc, mntpt,
    8788                            fstype, dev);
     
    107108}
    108109
    109 /** Mount root filesystem
    110  *
    111  * The operation blocks until the root filesystem
     110/** Mount root file system
     111 *
     112 * The operation blocks until the root file system
    112113 * server is ready for mounting.
    113114 *
    114  * @param[in] fstype Root filesystem type.
     115 * @param[in] fstype Root file system type.
    115116 *
    116117 * @return True on success.
     
    120121static bool mount_root(const char *fstype)
    121122{
    122         const char *opts = "";
    123 
    124         if (str_cmp(fstype, "tmpfs") == 0)
    125                 opts = "restore";
    126 
    127         errno_t rc = vfs_mount_path(ROOT_MOUNT_POINT, fstype, ROOT_DEVICE, opts,
     123        const char *root_device = "";
     124
     125        if (str_cmp(fstype, "tmpfs") != 0)
     126                root_device = ROOT_DEVICE;
     127
     128        errno_t rc = vfs_mount_path(ROOT_MOUNT_POINT, fstype, root_device, "",
    128129            IPC_FLAG_BLOCKING, 0);
    129130        if (rc == EOK)
    130131                logctl_set_root();
    131         return mount_report("Root filesystem", ROOT_MOUNT_POINT, fstype,
    132             ROOT_DEVICE, rc);
    133 }
    134 
    135 /** Mount locfs filesystem
    136  *
    137  * The operation blocks until the locfs filesystem
     132
     133        bool ret = mount_report("Root file system", ROOT_MOUNT_POINT, fstype,
     134            root_device, rc);
     135
     136        rc = vfs_cwd_set(ROOT_MOUNT_POINT);
     137        if (rc != EOK) {
     138                printf("%s: Unable to set current directory to %s (%s)\n",
     139                    NAME, ROOT_MOUNT_POINT, str_error(ret));
     140                return false;
     141        }
     142
     143        if ((ret) && (str_cmp(fstype, "tmpfs") == 0)) {
     144                printf("%s: Extracting root file system archive\n", NAME);
     145                ret = bd_untar(ROOT_DEVICE);
     146        }
     147
     148        return ret;
     149}
     150
     151/** Mount locfs file system
     152 *
     153 * The operation blocks until the locfs file system
    138154 * server is ready for mounting.
    139155 *
     
    146162        errno_t rc = vfs_mount_path(LOCFS_MOUNT_POINT, LOCFS_FS_TYPE, "", "",
    147163            IPC_FLAG_BLOCKING, 0);
    148         return mount_report("Location service filesystem", LOCFS_MOUNT_POINT,
     164        return mount_report("Location service file system", LOCFS_MOUNT_POINT,
    149165            LOCFS_FS_TYPE, NULL, rc);
    150166}
     
    301317{
    302318        errno_t rc = vfs_mount_path(TMPFS_MOUNT_POINT, TMPFS_FS_TYPE, "", "", 0, 0);
    303         return mount_report("Temporary filesystem", TMPFS_MOUNT_POINT,
     319        return mount_report("Temporary file system", TMPFS_MOUNT_POINT,
    304320            TMPFS_FS_TYPE, NULL, rc);
    305321}
Note: See TracChangeset for help on using the changeset viewer.