|
|
1.1 ! root 1: /* entry_dump.c - routines to dump the database */ ! 2: ! 3: #ifndef lint ! 4: static char *rcsid = "$Header: /f/osi/quipu/RCS/entry_dump.c,v 7.0 89/11/23 22:17:31 mrose Rel $"; ! 5: #endif ! 6: ! 7: /* ! 8: * $Header: /f/osi/quipu/RCS/entry_dump.c,v 7.0 89/11/23 22:17:31 mrose Rel $ ! 9: * ! 10: * ! 11: * $Log: entry_dump.c,v $ ! 12: * Revision 7.0 89/11/23 22:17:31 mrose ! 13: * Release 6.0 ! 14: * ! 15: */ ! 16: ! 17: /* ! 18: * NOTICE ! 19: * ! 20: * Acquisition, use, and distribution of this module and related ! 21: * materials are subject to the restrictions of a license agreement. ! 22: * Consult the Preface in the User's Manual for the full terms of ! 23: * this agreement. ! 24: * ! 25: */ ! 26: ! 27: ! 28: #include "quipu/util.h" ! 29: #include "quipu/entry.h" ! 30: #include <errno.h> ! 31: #include "tailor.h" ! 32: ! 33: extern LLog * log_dsap; ! 34: extern RDN parse_rdn; ! 35: extern char * new_version(); ! 36: ! 37: static header_print (psa,edb) ! 38: PS psa; ! 39: Entry edb; ! 40: { ! 41: switch (edb->e_data) { ! 42: case E_DATA_MASTER: ! 43: ps_print (psa,"MASTER\n"); ! 44: break; ! 45: case E_TYPE_SLAVE : ! 46: ps_print (psa,"SLAVE\n"); ! 47: break; ! 48: default: ! 49: ps_print (psa,"CACHE\n"); ! 50: break; ! 51: } ! 52: if (edb->e_parent != NULLENTRY) ! 53: ps_printf (psa,"%s\n",edb->e_parent->e_edbversion); ! 54: else ! 55: ps_printf (psa,"%s\n",new_version()); ! 56: } ! 57: ! 58: static entry_print (psa,entryptr) ! 59: PS psa; ! 60: Entry entryptr; ! 61: { ! 62: if (entryptr == NULLENTRY) ! 63: return; ! 64: ! 65: rdn_print (psa,entryptr->e_name,EDBOUT); ! 66: parse_rdn = entryptr->e_name; ! 67: ps_print (psa,"\n"); ! 68: as_print (psa,entryptr->e_attributes,EDBOUT); ! 69: parse_rdn = NULLRDN; ! 70: } ! 71: ! 72: ! 73: static entry_block_print (psa,block) ! 74: PS psa; ! 75: Entry block; ! 76: { ! 77: Entry ptr; ! 78: ! 79: if (block != NULLENTRY) { ! 80: header_print (psa,block); ! 81: for ( ptr = block; ptr != NULLENTRY; ptr = ptr->e_sibling) { ! 82: entry_print (psa,ptr); ! 83: ps_print (psa,"\n"); ! 84: } ! 85: ! 86: } ! 87: } ! 88: ! 89: write_edb (ptr,filename) ! 90: Entry ptr; ! 91: char * filename; ! 92: { ! 93: int um; ! 94: FILE * fptr; ! 95: PS entryps; ! 96: extern char * parse_file; ! 97: extern int errno; ! 98: ! 99: um = umask (0177); ! 100: if ((fptr = fopen (filename,"w")) == (FILE *) NULL) { ! 101: LLOG (log_dsap,LLOG_EXCEPTIONS,("file_open failed: \"%s\" (%d)",filename,errno)); ! 102: return NOTOK; ! 103: } ! 104: (void) umask (um); ! 105: ! 106: if ((entryps = ps_alloc (std_open)) == NULLPS) { ! 107: LLOG (log_dsap,LLOG_EXCEPTIONS,("ps_alloc failed")); ! 108: (void) fclose (fptr); ! 109: return NOTOK; ! 110: } ! 111: if (std_setup (entryps,fptr) == NOTOK) { ! 112: LLOG (log_dsap,LLOG_EXCEPTIONS,("std_setup failed")); ! 113: (void) fclose (fptr); ! 114: return NOTOK; ! 115: } ! 116: ! 117: parse_file = filename; ! 118: ! 119: entry_block_print (entryps,ptr); ! 120: ! 121: if (entryps->ps_errno != PS_ERR_NONE) { ! 122: LLOG (log_dsap,LLOG_EXCEPTIONS,("write_edb ps error: %s",ps_error(entryps->ps_errno))); ! 123: (void) fclose (fptr); ! 124: return NOTOK; ! 125: } ! 126: ps_free (entryps); ! 127: ! 128: if (fflush (fptr) != 0) { ! 129: LLOG (log_dsap,LLOG_EXCEPTIONS,("write_edb flush error: %d",errno)); ! 130: return NOTOK; ! 131: } ! 132: if (fsync (fileno(fptr)) != 0) { ! 133: LLOG (log_dsap,LLOG_EXCEPTIONS,("write_edb fsync error: %d",errno)); ! 134: return NOTOK; ! 135: } ! 136: if (fclose (fptr) != 0) { ! 137: LLOG (log_dsap,LLOG_EXCEPTIONS,("write_edb EDB close error: %d",errno)); ! 138: return NOTOK; ! 139: } ! 140: ! 141: LLOG (log_dsap,LLOG_NOTICE,("Written %s",filename)); ! 142: ! 143: return (OK); ! 144: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.