void ANNOTATE_PUSH_PATH_ID(const char *roles, int level, const void *path_id, int idsz) { ThreadContext *pctx = GET_CTX; assert(++pctx->idpos < MAXSTACK); path_common(pctx->fd, roles, level, path_id, idsz); ID(pctx) = malloc(idsz); memcpy(ID(pctx), path_id, idsz); IDLEN(pctx) = idsz; }
void ANNOTATE_SET_PATH_ID(const char *roles, int level, const void *path_id, int idsz) { ThreadContext *pctx = GET_CTX; if (level > pctx->log_level) return; if (IDLEN(pctx) == idsz && memcmp(path_id, ID(pctx), idsz) == 0) return; // already set path_common(pctx->fd, roles, level, path_id, idsz); if (!ID(pctx)) ID(pctx) = malloc(idsz); else if (IDLEN(pctx) != idsz) ID(pctx) = realloc(ID(pctx), idsz); // else keep the old block as is memcpy(ID(pctx), path_id, idsz); IDLEN(pctx) = idsz; }
void ANNOTATE_POP_PATH_ID(const char *roles, int level) { ThreadContext *pctx = GET_CTX; free(ID(pctx)); assert(--pctx->idpos >= 0); path_common(pctx->fd, roles, level, ID(pctx), IDLEN(pctx)); }
int rmdir(const char *name) { return path_common(name, 0, 5); }
int mkdir(const char *name, int mode) { return path_common(name, mode, 4); }