This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

link() bug


I created a program that demonstrates a bug with link() in Cygwin.
The program first creates a file named "dummy" and then creates 1050
hard links to file "dummy" by calling link().  link() reports no error
for all 1050 calls.  However when an "ls -la dummy" is performed, only
1024 hard links to dummy are reported.  In addition, if an ls -la is
performed on any hard link greater than 1023, then the report is that
there is only one hard link to the underlying inode.  If link() cannot
perform the hard link properly, then it should report an error which
it does not. Source and makefile are included to demonstrate the bug.

source:

#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>

extern int errno;

int main() 
{
  FILE* f = fopen("dummy", "w");
  fclose(f);
  char buff[1000];
  for (int i=0; i < 1050; ++i) {
    sprintf(buff, "%d", i);
    int err = link("dummy", buff);
    switch(err) {
    case 0:
      printf("no error: %d\n", i);
      break;
    case -1:
      printf("error: %s\n", strerror(errno));
      break;
    }
  }
}

makefile:

test: main.cc 
	g++ -o test main.cc


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]