Changeset fcafdb in git
- Timestamp:
- Feb 27, 2001, 4:50:04 PM (22 years ago)
- Branches:
- (u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', '0604212ebb110535022efecad887940825b97c3f')
- Children:
- 8cfee1c3269a440dc074eae208795fd4da490c0e
- Parents:
- c2f5270fb552e6b92d376b11a283d939362193a4
- Location:
- Singular
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/silink.cc
rc2f5270 rfcafdb 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: silink.cc,v 1.3 8 2000-12-12 08:44:52 obachmanExp $ */4 /* $Id: silink.cc,v 1.39 2001-02-27 15:50:04 levandov Exp $ */ 5 5 6 6 /* … … 211 211 leftv slRead(si_link l, leftv a) 212 212 { 213 char *mode; 213 214 leftv v = NULL; 214 215 if( ! SI_LINK_R_OPEN_P(l)) // open r ? 215 216 { 217 #ifdef HAVE_DBM 218 #ifdef USE_GDBM 219 if (! SI_LINK_CLOSE_P(l)) 220 { 221 if (slClose(l)) return NULL; 222 } 223 #endif 224 #endif 216 225 if (slOpen(l, SI_LINK_READ)) return NULL; 217 226 } … … 253 262 if(! SI_LINK_W_OPEN_P(l)) // open w ? 254 263 { 264 #ifdef HAVE_DBM 265 #ifdef USE_GDBM 266 if (! SI_LINK_CLOSE_P(l)) 267 { 268 if (slClose(l)) return TRUE; 269 } 270 #endif 271 #endif 255 272 if (slOpen(l, SI_LINK_WRITE)) return TRUE; 256 273 } 257 274 258 if (SI_LINK_W_OPEN_P(l))275 if (SI_LINK_W_OPEN_P(l)) 259 276 { // now open w 260 277 if (l->m->Write != NULL) -
Singular/sing_dbm.cc
rc2f5270 rfcafdb 5 5 //**************************************************************************/ 6 6 // 7 // $Id: sing_dbm.cc,v 1.1 5 2000-12-12 08:44:53 obachmanExp $7 // $Id: sing_dbm.cc,v 1.16 2001-02-27 15:50:04 levandov Exp $ 8 8 // 9 9 //**************************************************************************/ … … 27 27 # include "silink.h" 28 28 # include "sing_dbm.h" 29 29 #ifdef USE_GDBM 30 # include "gdbm.h" 31 #endif 32 33 34 #ifdef USE_GDBM 35 typedef struct { 36 GDBM_FILE db; // pointer to open database 37 int first; // firstkey to look for? 38 datum actual; // the actual key 39 } GDBM_info; 40 41 //**************************************************************************/ 42 LINKAGE BOOLEAN dbOpen(si_link l, short flag) 43 { 44 char *mode = "r"; 45 GDBM_info *db; 46 datum d_key; 47 // int dbm_flags = O_RDONLY | O_CREAT; // open database readonly as default 48 int read_write= GDBM_READER; 49 50 if(flag & SI_LINK_WRITE) 51 { 52 if((l->mode==NULL) 53 || ((l->mode[0]!='w')&&(l->mode[1]!='w'))) 54 { 55 // request w- open, but mode is not "w" nor "rw" => fail 56 return TRUE; 57 } 58 // dbm_flags = O_RDWR | O_CREAT; 59 read_write = GDBM_WRCREAT; 60 mode = "rw"; 61 } 62 if(flag & SI_LINK_READ) 63 { 64 if (strcmp(l->mode,"rw")==0) mode="rw"; 65 } 66 //if (((db = (DBM_info *)omAlloc(sizeof *db)) != NULL) 67 //&&((db->db = dbm_open(l->name, dbm_flags, 0664 )) != NULL )) 68 db = (GDBM_info *)omAlloc0(sizeof *db); 69 if((db->db = gdbm_open(l->name, BLOCKSIZE, read_write, 0664, 0)) != NULL ) 70 { 71 // if (db->first) // first created? 72 // { 73 // db->actual=gdbm_firstkey(db->db); 74 // } 75 // else 76 // { 77 // d_key=db->actual; 78 // if (d_key.dptr!=NULL) 79 // { 80 // db->actual=gdbm_nextkey(db->db,db->actual); 81 // } 82 // else { db->actual=gdbm_firstkey(db->db); } 83 // } 84 db->first=1; 85 if(flag & SI_LINK_WRITE) 86 SI_LINK_SET_W_OPEN_P(l); 87 else 88 SI_LINK_SET_R_OPEN_P(l); 89 l->data=(void *)(db); 90 omFree(l->mode); 91 l->mode=omStrDup(mode); 92 return FALSE; 93 } 94 return TRUE; 95 } 96 97 //**************************************************************************/ 98 LINKAGE BOOLEAN dbClose(si_link l) 99 { 100 GDBM_info *db = (GDBM_info *)l->data; 101 gdbm_close(db->db); 102 omFreeSize((ADDRESS)db,(sizeof *db)); 103 l->data=NULL; 104 SI_LINK_SET_CLOSE_P(l); 105 return FALSE; 106 } 107 108 //**************************************************************************/ 109 static datum d_value; 110 LINKAGE leftv dbRead2(si_link l, leftv key) 111 { 112 GDBM_info *db = (GDBM_info *)l->data; 113 // GDBM_info *db; 114 // db = (GDBM_info *)omAlloc0(sizeof *db); 115 // db = (GDBM_info *)l->data; 116 leftv v=NULL; 117 datum d_key; 118 int flag; 119 120 if (!SI_LINK_R_OPEN_P(l)) //exceptions 121 // if (strcmp(l->mode,"rw")==0) //rw-mode 122 { 123 if (!SI_LINK_CLOSE_P(l)) 124 { 125 if (!dbClose(l)) {Print("cannot close link!\n");} 126 } 127 //(SI_LINK_CLOSE_P(l)) automatically 128 dbOpen(l, SI_LINK_READ); 129 } 130 if (SI_LINK_RW_OPEN_P(l)) {Print("I/O Error!\n");} 131 132 if(key!=NULL) 133 { 134 if (key->Typ()==STRING_CMD) 135 { 136 d_key.dptr = (char*)key->Data(); 137 d_key.dsize = strlen(d_key.dptr)+1; 138 d_value = gdbm_fetch(db->db, d_key); 139 v=(leftv)omAlloc0Bin(sleftv_bin); 140 if (d_value.dptr!=NULL) v->data=omStrDup(d_value.dptr); 141 else v->data=omStrDup(""); 142 v->rtyp=STRING_CMD; 143 } 144 else 145 { 146 WerrorS("read(`GDBM link`,`string`) expected"); 147 } 148 } 149 else 150 { 151 if (db->first) 152 { 153 db->first=0; 154 d_key = gdbm_firstkey(db->db); 155 // db->actual=d_key; 156 // Print("firstkey:%s\n",d_key.dptr); 157 } 158 else 159 { 160 if (db->actual.dptr==NULL) 161 { 162 db->actual=gdbm_firstkey(db->db); 163 } 164 d_key = gdbm_nextkey(db->db,db->actual); 165 db->actual=d_key; 166 if (d_key.dptr==NULL) 167 { 168 db->first=1; 169 // Print("nextkey:NULL\n"); 170 } 171 // else 172 // Print("nextkey:%s\n",d_key.dptr); 173 } 174 175 if (d_key.dptr!=NULL) 176 d_value = gdbm_fetch(db->db, d_key); 177 else 178 d_value.dptr=NULL; 179 180 v=(leftv)omAlloc0Bin(sleftv_bin); 181 v->rtyp=STRING_CMD; 182 if (d_value.dptr!=NULL) 183 { 184 v->data=omStrDup(d_key.dptr); 185 db->first = 0; 186 } 187 else 188 { 189 v->data=omStrDup(""); 190 // db->first = 1; 191 } 192 193 } 194 return v; 195 } 196 LINKAGE leftv dbRead1(si_link l) 197 { 198 return dbRead2(l,NULL); 199 } 200 //**************************************************************************/ 201 LINKAGE BOOLEAN dbWrite(si_link l, leftv key) 202 { 203 GDBM_info *db = (GDBM_info *)l->data; 204 // GDBM_info *db; 205 // db = (GDBM_info *)omAlloc0(sizeof *db); 206 // db = (GDBM_info *)l->data; 207 BOOLEAN b=TRUE; 208 register int ret; 209 210 if (strcmp(l->mode,"rw")!=0) // r-mode 211 { 212 Print("Write error on readonly source\n"); 213 } 214 else //rw-mode 215 { 216 if (!SI_LINK_W_OPEN_P(l)) //exceptions 217 { 218 if (!SI_LINK_CLOSE_P(l)) 219 { 220 if (!dbClose(l)) {Print("close error\n");}; 221 } 222 if (!dbOpen(l,SI_LINK_WRITE)) {Print("open_for_write error\n");} 223 } 224 } 225 226 if((key!=NULL) && (key->Typ()==STRING_CMD) ) 227 { 228 if (key->next!=NULL) // have a second parameter ? 229 { 230 if(key->next->Typ()==STRING_CMD) // replace (key,value) 231 { 232 datum d_key, d_value; 233 234 d_key.dptr = (char *)key->Data(); 235 d_key.dsize = strlen(d_key.dptr)+1; 236 d_value.dptr = (char *)key->next->Data(); 237 d_value.dsize = strlen(d_value.dptr)+1; 238 ret = gdbm_store(db->db, d_key, d_value, GDBM_REPLACE); 239 // db->actual=d_key; 240 if (ret==-1) {Print("reader calls gdbm_store!");} 241 if (ret==0) 242 { b=FALSE; } 243 else 244 { 245 // if(gdbm_error(db->db)) 246 if (gdbm_errno!=0) 247 { 248 // Werror("GDBM link I/O error. Is '%s' readonly?", l->name); 249 Print(gdbm_strerror(gdbm_errno)); 250 //dbm_clearerr(db->db); 251 // gdbm_errno=0; 252 } 253 } 254 } 255 } 256 else 257 { // delete (key) 258 datum d_key; 259 260 d_key.dptr = (char *)key->Data(); 261 d_key.dsize = strlen(d_key.dptr)+1; 262 // db->actual=gdbm_nextkey(db->db,d_key); 263 gdbm_delete(db->db, d_key); 264 b=FALSE; 265 } 266 } 267 else 268 { 269 WerrorS("write(`GDBM link`,`key string` [,`data string`]) expected"); 270 } 271 return b; 272 } 273 #endif /* USE_GDBM */ 274 275 #ifndef USE_GDBM 30 276 /* These are the routines in dbm. */ 31 277 # include "ndbm.h" … … 206 452 //**************************************************************************/ 207 453 454 #endif /* USE_GDBM */ 208 455 #endif /* HAVE_DBM */ -
Singular/sing_dbm.h
rc2f5270 rfcafdb 4 4 * Computer Algebra System SINGULAR * 5 5 ****************************************/ 6 /* $Id: sing_dbm.h,v 1. 4 1999-11-15 17:20:48 obachmanExp $ */6 /* $Id: sing_dbm.h,v 1.5 2001-02-27 15:50:04 levandov Exp $ */ 7 7 /* 8 8 * ABSTRACT: interface to DBM links … … 11 11 #include "structs.h" 12 12 13 #ifdef ix86_Win 14 #ifdef HAVE_DBM 15 # define GDBM_STATIC 16 # define USE_GDBM 17 # define BLOCKSIZE 1024 18 #endif 19 #endif 20 13 21 si_link_extension slInitDBMExtension(si_link_extension s); 14 22 #endif
Note: See TracChangeset
for help on using the changeset viewer.