Changeset 3621 in MondoRescue for branches/3.3/mindi-busybox/coreutils/sync.c


Ignore:
Timestamp:
Dec 20, 2016, 4:07:32 PM (7 years ago)
Author:
Bruno Cornec
Message:

New 3?3 banch for incorporation of latest busybox 1.25. Changing minor version to handle potential incompatibilities.

Location:
branches/3.3
Files:
1 edited
1 copied

Legend:

Unmodified
Added
Removed
  • branches/3.3/mindi-busybox/coreutils/sync.c

    r3232 r3621  
    44 *
    55 * Copyright (C) 1995, 1996 by Bruce Perens <bruce@pixar.com>.
     6 * Copyright (C) 2015 by Ari Sundholm <ari@tuxera.com>
    67 *
    78 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
     
    910
    1011/* 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))
    1127
    1228//usage:#define sync_trivial_usage
    13 //usage:       ""
     29//usage:       ""IF_FEATURE_SYNC_FANCY("[-df] [FILE]...")
    1430//usage:#define sync_full_usage "\n\n"
     31//usage:    IF_NOT_FEATURE_SYNC_FANCY(
    1532//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:    )
    1639
    1740#include "libbb.h"
     
    2245int sync_main(int argc UNUSED_PARAM, char **argv IF_NOT_DESKTOP(UNUSED_PARAM))
    2346{
     47#if !ENABLE_FEATURE_SYNC_FANCY
    2448    /* coreutils-6.9 compat */
    2549    bb_warn_ignoring_args(argv[1]);
     50    sync();
     51    return EXIT_SUCCESS;
     52#else
     53    unsigned opts;
     54    int ret = EXIT_SUCCESS;
    2655
    27     sync();
     56    enum {
     57        OPT_DATASYNC = (1 << 0),
     58        OPT_SYNCFS   = (1 << 1),
     59    };
    2860
    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
    30102}
Note: See TracChangeset for help on using the changeset viewer.