sysvinit/killproc-2.12.dif

180 lines
4.3 KiB
Plaintext

--- Makefile
+++ Makefile 2007-06-18 16:40:20.300899354 +0200
@@ -53,6 +53,7 @@ UBINPRG =
ifeq ($(DISTRO),SuSE)
UBINPRG += usleep
+ UBINPRG += fsync
endif
all: $(SBINPRG) $(UBINPRG)
@@ -72,8 +73,11 @@ checkproc: checkproc.c libinit.o
usleep: usleep.c
$(CC) $(CFLAGS) -o $@ $^
+fsync: fsync.c
+ $(CC) $(CFLAGS) -o $@ $^
+
clean:
- $(RM) *.o *~ killproc startproc checkproc pidofproc start_daemon usleep
+ $(RM) *.o *~ killproc startproc checkproc pidofproc start_daemon usleep fsync
install: $(TODO)
if test -n "$(SBINPRG)" ; then \
@@ -116,6 +120,8 @@ FILES = README \
libinit.h \
usleep.c \
usleep.1 \
+ fsync.c \
+ fsync.1 \
killproc-$(VERSION).lsm
dest:
--- checkproc.c
+++ checkproc.c 2007-03-09 14:05:44.000000000 +0100
@@ -162,8 +162,8 @@ int main(int argc, char **argv)
if (remember_pids(pid_file,fullname,root,flags) < 0)
exit(LSB_PROOFX);
- if (!remember && (flags & KILL))
- exit(LSB_NOPROC); /* New LSB: no pid file is no job */
+ if (!remember)
+ exit(LSB_STATUS_NOPROC); /* New LSB: no pid file is no job */
}
/* No pid file means that we have to search in /proc/ */
free(pid_file);
--- fsync.1
+++ fsync.1 2007-06-18 16:45:14.768333714 +0200
@@ -0,0 +1,39 @@
+.\"
+.\" Copyright 2007 Werner Fink, 2007 SuSE GmbH Nuernberg, Germany.
+.\"
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.TH FSYNC 1 "Jun 18, 2007" "Version 1.16" "The SuSE boot concept"
+.UC 1
+.SH NAME
+fsync \- synchronize the specified file with storage device
+.\"
+.SH SYNOPSIS
+.\"
+.B fsync
+.I file
+.\"
+.SH DESCRIPTION
+.B fsync
+synchronize the in-core state of the specified file with the storage device
+.\"
+.SH BUGS
+The
+.B fsync
+program uses the
+.BR fsync (2)
+function and therefore shows the same weaknesses
+by any system activity.
+\."
+.SH SEE ALSO
+.BR fsync (2),
+.BR fdatasync (2).
+\."
+.SH COPYRIGHT
+2007 Werner Fink,
+2007 SuSE GmbH Nuernberg, Germany.
+.SH AUTHOR
+Werner Fink <werner@suse.de>
--- fsync.c
+++ fsync.c 2007-06-18 16:37:20.393692218 +0200
@@ -0,0 +1,89 @@
+/*
+ * fsync.c File data sync for the specified file
+ *
+ * Usage: fsync file
+ *
+ * Copyright 2007 Werner Fink, 2007 SUSE LINUX Products GmbH, Germany.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Author: Werner Fink <werner@suse.de>
+ */
+
+#ifndef __USE_STRING_INLINES
+# define __USE_STRING_INLINES
+#endif
+#ifdef __NO_STRING_INLINES
+# undef __NO_STRING_INLINES
+#endif
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#include <string.h>
+#include <libgen.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+
+#define USAGE "Usage:\t%s file\n", we_are
+
+static char *we_are;
+int main(int argc, char **argv)
+{
+ int ret, fd, flags;
+ char *path, *dir = NULL;
+
+ if (argc != 2)
+ goto err;
+
+ if ((path = strdup(argv[1])) == (char*)0)
+ goto err;
+
+ dir = dirname(path);
+ flags = O_RDONLY|O_NOCTTY|O_NONBLOCK;
+
+ if (getuid() == 0)
+ flags |= O_NOATIME;
+
+ if ((fd = open(argv[1], flags)) < 0) {
+ if (errno != ENOENT)
+ goto err;
+ if ((fd = open(dir, flags|O_DIRECTORY)) < 0)
+ goto err;
+ ret = fsync(fd);
+ close(fd);
+ if (ret < 0)
+ goto err;
+ if ((fd = open(argv[1], flags)) < 0)
+ goto err;
+ }
+ ret = fsync(fd);
+ close(fd);
+ if (ret < 0)
+ goto err;
+
+ return 0;
+ /* Do this at the end for speed */
+err:
+ we_are = basename(argv[0]);
+ fprintf(stderr, USAGE);
+
+ if (argc > 1 && *(argv[1]) == '-') {
+ argv[1]++;
+ if (!strcmp(argv[1], "-help") || *(argv[1]) == 'h' || *(argv[1]) == '?') {
+ fprintf(stderr, "Do a fsync(2) on the specified file.\n\n");
+ fprintf(stderr, "Help options:\n");
+ fprintf(stderr, " -h, -?, --help display this help and exit.\n");
+ exit (0);
+ }
+ } else if (errno != 0)
+ fprintf(stderr, "%s: %s\n", argv[1], strerror(errno));
+ exit (1);
+}