Changeset 573ae7 in git for Singular/sing_dbm.cc
- Timestamp:
- Aug 12, 1997, 4:54:52 PM (27 years ago)
- Branches:
- (u'spielwiese', '2a584933abf2a2d3082034c7586d38bb6de1a30a')
- Children:
- 1fc83c0842a018ba9551662edf168b82b7976856
- Parents:
- 18dd47919ae71a7ba93f3772eca494ee6bc584ce
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/sing_dbm.cc
r18dd47 r573ae7 5 5 //**************************************************************************/ 6 6 // 7 // $Id: sing_dbm.cc,v 1. 5 1997-08-08 12:59:30 obachmanExp $7 // $Id: sing_dbm.cc,v 1.6 1997-08-12 14:54:52 Singular Exp $ 8 8 // 9 9 //**************************************************************************/ … … 44 44 int dbm_flags = O_RDONLY | O_CREAT; // open database readonly as default 45 45 46 if((flag & SI_LINK_OPEN) 47 || (flag & SI_LINK_READ) 48 || (flag & SI_LINK_WRITE)) { 49 if (l->mode[0] == '\0' || (strcmp(l->mode, "r") == 0)) 50 flag = SI_LINK_READ; 51 else flag = SI_LINK_READ | SI_LINK_WRITE; 52 } 53 54 if((flag & SI_LINK_READ) || (flag & SI_LINK_WRITE)) { 55 if( l->data == NULL ) { 56 if ((db = (DBM_info *)malloc(sizeof *db)) == 0) { 57 errno = ENOMEM; 58 return TRUE; 59 } 60 if( flag & SI_LINK_WRITE ) { 61 dbm_flags = O_RDWR | O_CREAT; 62 mode = "rw"; 63 } 64 if( (db->db = dbm_open(l->name, dbm_flags, 0664 )) != NULL ) { 65 db->first=1; 66 if(flag & SI_LINK_WRITE) SI_LINK_SET_RW_OPEN_P(l); 67 else SI_LINK_SET_R_OPEN_P(l); 68 l->data=(void *)(db); 69 FreeL(l->mode); 70 l->mode=mstrdup(mode); 71 return FALSE; 72 } 73 Werror("dbm_open of `%s` failed",l->name); 74 } 46 if((flag & SI_LINK_WRITE) 47 || ((l->mode!=NULL)&& 48 ((l->mode[0]='w')||(l->mode[1]='w'))) 49 ) 50 { 51 dbm_flags = O_RDWR | O_CREAT; 52 mode = "rw"; 53 flag|=SI_LINK_WRITE; 54 } 55 if ((db = (DBM_info *)malloc(sizeof *db)) == 0) 56 { 57 return TRUE; 58 } 59 if( (db->db = dbm_open(l->name, dbm_flags, 0664 )) != NULL ) 60 { 61 db->first=1; 62 if(flag & SI_LINK_WRITE) SI_LINK_SET_RW_OPEN_P(l); 63 else SI_LINK_SET_R_OPEN_P(l); 64 l->data=(void *)(db); 65 FreeL(l->mode); 66 l->mode=mstrdup(mode); 67 return FALSE; 75 68 } 76 69 return TRUE; … … 80 73 BOOLEAN dbClose(si_link l) 81 74 { 82 DBM_info *db = l->data;75 DBM_info *db = (DBM_info *)l->data; 83 76 84 77 dbm_close(db->db); … … 93 86 leftv dbRead2(si_link l, leftv key) 94 87 { 95 DBM_info *db = l->data;88 DBM_info *db = (DBM_info *)l->data; 96 89 leftv v=NULL; 97 if(l->data != NULL) { 98 datum d_key; 99 100 if(key!=NULL) 101 { 102 if (key->Typ()==STRING_CMD) 103 { 104 d_key.dptr = (char*)key->Data(); 105 d_key.dsize = strlen(d_key.dptr)+1; 106 d_value = dbm_fetch(db->db, d_key); 107 v=(leftv)Alloc0(sizeof(sleftv)); 108 if (d_value.dptr!=NULL) v->data=mstrdup(d_value.dptr); 109 else v->data=mstrdup(""); 110 v->rtyp=STRING_CMD; 111 } 112 else 113 { 114 WerrorS("read(`link`,`string`) expected"); 115 } 116 } 117 else { 118 if(db->first) d_value = dbm_firstkey((DBM *)db->db); 119 else d_value = dbm_nextkey((DBM *)db->db); 120 90 datum d_key; 91 92 if(key!=NULL) 93 { 94 if (key->Typ()==STRING_CMD) 95 { 96 d_key.dptr = (char*)key->Data(); 97 d_key.dsize = strlen(d_key.dptr)+1; 98 d_value = dbm_fetch(db->db, d_key); 121 99 v=(leftv)Alloc0(sizeof(sleftv)); 100 if (d_value.dptr!=NULL) v->data=mstrdup(d_value.dptr); 101 else v->data=mstrdup(""); 122 102 v->rtyp=STRING_CMD; 123 if (d_value.dptr!=NULL) { 124 v->data=mstrdup(d_value.dptr); 125 db->first = 0; 126 } 127 else { 128 v->data=mstrdup(""); 129 db->first = 1; 130 } 131 103 } 104 else 105 { 106 WerrorS("read(`DBM link`,`string`) expected"); 132 107 } 133 108 } 134 109 else 135 110 { 136 Werror("DBM-link `%s` not open in read",l->name); 111 if(db->first) d_value = dbm_firstkey((DBM *)db->db); 112 else d_value = dbm_nextkey((DBM *)db->db); 113 114 v=(leftv)Alloc0(sizeof(sleftv)); 115 v->rtyp=STRING_CMD; 116 if (d_value.dptr!=NULL) 117 { 118 v->data=mstrdup(d_value.dptr); 119 db->first = 0; 120 } 121 else 122 { 123 v->data=mstrdup(""); 124 db->first = 1; 125 } 126 137 127 } 138 128 return v; … … 145 135 BOOLEAN dbWrite(si_link l, leftv key) 146 136 { 147 DBM_info *db = l->data;137 DBM_info *db = (DBM_info *)l->data; 148 138 BOOLEAN b=TRUE; 149 139 register int ret; 150 140 151 if(l->data != NULL) { // is database opened ? 152 if((key!=NULL) && (key->Typ()==STRING_CMD) ) { 153 if (key->next!=NULL) { // have a second parameter ? 154 if(key->next->Typ()==STRING_CMD) { // replace (key,value) 155 datum d_key, d_value; 156 157 d_key.dptr = (char *)key->Data(); 158 d_key.dsize = strlen(d_key.dptr)+1; 159 d_value.dptr = (char *)key->next->Data(); 160 d_value.dsize = strlen(d_value.dptr)+1; 161 ret = dbm_store(db->db, d_key, d_value, DBM_REPLACE); 162 if(!ret ) b=FALSE; 163 else { 164 if(dbm_error(db->db)) { 165 Werror("DBM link I/O error. is '%s' readonly?", l->name); 166 dbm_clearerr(db->db); 167 } 168 } 169 } 170 } else { // delete (key) 171 datum d_key; 172 173 d_key.dptr = (char *)key->Data(); 174 d_key.dsize = strlen(d_key.dptr)+1; 175 dbm_delete(db->db, d_key); 176 b=FALSE; 141 // database is opened 142 if((key!=NULL) && (key->Typ()==STRING_CMD) ) 143 { 144 if (key->next!=NULL) // have a second parameter ? 145 { 146 if(key->next->Typ()==STRING_CMD) // replace (key,value) 147 { 148 datum d_key, d_value; 149 150 d_key.dptr = (char *)key->Data(); 151 d_key.dsize = strlen(d_key.dptr)+1; 152 d_value.dptr = (char *)key->next->Data(); 153 d_value.dsize = strlen(d_value.dptr)+1; 154 ret = dbm_store(db->db, d_key, d_value, DBM_REPLACE); 155 if(!ret ) 156 b=FALSE; 157 else 158 { 159 if(dbm_error(db->db)) 160 { 161 Werror("DBM link I/O error. Is '%s' readonly?", l->name); 162 dbm_clearerr(db->db); 163 } 164 } 177 165 } 178 } else { 179 WerrorS("write(`DBM link`,`key string`,`data string`) expected"); 166 } 167 else 168 { // delete (key) 169 datum d_key; 170 171 d_key.dptr = (char *)key->Data(); 172 d_key.dsize = strlen(d_key.dptr)+1; 173 dbm_delete(db->db, d_key); 174 b=FALSE; 180 175 } 181 176 } 182 177 else 183 178 { 184 Werror ("DBM-link `%s` not open in write",l->name);179 WerrorS("write(`DBM link`,`key string`,`data string`) expected"); 185 180 } 186 181 return b;
Note: See TracChangeset
for help on using the changeset viewer.