same-inode.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /* Determine whether two stat buffers are known to refer to the same file.
  2. Copyright (C) 2006, 2009-2023 Free Software Foundation, Inc.
  3. This file is free software: you can redistribute it and/or modify
  4. it under the terms of the GNU Lesser General Public License as
  5. published by the Free Software Foundation; either version 2.1 of the
  6. License, or (at your option) any later version.
  7. This file is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU Lesser General Public License for more details.
  11. You should have received a copy of the GNU Lesser General Public License
  12. along with this program. If not, see <https://www.gnu.org/licenses/>. */
  13. #ifndef SAME_INODE_H
  14. # define SAME_INODE_H 1
  15. # include <sys/types.h>
  16. # if defined __VMS && __CRTL_VER < 80200000
  17. # define SAME_INODE(a, b) \
  18. ((a).st_ino[0] == (b).st_ino[0] \
  19. && (a).st_ino[1] == (b).st_ino[1] \
  20. && (a).st_ino[2] == (b).st_ino[2] \
  21. && (a).st_dev == (b).st_dev)
  22. # elif defined _WIN32 && ! defined __CYGWIN__
  23. /* Native Windows. */
  24. # if _GL_WINDOWS_STAT_INODES
  25. /* stat() and fstat() set st_dev and st_ino to 0 if information about
  26. the inode is not available. */
  27. # define SAME_INODE(a, b) \
  28. (!((a).st_ino == 0 && (a).st_dev == 0) \
  29. && (a).st_ino == (b).st_ino && (a).st_dev == (b).st_dev)
  30. # else
  31. /* stat() and fstat() set st_ino to 0 always. */
  32. # define SAME_INODE(a, b) 0
  33. # endif
  34. # else
  35. # define SAME_INODE(a, b) \
  36. ((a).st_ino == (b).st_ino \
  37. && (a).st_dev == (b).st_dev)
  38. # endif
  39. #endif