|
|
1.1 ! root 1: /* Compare two open file descriptors to see if they refer to the same file. ! 2: Copyright (C) 1991 Free Software Foundation, Inc. ! 3: ! 4: This file is part of the libiberty library. ! 5: Libiberty is free software; you can redistribute it and/or ! 6: modify it under the terms of the GNU Library General Public ! 7: License as published by the Free Software Foundation; either ! 8: version 2 of the License, or (at your option) any later version. ! 9: ! 10: Libiberty is distributed in the hope that it will be useful, ! 11: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ! 13: Library General Public License for more details. ! 14: ! 15: You should have received a copy of the GNU Library General Public ! 16: License along with libiberty; see the file COPYING.LIB. If ! 17: not, write to the Free Software Foundation, Inc., 675 Mass Ave, ! 18: Cambridge, MA 02139, USA. */ ! 19: ! 20: ! 21: /* ! 22: ! 23: NAME ! 24: ! 25: fdmatch -- see if two file descriptors refer to same file ! 26: ! 27: SYNOPSIS ! 28: ! 29: int fdmatch (int fd1, int fd2) ! 30: ! 31: DESCRIPTION ! 32: ! 33: Check to see if two open file descriptors refer to the same file. ! 34: This is useful, for example, when we have an open file descriptor ! 35: for an unnamed file, and the name of a file that we believe to ! 36: correspond to that fd. This can happen when we are exec'd with ! 37: an already open file (stdout for example) or from the SVR4 /proc ! 38: calls that return open file descriptors for mapped address spaces. ! 39: All we have to do is open the file by name and check the two file ! 40: descriptors for a match, which is done by comparing major&minor ! 41: device numbers and inode numbers. ! 42: ! 43: BUGS ! 44: ! 45: (FIXME: does this work for networks?) ! 46: It works for NFS, which assigns a device number to each mount. ! 47: ! 48: */ ! 49: ! 50: #include <sys/types.h> ! 51: #include <sys/stat.h> ! 52: ! 53: int fdmatch (fd1, fd2) ! 54: int fd1; ! 55: int fd2; ! 56: { ! 57: struct stat sbuf1; ! 58: struct stat sbuf2; ! 59: ! 60: if ((fstat (fd1, &sbuf1) == 0) && ! 61: (fstat (fd2, &sbuf2) == 0) && ! 62: (sbuf1.st_dev == sbuf2.st_dev) && ! 63: (sbuf1.st_ino == sbuf2.st_ino)) ! 64: { ! 65: return (1); ! 66: } ! 67: else ! 68: { ! 69: return (0); ! 70: } ! 71: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.