rqst.op = CNID_DBD_OP_RESOLVE;
rqst.cnid = *id;
- /* This mimicks the behaviour of the "regular" cnid_resolve. So far,
- nobody uses the content of buffer. It only provides space for the
- name in the caller. */
- rply.name = (char *)buffer + CNID_HEADER_LEN;
- rply.namelen = len - CNID_HEADER_LEN;
+ /* Pass buffer to transmit so it can stuff the reply data there */
+ rply.name = (char *)buffer;
+ rply.namelen = len;
if (transmit(db, &rqst, &rply) < 0) {
errno = CNID_ERR_DB;
switch (rply.result) {
case CNID_DBD_RES_OK:
*id = rply.did;
- name = rply.name;
+ name = rply.name + CNID_NAME_OFS;
LOG(log_debug, logtype_cnid, "cnid_dbd_resolve: resolved did: %u, name: '%s'", ntohl(*id), name);
break;
case CNID_DBD_RES_NOTFOUND:
}
/* ---------------------- */
-int cnid_dbd_find(struct _cnid_db *cdb, const char *name, size_t len)
+int cnid_dbd_find(struct _cnid_db *cdb, char *name, size_t namelen, void *buffer, size_t buflen)
{
CNID_private *db;
struct cnid_dbd_rqst rqst;
return CNID_INVALID;
}
- if (len > MAXPATHLEN) {
+ if (namelen > MAXPATHLEN) {
LOG(log_error, logtype_cnid, "cnid_find: Path name is too long");
errno = CNID_ERR_PATH;
return CNID_INVALID;
}
+ LOG(log_debug, logtype_cnid, "cnid_find(\"%s\")", name);
+
RQST_RESET(&rqst);
rqst.op = CNID_DBD_OP_SEARCH;
rqst.name = name;
- rqst.namelen = len;
+ rqst.namelen = namelen;
- LOG(log_debug, logtype_cnid, "cnid_find(\"%s\")", name);
+ rply.name = buffer;
+ rply.namelen = buflen;
- rply.namelen = 0;
if (transmit(db, &rqst, &rply) < 0) {
errno = CNID_ERR_DB;
return CNID_INVALID;