key_free, value_free);
if (!slot)
- return errno;
+ return -errno;
/* Keep track of the owner, so that the del function can get at the key_free
and value_free functions. Only do this if one of those functions is set:
return EINVAL;
if ((str = ctf_strptr_validate (fp, name)) == NULL)
- return ctf_errno (fp);
+ return ctf_errno (fp) * -1;
if (str[0] == '\0')
return 0; /* Just ignore empty strings on behalf of caller. */
(void *) (ptrdiff_t) type)) == 0)
return 0;
+ /* ctf_dynhash_insert returns a negative error value: negate it for
+ ctf_set_errno. */
+ ctf_set_errno (fp, err * -1);
return err;
}
the latest supported representation in the process, if needed, and if this
recension of libctf supports upgrading.
+ Returns zero on success and a *positive* ECTF_* or errno value on error.
+
This is a wrapper to simplify memory allocation on error in the _internal
function that does all the actual work. */
LCTF_INDEX_TO_TYPE (fp, id, child),
tp->ctt_name);
if (err != 0)
- return err;
+ return err * -1;
}
break;
}
LCTF_INDEX_TO_TYPE (fp, id, child),
tp->ctt_name);
if (err != 0)
- return err;
+ return err * -1;
break;
case CTF_K_STRUCT:
tp->ctt_name);
if (err != 0)
- return err;
+ return err * -1;
break;
tp->ctt_name);
if (err != 0)
- return err;
+ return err * -1;
break;
case CTF_K_ENUM:
tp->ctt_name);
if (err != 0)
- return err;
+ return err * -1;
/* Remember all enums for later rescanning. */
err = ctf_dynset_insert (all_enums, (void *) (ptrdiff_t)
LCTF_INDEX_TO_TYPE (fp, id, child));
if (err != 0)
- return err;
+ return err * -1;
break;
}
LCTF_INDEX_TO_TYPE (fp, id, child),
tp->ctt_name);
if (err != 0)
- return err;
+ return err * -1;
break;
case CTF_K_FORWARD:
err = ctf_dynhash_insert_type (fp, h, LCTF_INDEX_TO_TYPE (fp, id, child),
tp->ctt_name);
if (err != 0)
- return err;
+ return err * -1;
}
break;
}
LCTF_INDEX_TO_TYPE (fp, id, child),
tp->ctt_name);
if (err != 0)
- return err;
+ return err * -1;
break;
default:
ctf_err_warn (fp, 0, ECTF_CORRUPT,