Changeset dbae3b6 in mainline


Ignore:
Timestamp:
2024-08-23T19:57:52Z (4 months ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
e82b37e
Parents:
4af6fb1
Message:

Persistently store taskmon configuration.

Location:
uspace
Files:
4 edited

Legend:

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

    r4af6fb1 rdbae3b6  
    488488        srv_start("/srv/klog");
    489489        srv_start("/srv/fs/locfs");
    490         srv_start("/srv/taskmon");
    491490
    492491        if (!mount_locfs()) {
     
    503502        srv_start("/srv/bd/vbd");
    504503        srv_start("/srv/volsrv");
     504
     505        init_sysvol();
     506
     507        srv_start("/srv/taskmon");
    505508
    506509        srv_start("/srv/net/loopip");
     
    519522        srv_start("/srv/hid/output", HID_OUTPUT);
    520523        srv_start("/srv/audio/hound");
    521 
    522         init_sysvol();
    523524
    524525#ifdef CONFIG_WINSYS
  • uspace/srv/hid/display/display.c

    r4af6fb1 rdbae3b6  
    237237}
    238238
    239 /** Save seat to SIF node.
     239/** Save display configuration to SIF file.
    240240 *
    241241 * @param display Display
  • uspace/srv/taskmon/meson.build

    r4af6fb1 rdbae3b6  
    11#
    2 # Copyright (c) 2023 Jiri Svoboda
     2# Copyright (c) 2024 Jiri Svoboda
    33# All rights reserved.
    44#
     
    2727#
    2828
    29 deps = [ 'corecfg' ]
     29deps = [ 'corecfg', 'sif' ]
    3030src = files('taskmon.c')
  • uspace/srv/taskmon/taskmon.c

    r4af6fb1 rdbae3b6  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    3535 */
    3636
    37 #include <stdio.h>
    3837#include <async.h>
     38#include <errno.h>
     39#include <macros.h>
    3940#include <ipc/services.h>
    40 #include <task.h>
    4141#include <ipc/corecfg.h>
    4242#include <loc.h>
    43 #include <macros.h>
    44 #include <errno.h>
     43#include <sif.h>
     44#include <stdio.h>
     45#include <str.h>
    4546#include <str_error.h>
     47#include <task.h>
    4648
    4749#define NAME  "taskmon"
    4850
     51static const char *taskmon_cfg_path = "/w/cfg/taskmon.sif";
     52
    4953static bool write_core_files;
    5054
     55static errno_t taskmon_load_cfg(const char *);
     56static errno_t taskmon_save_cfg(const char *);
    5157static void corecfg_client_conn(ipc_call_t *, void *);
    5258
     
    103109        write_core_files = ipc_get_arg1(icall);
    104110        async_answer_0(icall, EOK);
     111        (void) taskmon_save_cfg(taskmon_cfg_path);
    105112}
    106113
     
    134141}
    135142
     143/** Load task monitor configuration from SIF file.
     144 *
     145 * @param cfgpath Configuration file path
     146 *
     147 * @return EOK on success or an error code
     148 */
     149static errno_t taskmon_load_cfg(const char *cfgpath)
     150{
     151        sif_doc_t *doc = NULL;
     152        sif_node_t *rnode;
     153        sif_node_t *ncorefiles;
     154        const char *ntype;
     155        const char *swrite;
     156        errno_t rc;
     157
     158        rc = sif_load(cfgpath, &doc);
     159        if (rc != EOK)
     160                goto error;
     161
     162        rnode = sif_get_root(doc);
     163        ncorefiles = sif_node_first_child(rnode);
     164        ntype = sif_node_get_type(ncorefiles);
     165        if (str_cmp(ntype, "corefiles") != 0) {
     166                rc = EIO;
     167                goto error;
     168        }
     169
     170        swrite = sif_node_get_attr(ncorefiles, "write");
     171        if (swrite == NULL) {
     172                rc = EIO;
     173                goto error;
     174        }
     175
     176        if (str_cmp(swrite, "y") == 0) {
     177                write_core_files = true;
     178        } else if (str_cmp(swrite, "n") == 0) {
     179                write_core_files = false;
     180        } else {
     181                rc = EIO;
     182                goto error;
     183        }
     184
     185        sif_delete(doc);
     186        return EOK;
     187error:
     188        if (doc != NULL)
     189                sif_delete(doc);
     190        return rc;
     191}
     192
     193/** Save task monitor configuration to SIF file.
     194 *
     195 * @param cfgpath Configuration file path
     196 *
     197 * @return EOK on success or an error code
     198 */
     199static errno_t taskmon_save_cfg(const char *cfgpath)
     200{
     201        sif_doc_t *doc = NULL;
     202        sif_node_t *rnode;
     203        sif_node_t *ncorefiles;
     204        errno_t rc;
     205
     206        rc = sif_new(&doc);
     207        if (rc != EOK)
     208                goto error;
     209
     210        rnode = sif_get_root(doc);
     211        rc = sif_node_append_child(rnode, "corefiles", &ncorefiles);
     212        if (rc != EOK)
     213                goto error;
     214
     215        rc = sif_node_set_attr(ncorefiles, "write",
     216            write_core_files ? "y" : "n");
     217        if (rc != EOK)
     218                goto error;
     219
     220        rc = sif_save(doc, cfgpath);
     221        if (rc != EOK)
     222                goto error;
     223
     224        sif_delete(doc);
     225        return EOK;
     226error:
     227        if (doc != NULL)
     228                sif_delete(doc);
     229        return rc;
     230}
     231
    136232int main(int argc, char *argv[])
    137233{
     
    145241        write_core_files = false;
    146242#endif
     243        (void) taskmon_load_cfg(taskmon_cfg_path);
     244
    147245        if (async_event_subscribe(EVENT_FAULT, fault_event, NULL) != EOK) {
    148246                printf("%s: Error registering fault notifications.\n", NAME);
Note: See TracChangeset for help on using the changeset viewer.