[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Quilt-dev] [patch 7/8]
From: |
Dean Roehrich |
Subject: |
Re: [Quilt-dev] [patch 7/8] |
Date: |
Tue, 13 Sep 2005 17:28:14 -0500 |
User-agent: |
Mutt/1.5.9i |
Gary,
Would you take a look at Joe's patches on
http://zeroj.hda0.net/quilt-patches/
and make sure you've covered everything he's trying to do with backup-files.c?
I don't have fts.h and friends on Solaris 10, as far as I can see, so I'm a
bit leary about giving up ftw/nftw.
Dean
On Tue, Sep 13, 2005 at 10:25:53PM +0100, Gary V. Vaughan wrote:
> Although Mac OS X 10.4 (I'm running 10.4.2) has nftw and ftw compatibility
> functions, and code that uses them seems to build and link properly: the
> resulting calls do nothing, which breaks `quilt pop' at least.
>
> This patch reimplements the file tree walk using the fts api <fts.h>,
> which is fully supported.
>
> lib/backup-files.c | 59
> +++++++++++++++++++++++++++++++++++++++--------------
> 1 files changed, 44 insertions(+), 15 deletions(-)
>
> Index: quilt-HEAD/lib/backup-files.c
> ===================================================================
> --- quilt-HEAD.orig/lib/backup-files.c
> +++ quilt-HEAD/lib/backup-files.c
> @@ -1,7 +1,7 @@
> /*
> File: backup-files.c
>
> - Copyright (C) 2003 Andreas Gruenbacher <address@hidden>
> + Copyright (C) 2003, 2005 Andreas Gruenbacher <address@hidden>
> SuSE Labs, SuSE Linux AG
>
> This program is free software; you can redistribute it and/or
> @@ -37,7 +37,7 @@
> #include <errno.h>
> #include <string.h>
> #include <alloca.h>
> -#include <ftw.h>
> +#include <fts.h>
>
> const char *progname;
>
> @@ -107,7 +107,7 @@ remove_parents(char *filename)
> *g = '/';
> g = f;
> *f= '\0';
> -
> +
> rmdir(filename);
> }
> if (g != NULL)
> @@ -184,7 +184,7 @@ ensure_nolinks(const char *filename)
> from_fd = open(filename, O_RDONLY);
> if (from_fd == -1)
> goto fail;
> -
> +
> /* Temp file name is "path/to/.file.XXXXXX" */
> strcpy(tmpname, filename);
> strcat(tmpname, ".XXXXXX");
> @@ -195,7 +195,7 @@ ensure_nolinks(const char *filename)
> c++;
> memmove(c + 1, c, strlen(c) + 1);
> *c = '.';
> -
> +
> to_fd = mkstemp(tmpname);
> if (to_fd == -1)
> goto fail;
> @@ -312,17 +312,22 @@ process_file(const char *file)
> }
>
> int
> -walk(const char *path, const struct stat *stat, int flag, struct FTW *ftw)
> +ftswalk(const char *path)
> {
> + struct stat st;
> size_t prefix_len=strlen(opt_prefix), suffix_len=strlen(opt_suffix);
> size_t len = strlen(path);
> char *p;
>
> - if (flag == FTW_DNR) {
> + if (stat(path, &st) != 0) {
> + /* Ignore non-existing files. */
> + return 0;
> + }
> + if (S_ISDIR(st.st_mode) && (access(path, R_OK|X_OK) != 0)) {
> perror(path);
> return 1;
> }
> - if (!S_ISREG(stat->st_mode))
> + if (!S_ISREG(st.st_mode))
> return 0;
> if (strncmp(opt_prefix, path, prefix_len))
> return 0; /* prefix does not match */
> @@ -332,6 +337,7 @@ walk(const char *path, const struct stat
> p = alloca(len - prefix_len - suffix_len + 1);
> memcpy(p, path + prefix_len, len - prefix_len - suffix_len);
> p[len - prefix_len - suffix_len] = '\0';
> +
> return process_file(p);
> }
>
> @@ -339,7 +345,7 @@ int
> main(int argc, char *argv[])
> {
> int opt, status=0;
> -
> +
> progname = argv[0];
>
> while ((opt = getopt(argc, argv, "brxB:z:f:shLt")) != -1) {
> @@ -359,7 +365,7 @@ main(int argc, char *argv[])
> case 'B':
> opt_prefix = optarg;
> break;
> -
> +
> case 'f':
> opt_file = optarg;
> break;
> @@ -413,7 +419,7 @@ main(int argc, char *argv[])
> *(l-1) = '\0';
> if (*line == '\0')
> continue;
> -
> +
> if ((status = process_file(line)) != 0)
> return status;
> }
> @@ -424,13 +430,36 @@ main(int argc, char *argv[])
> }
> for (; optind < argc; optind++) {
> if (strcmp(argv[optind], "-") == 0) {
> - char *dir = strdup(opt_prefix), *d = strrchr(dir, '/');
> + FTS *fts;
> + FTSENT *entry;
> + char *dir[2], *d;
> +
> + dir[0] = strdup(opt_prefix);
> + dir[1] = 0;
> + d = strrchr(dir[0], '/');
> if (d)
> - *(d+1) = '\0';
> + *d = '\0';
> else
> d = ".";
> - status = nftw(dir, walk, 0, 0);
> - free(dir);
> +
> + fts = fts_open(dir, FTS_PHYSICAL|FTS_NOCHDIR, 0);
> +
> + free(dir[0]);
> +
> + if (!fts) {
> + perror(dir[0]);
> + return 1;
> + }
> +
> + while ((entry = fts_read(fts)) != 0) {
> + if (ftswalk(entry->fts_path) != 0) {
> + status = 1;
> + break;
> + }
> + }
> + if (fts_close(fts) != 0)
> + status = 1;
> +
> } else
> status = process_file(argv[optind]);
> if (status)
>
> --
> Gary V. Vaughan ())_. address@hidden,gnu.org}
> Research Scientist ( '/ http://tkd.kicks-ass.net
> GNU Hacker / )= http://www.gnu.org/software/libtool
> Technical Author `(_~)_ http://sources.redhat.com/autobook
>
>
> _______________________________________________
> Quilt-dev mailing list
> address@hidden
> http://lists.nongnu.org/mailman/listinfo/quilt-dev
- Re: [Quilt-dev] workaround "received broken pipe signal" bash bug (was [patch 2/8]), (continued)
Re: [Quilt-dev] [patch 2/8], Jean Delvare, 2005/09/14
Re: [Quilt-dev] [patch 2/8], Peter Williams, 2005/09/14
Re: [Quilt-dev] [patch 2/8], Gary V. Vaughan, 2005/09/15
[Quilt-dev] [patch 7/8], gary, 2005/09/13
- Re: [Quilt-dev] [patch 7/8],
Dean Roehrich <=
- Re: [Quilt-dev] [patch 7/8] nftw portability, Gary V. Vaughan, 2005/09/14
- Re: [Quilt-dev] [patch 7/8] nftw portability, Jean Delvare, 2005/09/14
- Re: [Quilt-dev] [patch 7/8] nftw portability, Dean Roehrich, 2005/09/14
- Re: [Quilt-dev] [patch 7/8] nftw portability, John Vandenberg, 2005/09/14
- Re: [Quilt-dev] [patch 7/8] nftw portability, Gary V. Vaughan, 2005/09/15
[Quilt-dev] [patch 5/8], gary, 2005/09/13