Subject: link() bug
From: Jim Pritts <[email-masked]>
To: [email-masked]
Cc: [email-masked] (Paul Jarc)
Date: Mon, 02 Aug 2004 23:44:13 -0400

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/