Changeset 84d29a2 in mainline for uspace/lib/tbarcfg/src/tbarcfg.c


Ignore:
Timestamp:
2023-11-27T13:09:59Z (6 months ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, topic/simplify-dev-export
Children:
ef4d684
Parents:
8a43f01
Message:

Libtbarcfg needs work

Add tbarcfg_create(), smenu_entry_create(), smenu_entry_destroy().
Fill in and improve unit tests.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/tbarcfg/src/tbarcfg.c

    r8a43f01 r84d29a2  
    4141#include "../private/tbarcfg.h"
    4242
     43/** Create taskbar configuration.
     44 *
     45 * @param repopath Pathname of the new menu repository
     46 * @param rtbcfg Place to store pointer to taskbar configuration
     47 * @return EOK on success or an error code
     48 */
     49errno_t tbarcfg_create(const char *repopath, tbarcfg_t **rtbcfg)
     50{
     51        tbarcfg_t *tbcfg;
     52        sif_sess_t *repo = NULL;
     53        sif_node_t *rnode;
     54        errno_t rc;
     55        sif_trans_t *trans = NULL;
     56
     57        tbcfg = calloc(1, sizeof(tbarcfg_t));
     58        if (tbcfg == NULL) {
     59                rc = ENOMEM;
     60                goto error;
     61        }
     62
     63        list_initialize(&tbcfg->entries);
     64
     65        rc = sif_create(repopath, &repo);
     66        if (rc != EOK)
     67                goto error;
     68
     69        tbcfg->repo = repo;
     70
     71        rnode = sif_get_root(repo);
     72
     73        rc = sif_trans_begin(repo, &trans);
     74        if (rc != EOK)
     75                goto error;
     76
     77        rc = sif_node_append_child(trans, rnode, "entries", &tbcfg->nentries);
     78        if (rc != EOK)
     79                goto error;
     80
     81        rc = sif_trans_end(trans);
     82        if (rc != EOK)
     83                goto error;
     84
     85        *rtbcfg = tbcfg;
     86        return EOK;
     87error:
     88        if (trans != NULL)
     89                sif_trans_abort(trans);
     90        if (repo != NULL)
     91                sif_close(repo);
     92        if (tbcfg != NULL)
     93                free(tbcfg);
     94        return rc;
     95}
     96
    4397/** Open taskbar configuration.
    4498 *
     
    52106        sif_sess_t *repo = NULL;
    53107        sif_node_t *rnode;
    54         sif_node_t *nentries;
    55108        sif_node_t *nentry;
    56109        const char *ntype;
     
    74127
    75128        rnode = sif_get_root(repo);
    76         nentries = sif_node_first_child(rnode);
    77         ntype = sif_node_get_type(nentries);
     129        tbcfg->nentries = sif_node_first_child(rnode);
     130        ntype = sif_node_get_type(tbcfg->nentries);
    78131        if (str_cmp(ntype, "entries") != 0) {
    79132                rc = EIO;
     
    81134        }
    82135
    83         nentry = sif_node_first_child(nentries);
     136        nentry = sif_node_first_child(tbcfg->nentries);
    84137        while (nentry != NULL) {
    85138                ntype = sif_node_get_type(nentry);
     
    238291errno_t smenu_entry_save(smenu_entry_t *entry)
    239292{
    240         sif_trans_t *trans;
     293        sif_trans_t *trans = NULL;
    241294        errno_t rc;
    242295
     
    329382}
    330383
     384/** Create new start menu entry.
     385 *
     386 * @param smenu Start menu
     387 * @param nentry Backing SIF node
     388 * @param caption Caption
     389 * @param cmd Command to run
     390 */
     391errno_t smenu_entry_create(tbarcfg_t *smenu, const char *caption,
     392    const char *cmd)
     393{
     394        sif_node_t *nentry;
     395        errno_t rc;
     396        sif_trans_t *trans = NULL;
     397
     398        rc = sif_trans_begin(smenu->repo, &trans);
     399        if (rc != EOK)
     400                goto error;
     401
     402        rc = sif_node_append_child(trans, smenu->nentries, "entry",
     403            &nentry);
     404        if (rc != EOK)
     405                goto error;
     406
     407        rc = smenu_entry_new(smenu, nentry, caption, cmd);
     408        if (rc != EOK)
     409                goto error;
     410
     411        rc = sif_trans_end(trans);
     412        if (rc != EOK)
     413                goto error;
     414
     415        return EOK;
     416error:
     417        if (trans != NULL)
     418                sif_trans_abort(trans);
     419        return rc;
     420}
     421
     422/** Destroy start menu entry..
     423 *
     424 * @param entry Start menu entry
     425 * @return EOK on success or an error code
     426 */
     427errno_t smenu_entry_destroy(smenu_entry_t *entry)
     428{
     429        errno_t rc;
     430        sif_trans_t *trans = NULL;
     431
     432        rc = sif_trans_begin(entry->smenu->repo, &trans);
     433        if (rc != EOK)
     434                goto error;
     435
     436        sif_node_destroy(trans, entry->nentry);
     437
     438        rc = sif_trans_end(trans);
     439        if (rc != EOK)
     440                goto error;
     441
     442        smenu_entry_delete(entry);
     443error:
     444        if (trans != NULL)
     445                sif_trans_abort(trans);
     446        return rc;
     447}
     448
    331449/** @}
    332450 */
Note: See TracChangeset for help on using the changeset viewer.