xref: /freebsd/usr.bin/fsync/fsync.c (revision 5e3934b15a2741b2de6b217e77dc9d798d740804)
14aeb1c05SPaul Saab /*-
2*4d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
31de7b4b8SPedro F. Giffuni  *
44aeb1c05SPaul Saab  * Copyright (c) 2000 Paul Saab <ps@FreeBSD.org>
54aeb1c05SPaul Saab  * All rights reserved.
64aeb1c05SPaul Saab  *
74aeb1c05SPaul Saab  * Redistribution and use in source and binary forms, with or without
84aeb1c05SPaul Saab  * modification, are permitted provided that the following conditions
94aeb1c05SPaul Saab  * are met:
104aeb1c05SPaul Saab  * 1. Redistributions of source code must retain the above copyright
114aeb1c05SPaul Saab  *    notice, this list of conditions and the following disclaimer.
124aeb1c05SPaul Saab  * 2. Redistributions in binary form must reproduce the above copyright
134aeb1c05SPaul Saab  *    notice, this list of conditions and the following disclaimer in the
144aeb1c05SPaul Saab  *    documentation and/or other materials provided with the distribution.
154aeb1c05SPaul Saab  *
164aeb1c05SPaul Saab  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
174aeb1c05SPaul Saab  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
184aeb1c05SPaul Saab  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
194aeb1c05SPaul Saab  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
204aeb1c05SPaul Saab  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
214aeb1c05SPaul Saab  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
224aeb1c05SPaul Saab  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
234aeb1c05SPaul Saab  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
244aeb1c05SPaul Saab  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
254aeb1c05SPaul Saab  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
264aeb1c05SPaul Saab  * SUCH DAMAGE.
274aeb1c05SPaul Saab  */
284aeb1c05SPaul Saab 
294aeb1c05SPaul Saab #include <err.h>
304aeb1c05SPaul Saab #include <fcntl.h>
314aeb1c05SPaul Saab #include <stdio.h>
32948a3f54SDima Dorfman #include <stdlib.h>
334aeb1c05SPaul Saab #include <sysexits.h>
344aeb1c05SPaul Saab #include <unistd.h>
354aeb1c05SPaul Saab 
36e5faa1a4SSuleiman Souhlal static void	usage(void);
374aeb1c05SPaul Saab 
384aeb1c05SPaul Saab int
main(int argc,char * argv[])394aeb1c05SPaul Saab main(int argc, char *argv[])
404aeb1c05SPaul Saab {
414aeb1c05SPaul Saab 	int fd;
424aeb1c05SPaul Saab 	int i;
43e5faa1a4SSuleiman Souhlal 	int rval;
444aeb1c05SPaul Saab 
4539aa7c9dSXin LI 	if (argc < 2) {
464aeb1c05SPaul Saab 		usage();
4739aa7c9dSXin LI 		/* NOTREACHED */
4839aa7c9dSXin LI 	}
494aeb1c05SPaul Saab 
5039aa7c9dSXin LI 	rval = EX_OK;
514aeb1c05SPaul Saab 	for (i = 1; i < argc; ++i) {
5239aa7c9dSXin LI 		if ((fd = open(argv[i], O_RDONLY)) == -1) {
53e5faa1a4SSuleiman Souhlal 			warn("open %s", argv[i]);
5439aa7c9dSXin LI 			if (rval == EX_OK)
5539aa7c9dSXin LI 				rval = EX_NOINPUT;
56e5faa1a4SSuleiman Souhlal 			continue;
57e5faa1a4SSuleiman Souhlal 		}
584aeb1c05SPaul Saab 
5939aa7c9dSXin LI 		if (fsync(fd) == -1) {
60e5faa1a4SSuleiman Souhlal 			warn("fsync %s", argv[i]);
6139aa7c9dSXin LI 			if (rval == EX_OK)
6239aa7c9dSXin LI 				rval = EX_OSERR;
63e5faa1a4SSuleiman Souhlal 		}
644aeb1c05SPaul Saab 		close(fd);
654aeb1c05SPaul Saab 	}
6639aa7c9dSXin LI 	exit(rval);
6739aa7c9dSXin LI 	/* NOTREACHED */
684aeb1c05SPaul Saab }
694aeb1c05SPaul Saab 
70e5faa1a4SSuleiman Souhlal static void
usage(void)7139aa7c9dSXin LI usage(void)
724aeb1c05SPaul Saab {
7339aa7c9dSXin LI 
74176e8228SPaul Saab 	fprintf(stderr, "usage: fsync file ...\n");
754aeb1c05SPaul Saab 	exit(EX_USAGE);
7639aa7c9dSXin LI 	/* NOTREACHED */
774aeb1c05SPaul Saab }
78