summaryrefslogtreecommitdiff
path: root/src/libs6rc/s6rc_service_recheck_instance.c
blob: b91ea2e71fc74db7d9e50d4c93e38b7253100ca4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/* ISC license. */

#include <string.h>

#include <skalibs/uint32.h>
#include <skalibs/cdb.h>

#include <s6-rc/db.h>

int s6rc_service_recheck_instance (s6rc_db_t const *db, cdb_t *c, uint32_t *id, char const **param)
{
  uint8_t type ;
  uint32_t num ;
  s6rc_service_typenum(db->n, *id) ;
  if (type < S6RC_STYPE_N) return 0 ;
  else
  {
    s6rc_common_t *common = s6rc_service_common(db->n, type, num) ;
    size_t namelen = strlen(db->storage + common->name) ;
    size_t paramlen = strlen(*param) ;
    int r ;
    char tmp[namelen + paramlen] ;
    memcpy(tmp, db->storage + common->name, namelen) ;
    memcpy(tmp + namelen, *param, paramlen) ;
    r = cdb_find(c, tmp, namelen + paramlen) ;
    if (r <= 0) return r ;
  }
  uint32_unpack_big(cdb_datapos(c), id) ;
  *param = 0 ;
  return 1 ;
}