truncate: always set mode when opening file to avoid fortify errors
[oweals/busybox.git] / coreutils / fsync.c
1 /* vi: set sw=4 ts=4: */
2 /*
3  * Mini fsync implementation for busybox
4  *
5  * Copyright (C) 2008 Nokia Corporation. All rights reserved.
6  *
7  * Licensed under GPLv2 or later, see file LICENSE in this source tree.
8  */
9
10 //usage:#define fsync_trivial_usage
11 //usage:       "[-d] FILE..."
12 //usage:#define fsync_full_usage "\n\n"
13 //usage:       "Write files' buffered blocks to disk\n"
14 //usage:     "\n        -d      Avoid syncing metadata"
15
16 #include "libbb.h"
17 #ifndef O_NOATIME
18 # define O_NOATIME 0
19 #endif
20
21 /* This is a NOFORK applet. Be very careful! */
22
23 int fsync_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
24 int fsync_main(int argc UNUSED_PARAM, char **argv)
25 {
26         int status;
27         int opts;
28
29         opts = getopt32(argv, "d"); /* fdatasync */
30         argv += optind;
31         if (!*argv) {
32                 bb_show_usage();
33         }
34
35         status = EXIT_SUCCESS;
36         do {
37                 int fd = open_or_warn(*argv, O_NOATIME | O_NOCTTY | O_RDONLY);
38
39                 if (fd == -1) {
40                         status = EXIT_FAILURE;
41                         continue;
42                 }
43                 if ((opts ? fdatasync(fd) : fsync(fd))) {
44                         //status = EXIT_FAILURE; - do we want this?
45                         bb_simple_perror_msg(*argv);
46                 }
47                 close(fd);
48         } while (*++argv);
49
50         return status;
51 }