Changeset ebb1489 in mainline for uspace/srv/taskmon/taskmon.c


Ignore:
Timestamp:
2024-10-13T08:23:40Z (8 weeks ago)
Author:
GitHub <noreply@…>
Children:
0472cf17
Parents:
2a0c827c (diff), b3b79981 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
git-author:
boba-buba <120932204+boba-buba@…> (2024-10-13 08:23:40)
git-committer:
GitHub <noreply@…> (2024-10-13 08:23:40)
Message:

Merge branch 'HelenOS:master' into topic/packet-capture

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/taskmon/taskmon.c

    r2a0c827c rebb1489  
    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.