Changes in uspace/app/init/init.c [e229148:1bbc6dc] in mainline


Ignore:
File:
1 edited

Legend:

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

    re229148 r1bbc6dc  
    11/*
     2 * Copyright (c) 2024 Jiri Svoboda
    23 * Copyright (c) 2005 Martin Decky
    34 * All rights reserved.
     
    3536
    3637#include <fibril.h>
     38#include <futil.h>
    3739#include <stdio.h>
    3840#include <stdarg.h>
     
    7880static const char *sys_dirs[] = {
    7981        "/w/cfg",
    80         "/w/data"
     82        "/w/data",
     83        NULL,
    8184};
    8285
     
    351354        vol_info_t vinfo;
    352355        volume_id_t *volume_ids = NULL;
     356        service_id_t *part_ids = NULL;
     357        vol_part_info_t pinfo;
    353358        size_t nvols;
     359        size_t nparts;
     360        bool sv_mounted;
    354361        size_t i;
    355362        errno_t rc;
     
    385392        }
    386393
    387         vol_destroy(vol);
    388394        free(volume_ids);
     395        volume_ids = NULL;
    389396
    390397        if (!found_cfg) {
     
    397404                                printf("%s: Error creating directory '%s'.\n",
    398405                                    NAME, *cp);
    399                                 return rc;
     406                                goto error;
    400407                        }
    401408
    402409                        ++cp;
    403410                }
     411
     412                /* Copy initial configuration files */
     413                rc = futil_rcopy_contents("/cfg", "/w/cfg");
     414                if (rc != EOK)
     415                        goto error;
    404416        } else {
    405417                printf("%s: System volume is configured.\n", NAME);
    406         }
    407 
     418
     419                /* Wait until system volume is mounted */
     420                sv_mounted = false;
     421
     422                while (true) {
     423                        rc = vol_get_parts(vol, &part_ids, &nparts);
     424                        if (rc != EOK) {
     425                                printf("Error getting list of volumes.\n");
     426                                goto error;
     427                        }
     428
     429                        for (i = 0; i < nparts; i++) {
     430                                rc = vol_part_info(vol, part_ids[i], &pinfo);
     431                                if (rc != EOK) {
     432                                        printf("Error getting partition "
     433                                            "information.\n");
     434                                        rc = EIO;
     435                                        goto error;
     436                                }
     437
     438                                if (str_cmp(pinfo.cur_mp, "/w") == 0) {
     439                                        sv_mounted = true;
     440                                        break;
     441                                }
     442                        }
     443
     444                        if (sv_mounted)
     445                                break;
     446
     447                        free(part_ids);
     448                        part_ids = NULL;
     449
     450                        fibril_sleep(1);
     451                        printf("Sleeping(1) for system volume.\n");
     452                }
     453        }
     454
     455        vol_destroy(vol);
    408456        return EOK;
    409457error:
     
    411459        if (volume_ids != NULL)
    412460                free(volume_ids);
     461        if (part_ids != NULL)
     462                free(part_ids);
    413463
    414464        return rc;
     
    438488        srv_start("/srv/klog");
    439489        srv_start("/srv/fs/locfs");
    440         srv_start("/srv/taskmon");
    441490
    442491        if (!mount_locfs()) {
     
    454503        srv_start("/srv/volsrv");
    455504
     505        init_sysvol();
     506
     507        srv_start("/srv/taskmon");
     508
    456509        srv_start("/srv/net/loopip");
    457510        srv_start("/srv/net/ethip");
     511        srv_start("/srv/net/dhcp");
    458512        srv_start("/srv/net/inetsrv");
    459513        srv_start("/srv/net/tcp");
    460514        srv_start("/srv/net/udp");
    461515        srv_start("/srv/net/dnsrsrv");
    462         srv_start("/srv/net/dhcp");
    463         srv_start("/srv/net/nconfsrv");
    464516
    465517        srv_start("/srv/clipboard");
     
    469521        srv_start("/srv/hid/output", HID_OUTPUT);
    470522        srv_start("/srv/audio/hound");
    471 
    472         init_sysvol();
    473523
    474524#ifdef CONFIG_WINSYS
Note: See TracChangeset for help on using the changeset viewer.