fsync: new applet by Pekka Pessi (Pekka.Pessi AT nokia.com)

function                                             old     new   delta
fsync_main                                             -     128    +128
fdatasync                                              -      39     +39
packed_usage                                       26596   26622     +26
applet_names                                        2098    2104      +6
applet_main                                         1240    1244      +4
applet_nameofs                                       620     622      +2
applet_install_loc                                   155     156      +1
------------------------------------------------------------------------------
(add/remove: 2/0 grow/shrink: 5/0 up/down: 206/0)             Total: 206 bytes

Signed-off-by: Alexander Shishkin <virtuoso@slind.org>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2009-06-18 08:20:02 +02:00
parent 7eaf58d958
commit 14f6f0ad4a
5 changed files with 57 additions and 1 deletions

View File

@ -249,6 +249,12 @@ config FOLD
help
Wrap text to fit a specific width.
config FSYNC
bool "fsync"
default n
help
fsync is used to flush file-related cached blocks to disk.
config HEAD
bool "head"
default n

View File

@ -36,6 +36,7 @@ lib-$(CONFIG_EXPR) += expr.o
lib-$(CONFIG_EXPAND) += expand.o
lib-$(CONFIG_FALSE) += false.o
lib-$(CONFIG_FOLD) += fold.o
lib-$(CONFIG_FSYNC) += fsync.o
lib-$(CONFIG_HEAD) += head.o
lib-$(CONFIG_HOSTID) += hostid.o
lib-$(CONFIG_ID) += id.o

41
coreutils/fsync.c Normal file
View File

@ -0,0 +1,41 @@
/* 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 tarball for details.
*/
#include "libbb.h"
/* 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 = open3_or_warn(*argv, O_NOATIME | O_NOCTTY | O_RDONLY, 0);
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;
}

View File

@ -165,6 +165,7 @@ IF_FSCK(APPLET(fsck, _BB_DIR_SBIN, _BB_SUID_NEVER))
//IF_E2FSCK(APPLET_ODDNAME(fsck.ext2, e2fsck, _BB_DIR_SBIN, _BB_SUID_NEVER, fsck_ext2))
//IF_E2FSCK(APPLET_ODDNAME(fsck.ext3, e2fsck, _BB_DIR_SBIN, _BB_SUID_NEVER, fsck_ext3))
IF_FSCK_MINIX(APPLET_ODDNAME(fsck.minix, fsck_minix, _BB_DIR_SBIN, _BB_SUID_NEVER, fsck_minix))
IF_FSYNC(APPLET_NOFORK(fsync, fsync, _BB_DIR_BIN, _BB_SUID_NEVER, fsync))
IF_FTPD(APPLET(ftpd, _BB_DIR_USR_SBIN, _BB_SUID_NEVER))
IF_FTPGET(APPLET_ODDNAME(ftpget, ftpgetput, _BB_DIR_USR_BIN, _BB_SUID_NEVER, ftpget))
IF_FTPPUT(APPLET_ODDNAME(ftpput, ftpgetput, _BB_DIR_USR_BIN, _BB_SUID_NEVER, ftpput))

View File

@ -4209,7 +4209,14 @@
#define sync_trivial_usage \
""
#define sync_full_usage "\n\n" \
"Write all buffered filesystem blocks to disk"
"Write all buffered blocks to disk"
#define fsync_trivial_usage \
"[OPTION]... FILE..."
#define fsync_full_usage \
"Write files' buffered blocks to disk\n" \
"\nOptions:" \
"\n -d Avoid syncing metadata"
#define sysctl_trivial_usage \
"[OPTIONS]... [VALUE]..."