From 2452b7a318fa81edac19d97b21945ef984f5340c Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 18 Jul 2007 16:43:56 +1000 Subject: [PATCH] added mkdir_preload --- mkdir_preload/Makefile | 11 +++++++++++ mkdir_preload/mkdir_preload.c | 30 ++++++++++++++++++++++++++++++ mkdir_preload/testprog.c | 21 +++++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 mkdir_preload/Makefile create mode 100644 mkdir_preload/mkdir_preload.c create mode 100644 mkdir_preload/testprog.c diff --git a/mkdir_preload/Makefile b/mkdir_preload/Makefile new file mode 100644 index 0000000..b6d7fe3 --- /dev/null +++ b/mkdir_preload/Makefile @@ -0,0 +1,11 @@ +CFLAGS=-Wall -fPIC -O2 +LIBS=-ldl + +all: mkdir_preload.so + +mkdir_preload.so: mkdir_preload.o + ld -shared -o $@ $^ $(LIBS) + +clean: + /bin/rm -f *.o *.so *~ + diff --git a/mkdir_preload/mkdir_preload.c b/mkdir_preload/mkdir_preload.c new file mode 100644 index 0000000..252c0dd --- /dev/null +++ b/mkdir_preload/mkdir_preload.c @@ -0,0 +1,30 @@ +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int mkdir(const char *pathname, mode_t mode) +{ + static int (*mkdir_orig)(const char *pathname, mode_t mode); + int logfd; + struct stat st; + if (!mkdir_orig) { + mkdir_orig = dlsym(RTLD_NEXT, "mkdir"); + } + logfd = open("/tmp/mkdir.log", O_APPEND|O_WRONLY|O_CREAT, 0666); + if (logfd != -1) { + dprintf(logfd, "%-8s %s\n", + stat(pathname, &st) == 0? "exist":"notexist", + pathname); + close(logfd); + } + return mkdir_orig(pathname, mode); +} diff --git a/mkdir_preload/testprog.c b/mkdir_preload/testprog.c new file mode 100644 index 0000000..e37d9cd --- /dev/null +++ b/mkdir_preload/testprog.c @@ -0,0 +1,21 @@ +void another_function(int *yy) +{ + /* add some local variables for "bt full" to see */ + int y = 7; + double foo = 1.2; + *yy = 2; +} + +void foo(int *x) +{ + /* add some local variables for "bt full" to see */ + int foovar = 7; + double myval = 1.2; + another_function(x); +} + +int main(void) +{ + foo((int *)3); + return 0; +} -- 2.34.1