Compare commits

..
34 Commits
Author SHA1 Message Date
Joachim Nilsson fe1a3a731d Update ChangeLog and bump version for v1.5.1 release
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-04-17 16:27:02 +02:00
Joachim Nilsson cd073f5221 fcopyfile: Westermo fixes and code simplification
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-04-17 16:17:00 +02:00
Joachim Nilsson 1a9d3bd91b Spellcheck
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-04-17 01:25:46 +02:00
Joachim Nilsson 8cc267f259 Markdown formatting
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-04-17 01:03:53 +02:00
Joachim Nilsson 35d396ec27 Is --> Are, a --> an ...
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-04-17 01:02:09 +02:00
Joachim Nilsson 7e91307138 Add Table of Contents
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-04-17 00:54:22 +02:00
Joachim Nilsson 2b8f54fbc7 Update build & install instructions
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-04-17 00:53:57 +02:00
Joachim Nilsson 2e58dd3203 Simplify configure script
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-04-17 00:47:21 +02:00
Joachim Nilsson 41392f7e85 Remove bogus autoconf version requirement
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-04-17 00:46:58 +02:00
Joachim Nilsson e4329d6c25 Add some integration tips when using GNU autotools
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-04-17 00:46:14 +02:00
Joachim Nilsson 7113b3d1d8 Add basic TODO file to keep track of stuff
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-04-11 01:24:53 +02:00
Joachim Nilsson 9b6ef1f053 pidfile(): Activate use of utimensat() to update atime+mtime
Due to problems with the unit tests the use of utimensat() in pidfile()
was disabled, and forgotten.  This patch enables it, but beware, this
thing is QUICK on any system with a L2 cache or better.

Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-04-11 01:18:57 +02:00
Joachim Nilsson efc70e3a75 Update ChangeLog and bump version for v1.5.0 release
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-03-20 02:24:26 +01:00
Joachim Nilsson 147df0c6da ABI revision bump
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-03-20 02:21:33 +01:00
Joachim Nilsson 7f89000c6c pidfilefn.c: Update unittests, add mtime test and prettyfy output
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-03-20 02:15:35 +01:00
Joachim Nilsson 7607148d46 Build unit tests with -g -O0 for debugging
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-03-20 02:14:55 +01:00
Joachim Nilsson 979f76aea7 pidfile(): Use utimensat() to update atime+mtime
This patch update the `-lite` patch to OpenBSD `pidfile()` by changing
the update atime+mtime patch from writing the PID again to instead use
utimensat(). Less overhead and nanosecond resolution.

Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-03-20 02:14:30 +01:00
Joachim Nilsson ac41fa70aa Update ChangeLog and bump version to v1.5.0-dev
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-03-13 01:59:41 +01:00
Joachim Nilsson 5f820b17b6 Change namespace for header files libite/lite.h --> lite/lite.h
The `libite/` namespace for header files has been the same since the
first public release in v1.0.0.  This patch surprisingly changes it to
the less surprising `lite/`.  Hopefully there aren't that many users of
this library out there yet, apart from myself.

Apologies if you are affected!

Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-03-13 01:58:56 +01:00
Joachim Nilsson 53b715c094 Remove surprise from pkg-config output
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-03-13 00:38:53 +01:00
Joachim Nilsson 1b4cd7b20b Update ChangeLog and bump version for v1.4.4 release
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-02-23 14:23:12 +01:00
Joachim Nilsson 8e379ca358 Update ChangeLog
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-02-22 19:11:29 +01:00
Joachim Nilsson 12241dcdfe libite.pc.in: Remove spurious @LTLIBINTL@ after copy-paste from libConfuse
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-02-20 22:26:24 +01:00
Joachim Nilsson 0ce1b3bf44 Add pkg-config support
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-02-20 22:03:25 +01:00
Joachim Nilsson 38ff0af61a Update ChangeLog with details on issue #3
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-02-15 18:20:25 +01:00
Joachim Nilsson 00737a5b74 Merge pull request #3 from askerin/tempfile-archfix
Tempfile() is dependent on $ARCH

Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-02-12 16:15:53 +01:00
Joachim Nilsson 1b8b164ed4 Test build with both GCC and Clang (LLVM)
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-02-12 16:15:15 +01:00
Joachim Nilsson 9f279c0fec Disable sudo for build while auto-tests are reintegrated
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-02-12 16:14:59 +01:00
Johan Askerin 4d7e6d4f78 In tempfile(): O_DIRECTORY is dependent on $ARCH, don't hardcore O_TMPFILE
Signed-off-by: Johan Askerin <johan.askerin@gmail.com>
2016-02-12 15:17:25 +01:00
Joachim Nilsson 0a57f2128f Update ChangeLog and bump version for v1.4.3 release
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-02-02 09:37:40 +01:00
Joachim Nilsson e254db48a8 Remove AUTHORS file from distribution, doesn't exist
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-02-02 08:40:14 +01:00
Joachim Nilsson 0fe429dcbe Update ChangeLog in preparation for v1.4.3 release
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-02-02 08:25:16 +01:00
Joachim Nilsson f1a2e01775 Makefile.am: Update to install and distribute README.md, LICENSE, etc.
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-02-02 08:24:15 +01:00
Joachim Nilsson e5eef2ae59 Remove confusing symlinks, it's a brave Markdown world
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2016-02-02 08:22:13 +01:00
14 changed files with 273 additions and 77 deletions

No files matched your search

+7 -1
View File
@@ -4,7 +4,13 @@ language: c
# Some of the autotests may use sudo, so use non-dockerized build atm.
# http://stackoverflow.com/questions/26299552/travis-sudo-is-disabled
sudo: true
#sudo: true
sudo: false
# Test build with both GCC and Clang (LLVM)
compiler:
- gcc
- clang
# - make test
script:
-1
View File
@@ -1 +0,0 @@
ChangeLog.md
+56 -1
View File
@@ -4,6 +4,57 @@ Change Log
All notable changes to the project are documented in this file.
[v1.5.1][] - 2016-04-17
-----------------------
Minor fix release.
### Changes
- Update README.md, add help when libite is used in autotools projects.
Spell checking and minor cleanup.
### Fixes
- Activate use of `utimensat()` when `pidfile()` is called multiple
times. This reduces the overhead of calling open+write+close to
simply updating the mtime of the PID file.
- Westermo fixes for `fcopyfile()`: nothing copied on embedded PPC
system when using `tmpfile()` as source.
[v1.5.0][] - 2016-03-20
-----------------------
This release changes the header file namespace. Apologies for any
problems this may cause!
### Changes
- Change namespace for header files: `libite/` to `lite/`, e.g. using
`pkg-config` your C program must now `#include <lite/lite.h>`
- Update `pidfile()` to use `utimensat()` to update atime+mtime instead
of opening and writing PID again. Less overhead and nanonsecond res.
[v1.4.4][] - 2016-02-23
-----------------------
### Changes
- Add `ibite.pc.in` for `pkg-config` support.
### Fixes
- Fix issue #3: `tempfile()` fails with bad `O_TMPFILE` on some embedded
targets, in particular PowerPC. On systems with older GLIBC but with
a sufficiently new kernel `O_TMPFILE` is missing and the local libite
definition was wrong, hard coded for x86. Fixed by Johan Askerin.
[v1.4.3][] - 2016-02-02
-----------------------
### Fixes
- Remove symlinks to Markdown files from GIT
- Distribute and install Markdown files: README.md, etc.
[v1.4.2][] - 2016-01-23
-----------------------
@@ -104,7 +155,11 @@ All notable changes to the project are documented in this file.
Initial extraction of frog DNA from [Finit][]. See [README][] for API details.
[UNRELEASED]: https://github.com/troglobit/libite/compare/v1.4.2...HEAD
[UNRELEASED]: https://github.com/troglobit/libite/compare/v1.5.1...HEAD
[v1.5.1]: https://github.com/troglobit/libite/compare/v1.5.0...v1.5.1
[v1.5.0]: https://github.com/troglobit/libite/compare/v1.4.4...v1.5.0
[v1.4.4]: https://github.com/troglobit/libite/compare/v1.4.3...v1.4.4
[v1.4.3]: https://github.com/troglobit/libite/compare/v1.4.2...v1.4.3
[v1.4.2]: https://github.com/troglobit/libite/compare/v1.4.1...v1.4.2
[v1.4.1]: https://github.com/troglobit/libite/compare/v1.4.0...v1.4.1
[v1.4.0]: https://github.com/troglobit/libite/compare/v1.3.0...v1.4.0
+6 -3
View File
@@ -1,6 +1,7 @@
ACLOCAL_AMFLAGS = -I m4
lib_LTLIBRARIES = libite.la
pkgincludedir = $(includedir)/lite
pkginclude_HEADERS = lite.h queue.h conio.h tree.h
libite_la_SOURCES = chomp.c copyfile.c dir.c fexist.c fisdir.c fmode.c fsendfile.c \
ifconfig.c lfile.c makepath.c pidfile.c pidfilefn.c progress.c \
@@ -8,10 +9,12 @@ libite_la_SOURCES = chomp.c copyfile.c dir.c fexist.c fisdir.c fmode.c fsendfi
libite_la_CPPFLAGS = -D_GNU_SOURCE
libite_la_CFLAGS = -W -Wall -Wextra
libite_la_LDFLAGS = $(AM_LDFLAGS) -version-info 2:1:0
libite_la_LDFLAGS = $(AM_LDFLAGS) -version-info 2:2:0
doc_DATA = README LICENSE
#EXTRA_DIST = README.md AUTHORS LICENSE ChangeLog.md
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libite.pc
doc_DATA = README.md LICENSE
EXTRA_DIST = README.md LICENSE ChangeLog.md
## Generate MD5 checksum file
MD5 = md5sum
-1
View File
@@ -1 +0,0 @@
README.md
+64 -16
View File
@@ -2,16 +2,32 @@
===========================
[![Travis Status][]][Travis]
Table of Contents
-----------------
* [Introduction](#introduction)
* [Using -lite](#using--lite)
* [Helper Macros](#helper-macros)
* [Generic Functions](#generic-functions)
* [OpenBSD Functions](#openbsd-functions)
* [Build & Install](#origin--references)
* [TODO](#todo)
Introduction
------------
Libite is a lightweight library of *frog DNA*. It can be used to fill
the gaps in any dinosaur project. It holds useful functions and macros
developed by both [Finit][1] and the [OpenBSD][2] project. Most notably
the string functions: [strlcpy(3)][3], [strlcat(3)][3] and the highly
useful *BSD [sys/queue.h][4] and [sys/tree.h][7] API's.
Libite aims to fill in the gaps missing in GLIBC/EGLIBC. (It does not
aimo to become another [GLIB][5] though.) One such gap in GLIBC is the
missing `_SAFE` macros in `sys/queue.h` &mdash; highly recommended when
traversing lists to delete/free nodes.
Libite is the frog DNA missing in GNU libc. However, -lite does not aim
to become another [GLIB][5]! One noticeable gap in GLIBC is the missing
`_SAFE` macros in the BSD `sys/queue.h` API &mdash; highly recommended
when traversing lists to delete/free nodes.
The code is open sourced under a mix of the [MIT/X11 license][MIT], the
[ISC license][ISC] used by OpenBSD, and [BSD licenses][BSD], all of them
@@ -22,6 +38,38 @@ For an introduction to why Libite happened, and how you can use it, see
[this blog post][6].
Using -lite
-----------
Libite is by default installed as a library and a set of include files.
To prevent clashing with include files of the same name `-lite` employs
an include file namespace `lite/`, which is strongly recommended to use
in your applications:
#include <lite/lite.h>
#include <lite/conio.h>
#include <lite/queue.h>
#include <lite/tree.h>
The output from the `pkg-config` tool holds no surprises in this regard:
$ pkg-config --libs --static --cflags libite
-I/usr/local/include -L/usr/local/lib -lite
The prefix path `/usr/local/` shown here is only the default. Use the
`configure` script to select a different prefix when installing libite.
For GNU autotools based projects, use the following in `configure.ac`:
# Check for required libraries
PKG_CHECK_MODULES([lite], [libite >= 1.5.0])
and in your `Makefile.am`:
proggy_CFLAGS = $(lite_CFLAGS)
proggy_LDADD = $(lite_LIBS)
Helper Macros
-------------
@@ -40,15 +88,15 @@ Helper Macros
- `erase(path)`
Erase file/directory with `remove()`. Errors on stderr
Erase file/directory with `remove()`. Errors on `stderr`
- `makedir(path)`
Create directory, like `mkdir()`. Errors on stderr
Create directory, like `mkdir()`. Errors on `stderr`
- `makefifo(path)`
Create a FIFO, like `mkfifo()`. Errors on stderr
Create a FIFO, like `mkfifo()`. Errors on `stderr`
- `min(a,b)`/`max(a,b)`
@@ -56,7 +104,7 @@ Helper Macros
- `touch(path)`
Create a file, or update mtime. Errors on stderr
Create a file, or update mtime. Errors on `stderr`
- `S_ISEXEC(mode_t m)`
@@ -72,7 +120,7 @@ Helper Macros
- `ISOTHER(word,bit)`
Is any other bits, except bit, in (integer) word set?
Are any other bits, except bit, in (integer) word set?
- `SETBIT(word,bit)`
@@ -116,11 +164,11 @@ Generic Functions
- `fexist(file)`
Check for the existance of a file, returns True(1) or False(0).
Check for the existence of a file, returns True(1) or False(0).
- `fisdir(path)`
Check for the existance of a directory, returns True(1) or False(0).
Check for the existence of a directory, returns True(1) or False(0).
- `fmode(file)`
@@ -135,7 +183,7 @@ Generic Functions
- `ifconfig(ifname, addr, mask, up)`
Basic ifconfig like operations on an interface. Only supports IPv4
adresses. Note that mask is not CIDR notation.
addresses. Note that mask is not CIDR notation.
- `lfopen(file, sep)`, `lfclose(lf)`
@@ -144,7 +192,7 @@ Generic Functions
- `lftok(lf)`
Read tokens, delimeted by `sep`, from file opened with `lfopen()`.
Read tokens, delimited by `sep`, from file opened with `lfopen()`.
- `lfgetkey(lf, key)`
@@ -187,7 +235,7 @@ Generic Functions
existence of this file, so make sure to have your signal handlers
properly setup before calling this function.
The pidfile is removed when the program exits, using an `atexit()`
The PID file is removed when the program exits, using an `atexit()`
handler. However, depending on how the program terminates the file
may still exist even though the program is no longer running. This
is only a problem for clients.
@@ -279,8 +327,8 @@ weight utility library. Libite (LITE) employs the de facto standard GNU
configure and build system:
./configure
make all
make install
make -j5
make install-strip
TODO
+7
View File
@@ -0,0 +1,7 @@
TODO ... in no particular order
===============================
* Investigate adding FreeBSD pidfile_open() et al
* Investigate FreeBSD libutil library, could be useful for porting between unices
+2 -7
View File
@@ -1,19 +1,14 @@
# Use v2.61 for backwards compat with Ubuntu 12.04 LTS
AC_PREREQ([2.61])
AC_INIT(libite, 1.4.2, https://github.com/troglobit/libite/issues)
AC_INIT(libite, 1.5.1, https://github.com/troglobit/libite/issues)
AM_INIT_AUTOMAKE([1.11 foreign no-dist-gzip dist-xz])
AM_SILENT_RULES([yes])
AC_CONFIG_SRCDIR(lite.h)
AM_CONFIG_HEADER(config.h)
AC_CONFIG_FILES([Makefile])
AC_CONFIG_FILES([Makefile libite.pc])
AC_CONFIG_MACRO_DIR([m4])
AC_PROG_CC
AM_PROG_AR
LT_INIT
AC_HEADER_STDC
AC_C_CONST
AC_OUTPUT
+9 -13
View File
@@ -237,27 +237,23 @@ int movefile(char *src, char *dst)
*/
int fcopyfile(FILE *src, FILE *dst)
{
int ret;
char *buffer;
char *buf;
if (!src || !dst) {
errno = EINVAL;
return -1;
}
buffer = malloc(BUFSIZ);
if (!buffer)
buf = malloc(BUFSIZ);
if (!buf)
return -1;
ret = do_copy(fileno(src), fileno(dst), BUFSIZ, buffer, BUFSIZ);
if (ret > 0)
ret = 0;
else if (errno)
ret = -1;
while (fgets(buf, BUFSIZ, src))
fputs(buf, dst);
free(buf);
free(buffer);
return ret;
return 0;
}
#ifdef UNITTEST
@@ -267,7 +263,7 @@ int main(void)
{
int i = 0;
char *files[] = {
"/etc/passwd", "/tmp/tok", "/tmp/tok",
"/etc/passwd", "/tmp/mypwd", "/tmp/mypwd",
"/etc/passwd", "/tmp/", "/tmp/passwd",
"/etc/passwd", "/tmp", "/tmp/passwd",
NULL
+12
View File
@@ -0,0 +1,12 @@
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
Name: @PACKAGE@
Description: Frog DNA, basically
Version: @VERSION@
Requires:
Libs: -L${libdir} -lite
Cflags: -I${includedir}
+12 -2
View File
@@ -1,3 +1,4 @@
/* Updated by troglobit for libite/finit/uftpd projects 2016/03/19 */
/* $OpenBSD: pidfile.c,v 1.11 2015/06/03 02:24:36 millert Exp $ */
/* $NetBSD: pidfile.c,v 1.4 2001/02/19 22:43:42 cgd Exp $ */
@@ -30,6 +31,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/stat.h> /* utimensat() */
#include <sys/types.h>
#include <errno.h>
#include <paths.h>
@@ -50,16 +52,25 @@ int
pidfile(const char *basename)
{
int save_errno;
int atexit_already;
pid_t pid;
FILE *f;
if (basename == NULL)
basename = __progname;
pid = getpid();
atexit_already = 0;
if (pidfile_path != NULL) {
if (pid == pidfile_pid) {
utimensat(0, pidfile_path, NULL, 0);
return 0;
}
free(pidfile_path);
pidfile_path = NULL;
__pidfile_name = NULL;
atexit_already = 1;
}
/* _PATH_VARRUN includes trailing / */
@@ -74,7 +85,6 @@ pidfile(const char *basename)
return (-1);
}
pid = getpid();
if (fprintf(f, "%ld\n", (long)pid) <= 0 || fflush(f) != 0) {
save_errno = errno;
(void) fclose(f);
@@ -90,7 +100,7 @@ pidfile(const char *basename)
* LITE extension, no need to set up another atexit() handler
* if user only called us to update the mtime of the PID file
*/
if (pidfile_pid == pid)
if (atexit_already)
return (0);
pidfile_pid = pid;
+95 -30
View File
@@ -122,28 +122,110 @@ int pidfile_signal(const char *pidfile, int signal)
/********************************* UNIT TESTS ************************************/
#ifdef UNITTEST
#include <paths.h>
#include <stdarg.h>
#include <time.h>
#include "lite.h"
extern char *__progname;
static char PIDFILE[42];
static int verbose = 0;
static struct stat before, after;
static int test(int result, const char *fmt, ...)
{
char buf[80];
size_t len;
va_list ap;
const char success[] = " \e[1m[ OK ]\e[0m\n";
const char failure[] = " \e[7m[FAIL]\e[0m\n";
const char dots[] = " .....................................................................";
va_start(ap, fmt);
len = vsnprintf(buf, sizeof(buf), fmt, ap);
va_end(ap);
write(STDERR_FILENO, buf, len);
write(STDERR_FILENO, dots, 60 - len); /* pad with dots. */
if (!result)
write(STDERR_FILENO, success, strlen(success));
else
write(STDERR_FILENO, failure, strlen(failure));
return result;
}
static inline int timespec_newer(const struct timespec *a, const struct timespec *b)
{
if (a->tv_sec != b->tv_sec)
return a->tv_sec > b->tv_sec;
return a->tv_nsec > b->tv_nsec;
}
char *timespec2str(struct timespec *ts, char *buf, size_t len)
{
size_t ret, pos;
struct tm t;
memset(buf, 0, len);
tzset();
if (localtime_r(&(ts->tv_sec), &t) == NULL)
return buf;
ret = strftime(buf, len, "%F %T", &t);
if (ret == 0)
return buf;
len -= ret - 1;
pos = strlen(buf);
len -= pos;
snprintf(&buf[pos], len, ".%09ld", ts->tv_nsec);
return buf;
}
static void sigterm_handler(int UNUSED(signo))
{
printf("Exiting ...\n");
if (verbose)
printf("Exiting ...\n");
}
static void sigalrm_handler(int UNUSED(signo))
{
printf("Testing pidfile() ...\n");
pidfile(NULL);
if (!fexist(PIDFILE))
err(1, "pidfile() failed creating %s", PIDFILE);
err(1, "failed creating %s", PIDFILE);
stat(PIDFILE, &before);
}
int main(void)
static int mtime()
{
char cmd[80];
int ret;
char buf[80];
/* Must sleep a while here otherwise we execute too fast => no mtime change :-( */
usleep(10000);
if (verbose)
printf("Calling pidfile() again to update mtime ...\n");
pidfile(NULL);
stat(PIDFILE, &after);
ret = timespec_newer(&after.st_mtim, &before.st_mtim);
if (verbose) {
printf("Before: %s\n", timespec2str(&before.st_mtim, buf, sizeof(buf)));
printf("After : %s\n", timespec2str(&after.st_mtim, buf, sizeof(buf)));
}
return !ret;
}
int main(int argc, char *argv[])
{
if (argc > 1 && !strcmp(argv[1], "-v"))
verbose = 1;
snprintf(PIDFILE, sizeof(PIDFILE), "%s%s.pid", _PATH_VARRUN, __progname);
@@ -151,36 +233,19 @@ int main(void)
signal(SIGALRM, sigalrm_handler);
alarm(1);
printf("Testing pidfile_poll() ...\n");
if (!pidfile_poll(PIDFILE))
printf("Timed out!\n");
else
printf("We got signal!\n");
return test(pidfile_poll(PIDFILE) != getpid(), "Testing pidfile_poll()")
|| test(strcmp(__pidfile_name, PIDFILE), "Testing __pidfile_name vs guessed PID filename")
|| test(mtime(), "Testing mtime update of followup pidfile() call")
|| test(pidfile_signal(PIDFILE, SIGTERM), "Testing signalling ourselves")
;
printf("Reading pid file, should be %d ...\n", getpid());
printf("=> %d\n", pidfile_read(PIDFILE));
printf("\nComparing __pidfile_name with our guessed PID filename ...\n");
printf("strcmp(\"%s\",\n \"%s\") => %s\n\n", __pidfile_name, PIDFILE,
!strcmp(__pidfile_name, PIDFILE) ? "OK" : "FAIL");
/* Occular verification that calling pidfile() again updates mtime */
snprintf(cmd, sizeof(cmd), "ls -l --full-time %s", PIDFILE);
system(cmd);
printf("Before ^^ pidfile() vv after ...\n");
pidfile(NULL);
system(cmd);
printf("Signalling ourselves ...\n");
return pidfile_signal(PIDFILE, SIGTERM);
return 0;
}
#endif /* UTEST_PIDFN */
#endif /* UNITTEST */
/**
* Local Variables:
* compile-command: "make V=1 -f pidfilefn.mk"
* version-control: t
* indent-tabs-mode: t
* c-file-style: "linux"
* End:
+1 -1
View File
@@ -8,7 +8,7 @@ AR ?= $(CROSS)ar
STRIP ?= $(CROSS)strip
INSTALL := install --backup=off
STRIPINST := $(INSTALL) -s --strip-program=$(CROSS)strip -m 0755
CFLAGS += -g -O0
CPPFLAGS += -D_GNU_SOURCE
ARFLAGS = crus
+2 -1
View File
@@ -24,7 +24,8 @@
#ifndef O_TMPFILE /* Too old GLIBC or kernel */
#warning O_TMPFILE missing on your system, tempfile() may not work!
#define O_TMPFILE 020200000 /* Define and let it fail at runtime */
#define __O_TMPFILE 020000000
#define O_TMPFILE (__O_TMPFILE | O_DIRECTORY) /* Define and let it fail at runtime */
#endif
/**