# hunks 3, 4, 5, 7, 8, 9 copied from gentoo diff -U4 -r cancd-0.1.0/cancd.c cancd-0.1.0+byte/cancd.c --- cancd-0.1.0/cancd.c 2005-08-18 19:47:48.000000000 +0100 +++ cancd-0.1.0+byte/cancd.c 2006-10-25 14:51:59.000000000 +0100 @@ -109,9 +109,9 @@ static char *get_path(int af, const void *src) { char ntop[INET6_ADDRSTRLEN + 1]; - char format[PATH_MAX]; + char format[PATH_MAX + 1]; size_t ntop_len; char *newstr, *ptr, *fptr; int havep; time_t now; @@ -167,8 +167,10 @@ break; } } + *fptr = '\0'; + newstr = malloc(sizeof(char) * PATH_MAX); if (!newstr) { syslog(LOG_ERR, @@ -198,9 +200,9 @@ struct list_head list; char *path; }; -static int make_tree(const char *path, int mode) +static int make_tree(const char *path, mode_t mode) { struct stat stat_buf; char *ptr, *tmp; int rc; @@ -318,9 +320,9 @@ static int open_socket() { int rc; - struct sockaddr_in servaddr = {0, }; + struct sockaddr_in servaddr; sock_fd = socket(PF_INET, SOCK_DGRAM, 0); if (sock_fd < 0) { @@ -437,9 +439,9 @@ { int rc; static int block = 1; - rc = recvfrom(sock_fd, buf, bufsize, 0, + rc = recvfrom(fd, buf, bufsize, 0, (struct sockaddr *)from, fromlen); if (rc < 0) { rc = -errno; @@ -481,9 +483,9 @@ int rc; char *buf; size_t bufsize = 8 * getpagesize(); struct sockaddr_in from; - socklen_t fromlen; + socklen_t fromlen = sizeof(from); buf = malloc(sizeof(char) * bufsize); if (!buf) { @@ -568,9 +570,9 @@ } static int valid_format() { - struct in_addr addr = {0, }; + struct in_addr addr; char *name; int rc; name = get_path(PF_INET, &addr); @@ -598,11 +600,13 @@ exit(rc); } +/* extern char *optarg; extern int optopt; extern int opterr; +*/ static int parse_options(int argc, char *argv[]) { int c; @@ -640,13 +644,13 @@ PROGNAME ": Invalid log prefix \"%s\"\n", optarg); print_usage(-EINVAL); } - log_prefix = optarg; + log_prefix = strdup(optarg); break; case 'o': - log_format = optarg; + log_format = strdup(optarg); if (!log_format || !*log_format || !valid_format()) { fprintf(stderr, PROGNAME ": Invalid log filename format \"%s\"\n",