Daniel Barkalow <barkalow@xxxxxxxxxxxx> 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; -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html