X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fcycle-check.h;h=afd7a8f2b962f9ccfcc230759b891ec90ff7177d;hb=471815b5cfb17e9a6b4ea985cc18edb87e26f30f;hp=7b7f54d145c04208be71c006c47f2f3c92f3a12c;hpb=53115a537a914f32506050c056d4e327621ac9a7;p=gnulib.git diff --git a/lib/cycle-check.h b/lib/cycle-check.h index 7b7f54d14..afd7a8f2b 100644 --- a/lib/cycle-check.h +++ b/lib/cycle-check.h @@ -1,6 +1,6 @@ /* help detect directory cycles efficiently - Copyright (C) 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -15,21 +15,17 @@ You should have received a copy of the GNU General Public License along with this program; see the file COPYING. If not, write to the Free Software Foundation, - 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Jim Meyering */ #ifndef CYCLE_CHECK_H # define CYCLE_CHECK_H 1 -# if HAVE_INTTYPES_H -# include -# endif -# if HAVE_STDINT_H -# include -# endif +# include # include # include "dev-ino.h" +# include "same-inode.h" struct cycle_check_state { @@ -41,4 +37,18 @@ struct cycle_check_state void cycle_check_init (struct cycle_check_state *state); bool cycle_check (struct cycle_check_state *state, struct stat const *sb); +# define CYCLE_CHECK_REFLECT_CHDIR_UP(State, SB_dir, SB_subdir) \ + do \ + { \ + /* You must call cycle_check at least once before using this macro. */ \ + if ((State)->chdir_counter == 0) \ + abort (); \ + if (SAME_INODE ((State)->dev_ino, SB_subdir)) \ + { \ + (State)->dev_ino.st_dev = (SB_dir).st_dev; \ + (State)->dev_ino.st_ino = (SB_dir).st_ino; \ + } \ + } \ + while (0) + #endif