214
get_pr_from_index (const DatabaseInfo database, const char *prnum,
217
PR *pr = getFirstPR (database, err);
219
/* If they gave it to us with the category, remove it. */
220
if (( strrchr (prnum, '/')) != NULL)
222
prnum = strrchr (prnum, '/') + 1;
225
while (pr != NULL && strcmp (prnum, field_value (pr, NUMBER (database))) != 0)
232
setError (err, CODE_NONEXISTENT_PR,
233
"No PR %s listed in the index.", prnum);
214
240
/* Initializes PR for reading. Each line of the PR should be passed
215
241
in via addLineToPR (). */
1351
get_pr_path (const DatabaseInfo database,const char *prnum, ErrorDesc *err)
1377
get_pr_path (const DatabaseInfo database, PR *pr, const char *prnum,
1353
1380
char *path = NULL;
1354
1381
const char *category = NULL;
1355
PR *curr_pr_chain = getFirstPR (database, err);
1356
1382
char *categoryFromIndex = NULL;
1358
if (curr_pr_chain != NULL)
1361
for (j = curr_pr_chain ; j != NULL ; j = getNextPR (j))
1363
if (strcmp (prnum, field_value (j, NUMBER (database))) == 0)
1365
category = field_value (j, CATEGORY (database));
1369
if (category == NULL)
1371
setError (err, CODE_NONEXISTENT_PR,
1372
"No PR %s listed in the index.", prnum);
1386
category = field_value (pr, CATEGORY (database));
1394
prExists (const DatabaseInfo database, const char *prID, ErrorDesc *err)
1407
prExists (const DatabaseInfo database, const char *prnum, ErrorDesc *err)
1396
char *path = get_pr_path (database, prID, err);
1409
PR *pr = get_pr_from_index (database, prnum, err);
1410
char *path = get_pr_path (database, pr, prnum, err);
1398
1412
if (path != NULL)
1411
lookup_pr_path (const DatabaseInfo database, const char *prnum, ErrorDesc *err)
1425
pr_file_readable (const char *path, ErrorDesc *err)
1416
/* If they gave it to us with the category, remove it. */
1417
if (( strrchr (prnum, '/')) != NULL)
1419
prnum = strrchr (prnum, '/') + 1;
1421
path = get_pr_path (database, prnum, err);
1422
if ((path == NULL) || ((fp = fopen (path, "r")) == NULL))
1434
if ((fp = fopen (path, "r")) == NULL)
1426
setError (err, CODE_FILE_ERROR, "Can't open file `%s'", path);
1436
setError (err, CODE_FILE_ERROR, "Can't open file `%s'", path);
1436
readPRWithNum (const DatabaseInfo database, const char *prID,
1445
readPRWithNum (const DatabaseInfo database, const char *prnum,
1437
1446
int prune, ErrorDesc *err)
1440
char *path = lookup_pr_path (database, prID, err);
1449
PR *index_pr = get_pr_from_index (database, prnum, err);
1450
char *path = get_pr_path (database, index_pr, prnum, err);
1442
1452
if (path != NULL)
1444
pr = allocPR (database);
1445
if (get_pr (pr, path, prune) == 0)
1454
if (pr_file_readable (path, err))
1456
pr = allocPR (database);
1457
setPrevPR (pr, getPrevPR (index_pr));
1458
setNextPR (pr, getNextPR (index_pr));
1459
if (get_pr (pr, path, prune) == 0)
1471
pr_delete (const DatabaseInfo database, const char *prnum, ErrorDesc *err)
1476
pr = get_pr_from_index (database, prnum, err);
1477
path = get_pr_path (database, pr, prnum, err);
1479
if (path == NULL || !pr_file_readable (path, err))
1488
if (removePRFromIndex (database, prnum, err))
1496
setError (err, CODE_FILE_ERROR, "Unable to unlink file %s\n", path);