const char *prg_cache_getsig(int algo, unsigned long inode) { unsigned hi = PRG_HASHIT(inode); struct prg_node *pn; size_t size; unsigned char pnsig[4 * NUSSL_HASH_MAX_SIZE]; int ret; #define SHA512_PREFIX "{SHA512}" for (pn = prg_hash[hi]; pn; pn = pn->next) { if (pn->inode == inode) { if (pn->sig[0] == 0) { char * hexnum; ret = nussl_hash_file(algo, pn->name, pnsig, &size); if (ret == 0) { hexnum = pn->sig + strlen(SHA512_PREFIX); memcpy(pn->sig, SHA512_PREFIX, strlen(SHA512_PREFIX)); bin2hex(size, pnsig, hexnum); } else { pn->sig[0] = '\0'; } } return (pn->sig); } } return "-"; }
static const char *prg_cache_get(int inode) { unsigned hi=PRG_HASHIT(inode); struct prg_node *pn; for (pn=prg_hash[hi];pn;pn=pn->next) if (pn->inode==inode) return(pn->name); return("-"); }
static void prg_cache_add(int inode, char *name) { unsigned hi = PRG_HASHIT(inode); struct prg_node **pnp,*pn; prg_cache_loaded=2; for (pnp=prg_hash+hi;(pn=*pnp);pnp=&pn->next) { if (pn->inode==inode) { /* Some warning should be appropriate here as we got multiple processes for one i-node */ return; } } if (!(*pnp=malloc(sizeof(**pnp)))) return; pn=*pnp; pn->next=NULL; pn->inode=inode; if (strlen(name)>sizeof(pn->name)-1) name[sizeof(pn->name)-1]='\0'; strcpy(pn->name,name); }
static void prg_cache_add(unsigned long inode, char *name) { unsigned hi = PRG_HASHIT(inode); struct prg_node **pnp, *pn; prg_cache_loaded = 2; for (pnp = prg_hash + hi; (pn = *pnp); pnp = &pn->next) { if (pn->inode == inode) { /* Some warning should be appropriate here as we got multiple processes for one i-node */ return; } } *pnp = malloc(sizeof(**pnp)); if (*pnp == NULL) return; pn = *pnp; pn->next = NULL; pn->inode = inode; SECURE_STRNCPY(pn->name, name, sizeof(pn->name)); pn->sig[0] = 0; }