123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- /* vi: set sw=4 ts=4: */
- /*
- * Mini fsync implementation for busybox
- *
- * Copyright (C) 2008 Nokia Corporation. All rights reserved.
- *
- * Licensed under GPLv2 or later, see file LICENSE in this source tree.
- */
- //config:config FSYNC
- //config: bool "fsync (3.7 kb)"
- //config: default y
- //config: help
- //config: fsync is used to flush file-related cached blocks to disk.
- //applet:IF_FSYNC(APPLET_NOFORK(fsync, fsync, BB_DIR_BIN, BB_SUID_DROP, fsync))
- //kbuild:lib-$(CONFIG_FSYNC) += fsync.o
- //usage:#define fsync_trivial_usage
- //usage: "[-d] FILE..."
- //usage:#define fsync_full_usage "\n\n"
- //usage: "Write files' buffered blocks to disk\n"
- //usage: "\n -d Avoid syncing metadata"
- #include "libbb.h"
- #ifndef O_NOATIME
- # define O_NOATIME 0
- #endif
- /* This is a NOFORK applet. Be very careful! */
- int fsync_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
- int fsync_main(int argc UNUSED_PARAM, char **argv)
- {
- int status;
- int opts;
- opts = getopt32(argv, "d"); /* fdatasync */
- argv += optind;
- if (!*argv) {
- bb_show_usage();
- }
- status = EXIT_SUCCESS;
- do {
- int fd = open_or_warn(*argv, O_NOATIME | O_NOCTTY | O_RDONLY);
- if (fd == -1) {
- status = EXIT_FAILURE;
- continue;
- }
- if ((opts ? fdatasync(fd) : fsync(fd))) {
- //status = EXIT_FAILURE; - do we want this?
- bb_simple_perror_msg(*argv);
- }
- close(fd);
- } while (*++argv);
- return status;
- }
|