Lines Matching refs:pfh
57 static int _pidfile_remove(struct pidfh *pfh, int freeit);
60 pidfile_verify(const struct pidfh *pfh) in pidfile_verify() argument
64 if (pfh == NULL || pfh->pf_fd == -1) in pidfile_verify()
69 if (fstat(pfh->pf_fd, &sb) == -1) in pidfile_verify()
71 if (sb.st_dev != pfh->pf_dev || sb.st_ino != pfh->pf_ino) in pidfile_verify()
106 struct pidfh *pfh; in pidfile_open() local
112 pfh = malloc(sizeof(*pfh)); in pidfile_open()
113 if (pfh == NULL) in pidfile_open()
117 dirlen = snprintf(pfh->pf_dir, sizeof(pfh->pf_dir), in pidfile_open()
119 filenamelen = snprintf(pfh->pf_filename, in pidfile_open()
120 sizeof(pfh->pf_filename), "%s.pid", getprogname()); in pidfile_open()
123 free(pfh); in pidfile_open()
127 dirlen = strlcpy(pfh->pf_dir, dirname(path), in pidfile_open()
128 sizeof(pfh->pf_dir)); in pidfile_open()
130 filenamelen = strlcpy(pfh->pf_filename, basename(path), in pidfile_open()
131 sizeof(pfh->pf_filename)); in pidfile_open()
134 if (dirlen >= (int)sizeof(pfh->pf_dir) || in pidfile_open()
135 filenamelen >= (int)sizeof(pfh->pf_filename)) { in pidfile_open()
136 free(pfh); in pidfile_open()
141 dirfd = open(pfh->pf_dir, O_CLOEXEC | O_DIRECTORY | O_NONBLOCK); in pidfile_open()
144 free(pfh); in pidfile_open()
155 fd = flopenat(dirfd, pfh->pf_filename, in pidfile_open()
167 pfh->pf_filename, pidptr); in pidfile_open()
180 free(pfh); in pidfile_open()
204 pfh->pf_dirfd = dirfd; in pidfile_open()
205 pfh->pf_fd = fd; in pidfile_open()
206 pfh->pf_dev = sb.st_dev; in pidfile_open()
207 pfh->pf_ino = sb.st_ino; in pidfile_open()
209 return (pfh); in pidfile_open()
213 unlinkat(dirfd, pfh->pf_filename, 0); in pidfile_open()
216 free(pfh); in pidfile_open()
222 pidfile_write(struct pidfh *pfh) in pidfile_write() argument
231 errno = pidfile_verify(pfh); in pidfile_write()
238 fd = pfh->pf_fd; in pidfile_write()
245 _pidfile_remove(pfh, 0); in pidfile_write()
253 _pidfile_remove(pfh, 0); in pidfile_write()
262 pidfile_close(struct pidfh *pfh) in pidfile_close() argument
266 error = pidfile_verify(pfh); in pidfile_close()
272 if (close(pfh->pf_fd) == -1) in pidfile_close()
274 if (close(pfh->pf_dirfd) == -1 && error == 0) in pidfile_close()
277 free(pfh); in pidfile_close()
286 _pidfile_remove(struct pidfh *pfh, int freeit) in _pidfile_remove() argument
290 error = pidfile_verify(pfh); in _pidfile_remove()
296 if (funlinkat(pfh->pf_dirfd, pfh->pf_filename, pfh->pf_fd, 0) == -1) { in _pidfile_remove()
301 if (close(pfh->pf_fd) == -1 && error == 0) in _pidfile_remove()
303 if (close(pfh->pf_dirfd) == -1 && error == 0) in _pidfile_remove()
306 free(pfh); in _pidfile_remove()
308 pfh->pf_fd = -1; in _pidfile_remove()
317 pidfile_remove(struct pidfh *pfh) in pidfile_remove() argument
320 return (_pidfile_remove(pfh, 1)); in pidfile_remove()
324 pidfile_fileno(const struct pidfh *pfh) in pidfile_fileno() argument
327 if (pfh == NULL || pfh->pf_fd == -1) { in pidfile_fileno()
331 return (pfh->pf_fd); in pidfile_fileno()