home *** CD-ROM | disk | FTP | other *** search
- /* (C) Copyright 1984,85,86,87 Walter L. Peacock All Rights Reserved */
- /****************************************************************************
- *
- *
- * chgkey.c -- CBTREE sample support function to change a key.
- *
- */
-
- #include "cbtree.h"
-
- chgkey(fdidx, btcp, newkey)
- int fdidx; /* index file descriptor */
- struct btcommo *btcp; /* should contain OLD key & location */
- char *newkey; /* new value to use for key */
- {
- extern char *calloc();
- int cbcode; /* cbtree result code */
- char *savkey;
-
- if ((savkey = calloc(btcp->btkeylen+1, 1)) == NULL)
- return (NOMEM);
- strnncpy(savkey, btcp->btkey, btcp->btkeylen);
- btcp->btoptype = DELTKY; /* delete key only */
- if ((cbcode = cbtree(0, fdidx, btcp)) != BTCALLOK)
- goto key0_exit;
- btcp->btoptype = ISRTKY; /* new key */
- strnncpy(btcp->btkey, newkey, btcp->btkeylen);
- if ((cbcode = cbtree(0, fdidx, btcp)) == BTCALLOK)
- goto key0_exit;
-
- /* error: restore data base */
- btcp->btoptype = DELTKY; /* delete NEW key */
- cbtree(0, fdidx, btcp);
- btcp->btoptype = ISRTKY; /* restore save key */
- strnncpy(btcp->btkey, savkey, btcp->btkeylen);
- cbtree(0, fdidx, btcp);
-
- key0_exit:
- free(savkey);
- return (cbcode);
- }
-