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]

[BUG] rename("symlink", "regular_file") has weird results


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Suppose "foo.tmp" is a symlink, and "foo" is a regular file.

Calling rename("foo.tmp", "foo") results in the very bizarre situation
where, as far as Cygwin is concerned, there are TWO files called "foo"
within the same directory.

Below is a small C program to reproduce this state of affairs.

Max.

=====================================================================

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>

#define M1BAD(x) if ((x) == -1) { handle_error(#x); }
#define ZOK(x) if ((x) != 0) { handle_error(#x); }
static void handle_error(char *op)
{
    fprintf(stderr, "E: %s: %s\n", op, strerror(errno));
    exit(1);
}

int main(void)
{
  int fd;

  M1BAD(fd = open("foo", O_CREAT, 0644));
  ZOK(close(fd));

  ZOK(symlink("nonexistent", "foo.tmp"));

  ZOK(rename("foo.tmp", "foo"));

  return 0;
}

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (Cygwin)

iD8DBQFED1xzfFNSmcDyxYARAt9aAKCYNk2A4N0PNNv/Xi42WEE0h5ZJGgCfYfa/
F/Rm9fGDC1vQJKooGL/cYcs=
=+BiT
-----END PGP SIGNATURE-----

--
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]