/****************************************************************************
- * Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. *
+ * Copyright (c) 1998-2007,2008 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
#include <sys/stat.h>
-#include <dump_entry.h>
-
#if USE_HASHED_DB
#include <hashed_db.h>
#endif
-MODULE_ID("$Id: toe.c,v 1.42 2007/01/21 01:09:07 tom Exp $")
+MODULE_ID("$Id: toe.c,v 1.51 2008/08/16 21:53:25 tom Exp $")
#define isDotname(name) (!strcmp(name, ".") || !strcmp(name, ".."))
ExitProgram(int code)
{
_nc_free_entries(_nc_head);
- _nc_leaks_dump_entry();
- _nc_leaks_tic();
- _nc_free_and_exit(code);
+ _nc_free_tic(code);
}
#endif
for (i = 0; i < eargc; i++) {
#if USE_DATABASE
if (_nc_is_dir_path(eargv[i])) {
+ char *cwd_buf = 0;
DIR *termdir;
DIRENT *subdir;
while ((subdir = readdir(termdir)) != 0) {
size_t len = NAMLEN(subdir);
- char buf[PATH_MAX];
+ size_t cwd_len = len + strlen(eargv[i]) + 3;
char name_1[PATH_MAX];
DIR *entrydir;
DIRENT *entry;
+ cwd_buf = typeRealloc(char, cwd_len, cwd_buf);
+ if (cwd_buf == 0) {
+ perror("realloc cwd_buf");
+ continue;
+ }
+
strncpy(name_1, subdir->d_name, len)[len] = '\0';
if (isDotname(name_1))
continue;
- (void) sprintf(buf, "%s/%s/", eargv[i], name_1);
- if (chdir(buf) != 0)
+ (void) sprintf(cwd_buf, "%s/%.*s/", eargv[i], (int) len, name_1);
+ if (chdir(cwd_buf) != 0)
continue;
entrydir = opendir(".");
+ if (entrydir == 0) {
+ perror(cwd_buf);
+ continue;
+ }
while ((entry = readdir(entrydir)) != 0) {
char name_2[PATH_MAX];
TERMTYPE lterm;
closedir(entrydir);
}
closedir(termdir);
+ if (cwd_buf != 0)
+ free(cwd_buf);
}
#if USE_HASHED_DB
else {
bool direct_dependencies = FALSE;
bool invert_dependencies = FALSE;
bool header = FALSE;
- int i;
+ char *report_file = 0;
+ unsigned i;
int code;
int this_opt, last_opt = '?';
int v_opt = 0;
_nc_progname = _nc_rootname(argv[0]);
- while ((this_opt = getopt(argc, argv, "0123456789ahuvUV")) != EOF) {
+ while ((this_opt = getopt(argc, argv, "0123456789ahu:vU:V")) != -1) {
/* handle optional parameter */
if (isdigit(this_opt)) {
switch (last_opt) {
break;
case 'u':
direct_dependencies = TRUE;
+ report_file = optarg;
break;
case 'v':
v_opt = 1;
break;
case 'U':
invert_dependencies = TRUE;
+ report_file = optarg;
break;
case 'V':
puts(curses_version());
}
set_trace_level(v_opt);
- if (direct_dependencies || invert_dependencies) {
- if (freopen(argv[optind], "r", stdin) == 0) {
+ if (report_file != 0) {
+ if (freopen(report_file, "r", stdin) == 0) {
(void) fflush(stdout);
- fprintf(stderr, "%s: can't open %s\n", _nc_progname, argv[optind]);
+ fprintf(stderr, "%s: can't open %s\n", _nc_progname, report_file);
ExitProgram(EXIT_FAILURE);
}
/* parse entries out of the source file */
- _nc_set_source(argv[optind]);
+ _nc_set_source(report_file);
_nc_read_entry_source(stdin, 0, FALSE, FALSE, NULLHOOK);
}
for_entry_list(qp) {
if (qp->nuses) {
- int j;
+ unsigned j;
(void) printf("%s:", _nc_first_name(qp->tterm.term_names));
for (j = 0; j < qp->nuses; j++)