Changeset 3621 in MondoRescue for branches/3.3/mindi-busybox/coreutils/sync.c
- Timestamp:
- Dec 20, 2016, 4:07:32 PM (7 years ago)
- Location:
- branches/3.3
- Files:
-
- 1 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/3.3/mindi-busybox/coreutils/sync.c
r3232 r3621 4 4 * 5 5 * Copyright (C) 1995, 1996 by Bruce Perens <bruce@pixar.com>. 6 * Copyright (C) 2015 by Ari Sundholm <ari@tuxera.com> 6 7 * 7 8 * Licensed under GPLv2 or later, see file LICENSE in this source tree. … … 9 10 10 11 /* BB_AUDIT SUSv3 N/A -- Matches GNU behavior. */ 12 //config:config SYNC 13 //config: bool "sync" 14 //config: default y 15 //config: help 16 //config: sync is used to flush filesystem buffers. 17 //config:config FEATURE_SYNC_FANCY 18 //config: bool "Enable -d and -f flags (requres syncfs(2) in libc)" 19 //config: default y 20 //config: depends on SYNC 21 //config: help 22 //config: sync -d FILE... executes fdatasync() on each FILE. 23 //config: sync -f FILE... executes syncfs() on each FILE. 24 25 //kbuild:lib-$(CONFIG_SYNC) += sync.o 26 //applet:IF_SYNC(APPLET_NOFORK(sync, sync, BB_DIR_BIN, BB_SUID_DROP, sync)) 11 27 12 28 //usage:#define sync_trivial_usage 13 //usage: "" 29 //usage: ""IF_FEATURE_SYNC_FANCY("[-df] [FILE]...") 14 30 //usage:#define sync_full_usage "\n\n" 31 //usage: IF_NOT_FEATURE_SYNC_FANCY( 15 32 //usage: "Write all buffered blocks to disk" 33 //usage: ) 34 //usage: IF_FEATURE_SYNC_FANCY( 35 //usage: "Write all buffered blocks (in FILEs) to disk" 36 //usage: "\n -d Avoid syncing metadata" 37 //usage: "\n -f Sync filesystems underlying FILEs" 38 //usage: ) 16 39 17 40 #include "libbb.h" … … 22 45 int sync_main(int argc UNUSED_PARAM, char **argv IF_NOT_DESKTOP(UNUSED_PARAM)) 23 46 { 47 #if !ENABLE_FEATURE_SYNC_FANCY 24 48 /* coreutils-6.9 compat */ 25 49 bb_warn_ignoring_args(argv[1]); 50 sync(); 51 return EXIT_SUCCESS; 52 #else 53 unsigned opts; 54 int ret = EXIT_SUCCESS; 26 55 27 sync(); 56 enum { 57 OPT_DATASYNC = (1 << 0), 58 OPT_SYNCFS = (1 << 1), 59 }; 28 60 29 return EXIT_SUCCESS; 61 opt_complementary = "d--f:f--d"; 62 opts = getopt32(argv, "df"); 63 argv += optind; 64 65 /* Handle the no-argument case. */ 66 if (!argv[0]) 67 sync(); 68 69 while (*argv) { 70 int fd = open_or_warn(*argv, O_RDONLY); 71 72 if (fd < 0) { 73 ret = EXIT_FAILURE; 74 goto next; 75 } 76 if (opts & OPT_DATASYNC) { 77 if (fdatasync(fd)) 78 goto err; 79 goto do_close; 80 } 81 if (opts & OPT_SYNCFS) { 82 /* 83 * syncfs is documented to only fail with EBADF, 84 * which can't happen here. So, no error checks. 85 */ 86 syncfs(fd); 87 goto do_close; 88 } 89 if (fsync(fd)) { 90 err: 91 bb_simple_perror_msg(*argv); 92 ret = EXIT_FAILURE; 93 } 94 do_close: 95 close(fd); 96 next: 97 ++argv; 98 } 99 100 return ret; 101 #endif 30 102 }
Note:
See TracChangeset
for help on using the changeset viewer.