X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fcycle-check.h;h=afd7a8f2b962f9ccfcc230759b891ec90ff7177d;hb=a74dcd0c2df4149148181beea2a8b5190619dbbe;hp=0551bf265acd8177bf648b3dbd2956f5db5b5c17;hpb=267a39bafd249d7eb9c37df06dc6defcf41cb343;p=gnulib.git diff --git a/lib/cycle-check.h b/lib/cycle-check.h index 0551bf265..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 @@ -22,14 +22,10 @@ #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