213 |
recover(&ptable); |
recover(&ptable); |
214 |
} |
} |
215 |
/* |
/* |
|
* gtags_setinfo: set info string. |
|
|
* |
|
|
* i) info info string |
|
|
* |
|
|
* Currently this method is used for postgres. |
|
|
*/ |
|
|
void |
|
|
gtags_setinfo(info) |
|
|
char *info; |
|
|
{ |
|
|
dbop_setinfo(info); |
|
|
} |
|
|
/* |
|
216 |
* gtags_open: open global tag. |
* gtags_open: open global tag. |
217 |
* |
* |
218 |
* i) dbpath dbpath directory |
* i) dbpath dbpath directory |
223 |
* GTAGS_MODIFY: modify tag |
* GTAGS_MODIFY: modify tag |
224 |
* i) flags GTAGS_COMPACT |
* i) flags GTAGS_COMPACT |
225 |
* GTAGS_PATHINDEX |
* GTAGS_PATHINDEX |
|
* GTAGS_POSTGRES |
|
226 |
* r) GTOP structure |
* r) GTOP structure |
227 |
* |
* |
228 |
* when error occurred, gtagopen doesn't return. |
* when error occurred, gtagopen doesn't return. |
263 |
* allow duplicate records. |
* allow duplicate records. |
264 |
*/ |
*/ |
265 |
dbopflags = DBOP_DUP; |
dbopflags = DBOP_DUP; |
|
if (flags & GTAGS_POSTGRES) |
|
|
dbopflags |= DBOP_POSTGRES; |
|
266 |
gtop->dbop = dbop_open(makepath(dbpath, dbname(db), NULL), dbmode, 0644, dbopflags); |
gtop->dbop = dbop_open(makepath(dbpath, dbname(db), NULL), dbmode, 0644, dbopflags); |
267 |
if (gtop->dbop == NULL) { |
if (gtop->dbop == NULL) { |
268 |
if (dbmode == 1) |
if (dbmode == 1) |
269 |
die("cannot make %s.", dbname(db)); |
die("cannot make %s.", dbname(db)); |
270 |
die("%s not found.", dbname(db)); |
die("%s not found.", dbname(db)); |
271 |
} |
} |
|
if (gtop->dbop->openflags & DBOP_POSTGRES) |
|
|
gtop->openflags |= GTAGS_POSTGRES; |
|
272 |
/* |
/* |
273 |
* decide format version. |
* decide format version. |
274 |
*/ |
*/ |
283 |
if (gtop->mode == GTAGS_CREATE) { |
if (gtop->mode == GTAGS_CREATE) { |
284 |
if (flags & GTAGS_COMPACT) { |
if (flags & GTAGS_COMPACT) { |
285 |
gtop->format |= GTAGS_COMPACT; |
gtop->format |= GTAGS_COMPACT; |
286 |
dbop_put(gtop->dbop, COMPACTKEY, COMPACTKEY, "0"); |
dbop_put(gtop->dbop, COMPACTKEY, COMPACTKEY); |
287 |
} |
} |
288 |
if (flags & GTAGS_PATHINDEX) { |
if (flags & GTAGS_PATHINDEX) { |
289 |
gtop->format |= GTAGS_PATHINDEX; |
gtop->format |= GTAGS_PATHINDEX; |
290 |
dbop_put(gtop->dbop, PATHINDEXKEY, PATHINDEXKEY, "0"); |
dbop_put(gtop->dbop, PATHINDEXKEY, PATHINDEXKEY); |
291 |
} |
} |
292 |
if (gtop->format & (GTAGS_COMPACT|GTAGS_PATHINDEX)) { |
if (gtop->format & (GTAGS_COMPACT|GTAGS_PATHINDEX)) { |
293 |
char buf[80]; |
char buf[80]; |
298 |
gtop->format_version = 2; |
gtop->format_version = 2; |
299 |
snprintf(buf, sizeof(buf), |
snprintf(buf, sizeof(buf), |
300 |
"%s %d", VERSIONKEY, gtop->format_version); |
"%s %d", VERSIONKEY, gtop->format_version); |
301 |
dbop_put(gtop->dbop, VERSIONKEY, buf, "0"); |
dbop_put(gtop->dbop, VERSIONKEY, buf); |
302 |
} |
} |
303 |
} else { |
} else { |
304 |
/* |
/* |
350 |
* i) gtop descripter of GTOP |
* i) gtop descripter of GTOP |
351 |
* i) tag tag name |
* i) tag tag name |
352 |
* i) record ctags -x image |
* i) record ctags -x image |
|
* i) fid file id. |
|
353 |
* |
* |
354 |
* NOTE: If format is GTAGS_COMPACT then this function is destructive. |
* NOTE: If format is GTAGS_COMPACT then this function is destructive. |
355 |
*/ |
*/ |
356 |
void |
void |
357 |
gtags_put(gtop, tag, record, fid) |
gtags_put(gtop, tag, record) |
358 |
GTOP *gtop; |
GTOP *gtop; |
359 |
char *tag; |
char *tag; |
360 |
char *record; |
char *record; |
|
char *fid; |
|
361 |
{ |
{ |
362 |
char *line, *path; |
char *line, *path; |
363 |
SPLIT ptable; |
SPLIT ptable; |
364 |
|
|
365 |
if (gtop->format == GTAGS_STANDARD || gtop->format == GTAGS_PATHINDEX) { |
if (gtop->format == GTAGS_STANDARD || gtop->format == GTAGS_PATHINDEX) { |
366 |
/* entab(record); */ |
/* entab(record); */ |
367 |
dbop_put(gtop->dbop, tag, record, fid); |
dbop_put(gtop->dbop, tag, record); |
368 |
return; |
return; |
369 |
} |
} |
370 |
/* |
/* |
381 |
*/ |
*/ |
382 |
if (strcmp(gtop->prev_tag, tag) || strcmp(gtop->prev_path, path)) { |
if (strcmp(gtop->prev_tag, tag) || strcmp(gtop->prev_path, path)) { |
383 |
if (gtop->prev_tag[0]) { |
if (gtop->prev_tag[0]) { |
384 |
dbop_put(gtop->dbop, gtop->prev_tag, strbuf_value(gtop->sb), gtop->prev_fid); |
dbop_put(gtop->dbop, gtop->prev_tag, strbuf_value(gtop->sb)); |
385 |
} |
} |
386 |
strlimcpy(gtop->prev_tag, tag, sizeof(gtop->prev_tag)); |
strlimcpy(gtop->prev_tag, tag, sizeof(gtop->prev_tag)); |
387 |
strlimcpy(gtop->prev_path, path, sizeof(gtop->prev_path)); |
strlimcpy(gtop->prev_path, path, sizeof(gtop->prev_path)); |
|
strlimcpy(gtop->prev_fid, fid, sizeof(gtop->prev_fid)); |
|
388 |
/* |
/* |
389 |
* Start creating new record. |
* Start creating new record. |
390 |
*/ |
*/ |
444 |
/* |
/* |
445 |
* get file id. |
* get file id. |
446 |
*/ |
*/ |
447 |
if (gtop->format & GTAGS_PATHINDEX || gtop->openflags & GTAGS_POSTGRES) { |
if (gtop->format & GTAGS_PATHINDEX) { |
448 |
if (!(fid = gpath_path2fid(path))) |
if (!(fid = gpath_path2fid(path))) |
449 |
die("GPATH is corrupted.('%s' not found)", path); |
die("GPATH is corrupted.('%s' not found)", path); |
450 |
} else |
} else |
496 |
else if ((p = locatestring(tag, "::", MATCH_LAST)) != NULL) |
else if ((p = locatestring(tag, "::", MATCH_LAST)) != NULL) |
497 |
p += 2; |
p += 2; |
498 |
} |
} |
499 |
gtags_put(gtop, p, ctags_x, fid); |
gtags_put(gtop, p, ctags_x); |
500 |
} |
} |
501 |
if (pclose(ip) < 0) |
if (pclose(ip) < 0) |
502 |
die("terminated abnormally."); |
die("terminated abnormally."); |
561 |
if (gtop->format & GTAGS_PATHINDEX) |
if (gtop->format & GTAGS_PATHINDEX) |
562 |
if ((path = gpath_fid2path(path)) == NULL) |
if ((path = gpath_fid2path(path)) == NULL) |
563 |
die("GPATH is corrupted.('%s' not found)", path); |
die("GPATH is corrupted.('%s' not found)", path); |
|
#ifdef USE_POSTGRES |
|
|
if (gtop->openflags & GTAGS_POSTGRES) { |
|
|
char *fid; |
|
|
|
|
|
if ((fid = gpath_path2fid(path)) == NULL) |
|
|
die("GPATH is corrupted.('%s' not found)", path); |
|
|
dbop_delete_by_fid(gtop->dbop, fid); |
|
|
return; |
|
|
} |
|
|
#endif |
|
564 |
/* |
/* |
565 |
* read sequentially, because db(1) has just one index. |
* read sequentially, because db(1) has just one index. |
566 |
*/ |
*/ |
698 |
if (gtop->format & GTAGS_PATHINDEX || gtop->mode != GTAGS_READ) |
if (gtop->format & GTAGS_PATHINDEX || gtop->mode != GTAGS_READ) |
699 |
gpath_close(); |
gpath_close(); |
700 |
if (gtop->sb && gtop->prev_tag[0]) |
if (gtop->sb && gtop->prev_tag[0]) |
701 |
dbop_put(gtop->dbop, gtop->prev_tag, strbuf_value(gtop->sb), "0"); |
dbop_put(gtop->dbop, gtop->prev_tag, strbuf_value(gtop->sb)); |
702 |
if (gtop->sb) |
if (gtop->sb) |
703 |
strbuf_close(gtop->sb); |
strbuf_close(gtop->sb); |
704 |
if (gtop->ib) |
if (gtop->ib) |