Thread (1 message) 1 message, 1 author, 2016-06-15

Re: [PATCH 2/8] Add a lockfile function to append to a file

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:44:29

Daniel Barkalow [off-list ref] writes:
+int hold_lock_file_for_append(struct lock_file *lk, const char *path, int die_on_error)
+{
+	int fd = lock_file(lk, path);
+	struct stat st;
+	if (!stat(path, &st)) {
+		int orig_fd = open(path, O_RDONLY);
+		size_t mmap_size = xsize_t(st.st_size);
+		void *mmap = xmmap(NULL, mmap_size, PROT_READ, MAP_PRIVATE,
+				   orig_fd, 0);
+		write_or_die(fd, mmap, mmap_size);
+		munmap(mmap, mmap_size);
+	}
+	if (fd < 0 && die_on_error)
+		die("unable to create '%s.lock': %s", path, strerror(errno));
+	return fd;
+}
Another glitch.  What should we do when stat(path) fails but the file
cannot be read?

I think the sequence actually should be:

	fd = lock_file();
        if (fd < 0)
        	error out;
	orig_fd = open(path, O_RDONLY);
        if (orig_fd < 0) {
		if (errno != ENOENT)
			die("unable to open %s", path);
		copy;
	}
	return fd;
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help