diff options
| author | Mehmet Samet Duman <yongdohyun@projecttick.org> | 2026-04-02 18:29:45 +0300 |
|---|---|---|
| committer | Mehmet Samet Duman <yongdohyun@projecttick.org> | 2026-04-02 18:29:45 +0300 |
| commit | 4cf86e37e42f9f04ec4a41a28ffe466d2510438a (patch) | |
| tree | f47f010bc779e56073514311796a4c130f284546 /corebinutils/sync/sync.c | |
| parent | 1edb2cb7b8a720ba8ae4438947256515a93b7ca9 (diff) | |
| parent | a304c2b9dd922485b980b94fe635b512d9dce9c2 (diff) | |
| download | Project-Tick-4cf86e37e42f9f04ec4a41a28ffe466d2510438a.tar.gz Project-Tick-4cf86e37e42f9f04ec4a41a28ffe466d2510438a.zip | |
Add 'corebinutils/sync/' from commit 'a304c2b9dd922485b980b94fe635b512d9dce9c2'
git-subtree-dir: corebinutils/sync
git-subtree-mainline: 1edb2cb7b8a720ba8ae4438947256515a93b7ca9
git-subtree-split: a304c2b9dd922485b980b94fe635b512d9dce9c2
Diffstat (limited to 'corebinutils/sync/sync.c')
| -rw-r--r-- | corebinutils/sync/sync.c | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/corebinutils/sync/sync.c b/corebinutils/sync/sync.c new file mode 100644 index 0000000000..c1ff6f783b --- /dev/null +++ b/corebinutils/sync/sync.c @@ -0,0 +1,85 @@ +/*- + * SPDX-License-Identifier: BSD-3-Clause + * + * Copyright (c) 1987, 1993 + * The Regents of the University of California. All rights reserved. + * + * Copyright (c) 2026 + * Project Tick. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#define _POSIX_C_SOURCE 200809L + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +/* + * Linux libcs commonly hide sync(2) behind non-POSIX feature macros. + * Declare the documented interface explicitly so the port stays buildable + * under strict C/POSIX settings without enabling GNU extensions. + */ +extern void sync(void); + +static const char *progname = "sync"; + +static void usage_error(const char *fmt, ...) + __attribute__((format(printf, 1, 2), noreturn)); + +int +main(int argc, char *argv[]) +{ + const char *slash; + + if (argv[0] != NULL && argv[0][0] != '\0') { + slash = strrchr(argv[0], '/'); + progname = (slash != NULL && slash[1] != '\0') ? slash + 1 : argv[0]; + } + + if (argc > 1) + usage_error("unexpected argument: %s", argv[1]); + + sync(); + return (0); +} + +static void +usage_error(const char *fmt, ...) +{ + va_list ap; + + fprintf(stderr, "%s: ", progname); + + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); + + fprintf(stderr, "\nusage: %s\n", progname); + exit(1); +} |
