[cowdancer] 01/05: Reformat everything with the help of clang-format

James Clarke jrtc27 at moszumanska.debian.org
Wed Jan 18 18:50:40 UTC 2017


This is an automated email from the git hooks/post-receive script.

jrtc27 pushed a commit to branch master
in repository cowdancer.

commit 7b91535b93bd4fba4b2c8cc31a719dc0378636e5
Author: James Clarke <jrtc27 at debian.org>
Date:   Wed Jan 18 16:45:25 2017 +0000

    Reformat everything with the help of clang-format
    
    It sometimes does stupid things, so don't blindly run clang-format.
    Check the formatting is sensible, and fix up by hand if needed.
---
 .clang-format                |   91 ++
 benchmarking/time-output.c   |   68 +-
 cow-shell.c                  |  176 ++-
 cowbuilder.c                 | 1119 +++++++++----------
 cowbuilder_util.c            |   67 +-
 cowbuilder_util.h            |    5 +-
 cowdancer-ilistcreate.c      |   23 +-
 cowdancer-ilistdump.c        |   89 +-
 cowdancer.c                  | 1183 ++++++++++----------
 file.c                       |  266 ++---
 file.h                       |    9 +-
 forkexec.c                   |  223 ++--
 ilist.h                      |   26 +-
 ilistcreate.c                |  206 ++--
 initrd/qemuinit.c            |  249 ++---
 log.c                        |  296 +++--
 log.h                        |   30 +-
 main.c                       |    7 +-
 parameter.c                  | 1515 ++++++++++++-------------
 parameter.h                  |  171 ++-
 qemuarch.c                   |  241 ++--
 qemuarch.h                   |   16 +-
 qemubuilder.c                | 2524 +++++++++++++++++++++---------------------
 qemuipsanitize.c             |  108 +-
 qemuipsanitize.h             |    5 +-
 test_cowbuilder.c            |   47 +-
 test_cowbuilder_util.c       |   85 +-
 test_file.c                  |   89 +-
 test_forkexec.c              |   47 +-
 test_ilistcreate.c           |    9 +-
 test_parameter.c             |   69 +-
 test_qemuarch.c              |   80 +-
 test_qemuipsanitize.c        |   61 +-
 tests/002_test_open.c        |   37 +-
 tests/003_test_fopen.c       |   27 +-
 tests/004_test_fopen64.c     |   27 +-
 tests/012_test_chown.c       |   48 +-
 tests/013_test_chmod.c       |   30 +-
 tests/015_test_ilistdelete.c |   83 +-
 tests/016_memleakcheck.c     |  137 ++-
 tests/018_testcxx.cc         |    7 +-
 tests/021_test_open.c        |   19 +-
 tests/022_kernel_waitpid.c   |   39 +-
 43 files changed, 4671 insertions(+), 4983 deletions(-)

diff --git a/.clang-format b/.clang-format
new file mode 100644
index 0000000..fe39d88
--- /dev/null
+++ b/.clang-format
@@ -0,0 +1,91 @@
+---
+Language:        Cpp
+# BasedOnStyle:  LLVM
+AccessModifierOffset: -4
+AlignAfterOpenBracket: Align
+AlignConsecutiveAssignments: false
+AlignConsecutiveDeclarations: false
+AlignEscapedNewlinesLeft: false
+AlignOperands:   true
+AlignTrailingComments: true
+AllowAllParametersOfDeclarationOnNextLine: true
+AllowShortBlocksOnASingleLine: false
+AllowShortCaseLabelsOnASingleLine: false
+AllowShortFunctionsOnASingleLine: None
+AllowShortIfStatementsOnASingleLine: false
+AllowShortLoopsOnASingleLine: false
+AlwaysBreakAfterDefinitionReturnType: None
+AlwaysBreakAfterReturnType: None
+AlwaysBreakBeforeMultilineStrings: false
+AlwaysBreakTemplateDeclarations: false
+BinPackArguments: false
+BinPackParameters: false
+BraceWrapping:
+  AfterClass:      false
+  AfterControlStatement: false
+  AfterEnum:       false
+  AfterFunction:   false
+  AfterNamespace:  false
+  AfterObjCDeclaration: false
+  AfterStruct:     false
+  AfterUnion:      false
+  BeforeCatch:     false
+  BeforeElse:      false
+  IndentBraces:    false
+BreakBeforeBinaryOperators: None
+BreakBeforeBraces: Attach
+BreakBeforeTernaryOperators: true
+BreakConstructorInitializersBeforeComma: false
+BreakStringLiterals: false
+ColumnLimit:     80
+CommentPragmas:  '^ IWYU pragma:'
+ConstructorInitializerAllOnOneLineOrOnePerLine: false
+ConstructorInitializerIndentWidth: 4
+ContinuationIndentWidth: 4
+Cpp11BracedListStyle: true
+DerivePointerAlignment: false
+DisableFormat:   false
+ExperimentalAutoDetectBinPacking: false
+ForEachMacros:   [ foreach, Q_FOREACH, BOOST_FOREACH ]
+IncludeCategories:
+  - Regex:           '^"(llvm|llvm-c|clang|clang-c)/'
+    Priority:        2
+  - Regex:           '^(<|"(gtest|isl|json)/)'
+    Priority:        3
+  - Regex:           '.*'
+    Priority:        1
+IndentCaseLabels: true
+IndentWidth:     4
+IndentWrappedFunctionNames: false
+KeepEmptyLinesAtTheStartOfBlocks: true
+MacroBlockBegin: ''
+MacroBlockEnd:   ''
+MaxEmptyLinesToKeep: 1
+NamespaceIndentation: None
+ObjCBlockIndentWidth: 4
+ObjCSpaceAfterProperty: false
+ObjCSpaceBeforeProtocolList: true
+PenaltyBreakBeforeFirstCallParameter: 19
+PenaltyBreakComment: 300
+PenaltyBreakFirstLessLess: 120
+PenaltyBreakString: 1000
+PenaltyExcessCharacter: 1000000
+PenaltyReturnTypeOnItsOwnLine: 60
+PointerAlignment: Right
+ReflowComments:  false
+SortIncludes:    false
+SpaceAfterCStyleCast: false
+SpaceBeforeAssignmentOperators: true
+SpaceBeforeParens: ControlStatements
+SpaceInEmptyParentheses: false
+SpacesBeforeTrailingComments: 1
+SpacesInAngles:  false
+SpacesInContainerLiterals: true
+SpacesInCStyleCastParentheses: false
+SpacesInParentheses: false
+SpacesInSquareBrackets: false
+Standard:        Cpp11
+TabWidth:        4
+UseTab:          Always
+...
+
diff --git a/benchmarking/time-output.c b/benchmarking/time-output.c
old mode 100755
new mode 100644
index 46738f0..42d94d1
--- a/benchmarking/time-output.c
+++ b/benchmarking/time-output.c
@@ -13,46 +13,38 @@
 #include <string.h>
 #include <termios.h>
 
-void fix_terminal() 
-{
-  struct termios t; 
-
-  if (isatty(1)) 
-    {
-      tcgetattr(1, &t); 
-      t.c_lflag |= ECHO;
-      tcsetattr(1, TCSANOW, &t); 
-    }
+void fix_terminal() {
+	struct termios t;
+
+	if (isatty(1)) {
+		tcgetattr(1, &t);
+		t.c_lflag |= ECHO;
+		tcsetattr(1, TCSANOW, &t);
+	}
 }
 
-int main(int argc, char** argv)
-{
-  time_t start = time(NULL);
-  char b[4096];
-  FILE* f = NULL;  
-
-  if (argc == 2) 
-    {
-      printf("Output tee to extra file %s\n", argv[1]);
-      f = fopen(argv[1], "w");
-    }
-  
-  while(fgets(b,sizeof(b),stdin)!=0)
-    {
-      printf("[%i] %s", 
-	     (int)difftime(time(NULL), start), 
-	     b);
-      fflush(stdout);
-      if (f) 
-	{
-	  fprintf(f, "[%i] %s", 
-		  (int)difftime(time(NULL), start), 
-		  b);
-	  fflush(f);
+int main(int argc, char **argv) {
+	time_t start = time(NULL);
+	char b[4096];
+	FILE *f = NULL;
+
+	if (argc == 2) {
+		printf("Output tee to extra file %s\n", argv[1]);
+		f = fopen(argv[1], "w");
 	}
-    }
 
-  if (f) fclose(f);
-  fix_terminal();
-  return 0;
+	while (fgets(b, sizeof(b), stdin) != 0) {
+		printf("[%i] %s", (int)difftime(time(NULL), start), b);
+		fflush(stdout);
+		if (f) {
+			fprintf(f, "[%i] %s", (int)difftime(time(NULL), start), b);
+			fflush(f);
+		}
+	}
+
+	if (f) {
+		fclose(f);
+	}
+	fix_terminal();
+	return 0;
 }
diff --git a/cow-shell.c b/cow-shell.c
old mode 100755
new mode 100644
index bc964a4..d5a8853
--- a/cow-shell.c
+++ b/cow-shell.c
@@ -17,120 +17,100 @@
 #include "ilist.h"
 #include "log.h"
 
-const char* ilist_PRGNAME="cow-shell";
+const char *ilist_PRGNAME = "cow-shell";
 
-static const char* ilistpath="./.ilist";
+static const char *ilistpath = "./.ilist";
 
 /*
  * remove ilist after use.
  */
-static void ilist_deleter(const char* ilistfile)
-{
-  if(fork()==0)
-    {
-      /* I am the child process */
-
-      pid_t parent_pid=getppid();
-      if (daemon(0,1) < 0)
-	{
-	  log_perror("cow-shell daemon");
-	  exit (-1);
+static void ilist_deleter(const char *ilistfile) {
+	if (fork() == 0) {
+		/* I am the child process */
+
+		pid_t parent_pid = getppid();
+		if (daemon(0, 1) < 0) {
+			log_perror("cow-shell daemon");
+			exit(-1);
+		}
+		while (kill(parent_pid, 0) >= 0) {
+			sleep(1);
+		}
+		if (unlink(ilistfile) == -1) {
+			log_perror("cow-shell unlink .ilist");
+			exit(1);
+		}
+		exit(0);
 	}
-      while (kill(parent_pid,0) >= 0)
-	{
-	  sleep(1);
-	}
-      if (unlink(ilistfile)==-1)
-	{
-	  log_perror("cow-shell unlink .ilist");
-	  exit(1);
-	}
-      exit(0);
-    }
 }
 
 /**
  * Set environment variables.
  */
 static void set_env_vars() {
-  char* buf;
-
-  // For sending down as environment variable, use a canonicalized version.
-  char* canonicalized_ilistpath=canonicalize_file_name(ilistpath);
-  setenv("COWDANCER_ILISTFILE",
-	 canonicalized_ilistpath,1);
-  unsetenv("COWDANCER_IGNORE");
-  free(canonicalized_ilistpath);
-
-  asprintf(&buf, "%s%s%s",
-	   getenv("LD_PRELOAD")?:"",
-	   getenv("LD_PRELOAD")?" ":"",
-	   getenv("COWDANCER_SO") ?: COWDANCER_SO);
-  setenv("LD_PRELOAD", buf, 1);
-  free(buf);
+	char *buf;
+
+	// For sending down as environment variable, use a canonicalized version.
+	char *canonicalized_ilistpath = canonicalize_file_name(ilistpath);
+	setenv("COWDANCER_ILISTFILE", canonicalized_ilistpath, 1);
+	unsetenv("COWDANCER_IGNORE");
+	free(canonicalized_ilistpath);
+
+	asprintf(&buf,
+			 "%s%s%s",
+			 getenv("LD_PRELOAD") ?: "",
+			 getenv("LD_PRELOAD") ? " " : "",
+			 getenv("COWDANCER_SO") ?: COWDANCER_SO);
+	setenv("LD_PRELOAD", buf, 1);
+	free(buf);
 }
 
 /* give me a command-line to exec,
    and I will cow-keep what's under this directory. */
-int main(int ac, char** av)
-{
-  struct stat st;
-  int cowdancer_reuse;
-
-  cowdancer_reuse=getenv("COWDANCER_REUSE") &&
-    !strcmp(getenv("COWDANCER_REUSE"),"yes") ;
-
-  if (cowdancer_reuse && !stat(ilistpath, &st))
-    {
-      /* if reuse flag is on and file already exists
-	 do nothing */
-    }
-  else
-    {
-      if (unlink(ilistpath)==-1)
-	{
-	  if (errno == ENOENT)
-	    {
-	      /* expected */
-	    }
-	  else
-	    {
-	      log_perror("cow-shell: unlink of .ilist failed");
-	      return 1;
-	    }
+int main(int ac, char **av) {
+	struct stat st;
+	int cowdancer_reuse;
+
+	cowdancer_reuse =
+		getenv("COWDANCER_REUSE") && !strcmp(getenv("COWDANCER_REUSE"), "yes");
+
+	if (cowdancer_reuse && !stat(ilistpath, &st)) {
+		/* if reuse flag is on and file already exists
+		   do nothing */
+	} else {
+		if (unlink(ilistpath) == -1) {
+			if (errno == ENOENT) {
+				/* expected */
+			} else {
+				log_perror("cow-shell: unlink of .ilist failed");
+				return 1;
+			}
+		}
+		if (ilistcreate(ilistpath, NULL)) {
+			ilist_outofmemory(".ilist creation failed");
+			return 1;
+		}
+	}
+
+	set_env_vars();
+
+	if (!cowdancer_reuse) {
+		/* if reuse flag is not on, remove the file */
+		ilist_deleter(ilistpath);
 	}
-      if(ilistcreate(ilistpath, NULL))
-	{
-	  ilist_outofmemory(".ilist creation failed");
-	  return 1;
+
+	if (ac > 1) {
+		execvp(av[1], av + 1);
+	} else {
+		const char *myshell = getenv("SHELL") ?: "/bin/sh";
+		log_printf(log_info, "Invoking %s", myshell);
+
+		execlp(myshell, myshell, NULL);
+		log_perror("cow-shell: exec");
+
+		log_printf(log_warn, "Falling back to /bin/sh");
+		execlp("/bin/sh", "/bin/sh", NULL);
 	}
-    }
-
-  set_env_vars();
-
-  if (!cowdancer_reuse)
-    {
-      /* if reuse flag is not on, remove the file */
-      ilist_deleter(ilistpath);
-    }
-
-  if (ac>1)
-    execvp(av[1], av+1);
-  else
-    {
-      const char* myshell=getenv("SHELL")?:"/bin/sh";
-      log_printf(log_info, "Invoking %s", myshell);
-
-      execlp(myshell,
-	     myshell,
-	     NULL);
-      log_perror("cow-shell: exec");
-
-      log_printf(log_warn, "Falling back to /bin/sh");
-      execlp("/bin/sh",
-	     "/bin/sh",
-	     NULL);
-    }
-  log_perror("cow-shell: exec");
-  return 1;
+	log_perror("cow-shell: exec");
+	return 1;
 }
diff --git a/cowbuilder.c b/cowbuilder.c
old mode 100755
new mode 100644
index 3288697..f6b0b5c
--- a/cowbuilder.c
+++ b/cowbuilder.c
@@ -51,8 +51,7 @@ will show the list of files changed.
 #include "ilist.h"
 #include "parameter.h"
 
-const char* ilist_PRGNAME="cowbuilder";
-
+const char *ilist_PRGNAME = "cowbuilder";
 
 /**
    remove a directory.
@@ -61,9 +60,8 @@ const char* ilist_PRGNAME="cowbuilder";
 
    @return 0 on success
  */
-static int rmrf(const char* path)
-{
-  return forkexeclp("rm", "rm", "-rf", path, NULL);
+static int rmrf(const char *path) {
+	return forkexeclp("rm", "rm", "-rf", path, NULL);
 }
 
 /**
@@ -71,37 +69,34 @@ static int rmrf(const char* path)
 
    @return 0 on success
  */
-static int rmrf_check_mount(const char* path)
-{
-  /*
+static int rmrf_check_mount(const char *path) {
+	/*
    * A directory bind-mounted into path will be cleaned out by rmrf().
    * To avoid that potential disaster we want to detect if there's
    * something mounted under path before deleting it.
    */
 
-  char* canonical_path = strdupa(path);
+	char *canonical_path = strdupa(path);
 
-  canonicalize_doubleslash(path, canonical_path);
-  if (check_mountpoint(canonical_path)) {
-    return 1;
-  }
+	canonicalize_doubleslash(path, canonical_path);
+	if (check_mountpoint(canonical_path)) {
+		return 1;
+	}
 
-  return rmrf(path);
+	return rmrf(path);
 }
 
 /**
  * @return .ilist path as malloc()ed string, or NULL on error.
  */
-static char* get_ilistfile_path(const struct pbuilderconfig* pc)
-{
-  char *ilistfile;
-  if (0>asprintf(&ilistfile, "%s/.ilist", pc->buildplace))
-    {
-      /* outofmemory */
-      log_printf(log_error, "cowdancer: out of memory.");
-      return NULL;
-    }
-  return ilistfile;
+static char *get_ilistfile_path(const struct pbuilderconfig *pc) {
+	char *ilistfile;
+	if (0 > asprintf(&ilistfile, "%s/.ilist", pc->buildplace)) {
+		/* outofmemory */
+		log_printf(log_error, "cowdancer: out of memory.");
+		return NULL;
+	}
+	return ilistfile;
 }
 
 /**
@@ -109,87 +104,92 @@ static char* get_ilistfile_path(const struct pbuilderconfig* pc)
 
    return 0 on success, 1 on fail.
  */
-int break_cowlink(const char* s)
-{
-  char *backup_file;
-  struct stat buf;
-  int pid;
-  int status;
-
-  if(lstat(s, &buf))
-    return 1;			/* if stat fails, the file probably
-				   doesn't exist; return, success */
-  if (S_ISLNK(buf.st_mode))
-    return 1;			/* ignore symbollic link */
-
-  if((buf.st_nlink > 1) && 	/* it is hardlinked */
-     S_ISREG(buf.st_mode))
-    {
-      if (asprintf(&backup_file, "%sXXXXXX", s)==-1)
-	{
-	  ilist_outofmemory("out of memory in break_cowlink");
-	  return 1;
-	}
-      switch(pid=fork())
-	{
-	case 0:
-	  /* child process, run cp */
-	  putenv("COWDANCER_IGNORE=yes");
-	  execl("/bin/cp", "/bin/cp", "-a", s, backup_file, NULL);
-	  log_perror("execl:cp:");
-	  exit(EXIT_FAILURE);
-	case -1:
-	  /* error condition in fork(); something is really wrong */
-	  ilist_outofmemory("out of memory in check_inode_and_copy, 2");
-	  break;
-	default:
-	  /* parent process, waiting for cp -a to terminate */
-	  if(-1==waitpid(pid, &status, 0))
-	    {
-	      log_perror("waitpid:cp");
-	      log_printf(log_error, "%s: unexpected waitpid error when waiting for process %i with status %x",
-		      ilist_PRGNAME, pid, status);
-	      goto error_spm;
-	    }
-
-	  if (!WIFEXITED(status))
-	    {
-	      /* something unexpected */
-	      log_printf(log_error, "%s: unexpected WIFEXITED status in waitpid: %x", ilist_PRGNAME,
-		      (int)status);
-	      goto error_spm;
-	    }
-	  else if (WEXITSTATUS(status))
-	    {
-	      /* cp -a failed */
-	      log_printf(log_error, "%s: cp -a failed for %s", ilist_PRGNAME, backup_file);
-	      goto error_spm;
-	    }
-	  /* when cp -a succeeded, overwrite the target file from the temporary file with rename */
-	  else if (-1==rename(backup_file, s))
-	    {
-	      log_perror("file overwrite with rename");
-	      log_printf(log_error, "while trying rename of %s to %s",  backup_file, s);
-	      goto error_spm;
-	    }
-	}
-    }
-  return 0;
-
- error_spm:
-  free(backup_file);
-  return 1;
+int break_cowlink(const char *s) {
+	char *backup_file;
+	struct stat buf;
+	int pid;
+	int status;
+
+	if (lstat(s, &buf)) {
+		/* if stat fails, the file probably
+		 * doesn't exist; return, success */
+		return 1;
+	}
+	if (S_ISLNK(buf.st_mode)) {
+		return 1; /* ignore symbolic link */
+	}
+
+	if ((buf.st_nlink > 1) && /* it is hardlinked */
+		S_ISREG(buf.st_mode)) {
+		if (asprintf(&backup_file, "%sXXXXXX", s) == -1) {
+			ilist_outofmemory("out of memory in break_cowlink");
+			return 1;
+		}
+		switch (pid = fork()) {
+			case 0:
+				/* child process, run cp */
+				putenv("COWDANCER_IGNORE=yes");
+				execl("/bin/cp", "/bin/cp", "-a", s, backup_file, NULL);
+				log_perror("execl:cp:");
+				exit(EXIT_FAILURE);
+			case -1:
+				/* error condition in fork(); something is really wrong */
+				ilist_outofmemory("out of memory in check_inode_and_copy, 2");
+				break;
+			default:
+				/* parent process, waiting for cp -a to terminate */
+				if (-1 == waitpid(pid, &status, 0)) {
+					log_perror("waitpid:cp");
+					log_printf(
+						log_error,
+						"%s: unexpected waitpid error when waiting for process %i with status %x",
+						ilist_PRGNAME,
+						pid,
+						status);
+					goto error_spm;
+				}
+
+				if (!WIFEXITED(status)) {
+					/* something unexpected */
+					log_printf(log_error,
+							   "%s: unexpected WIFEXITED status in waitpid: %x",
+							   ilist_PRGNAME,
+							   (int)status);
+					goto error_spm;
+				} else if (WEXITSTATUS(status)) {
+					/* cp -a failed */
+					log_printf(log_error,
+							   "%s: cp -a failed for %s",
+							   ilist_PRGNAME,
+							   backup_file);
+					goto error_spm;
+				} else if (-1 == rename(backup_file, s)) {
+					/* when cp -a succeeded, overwrite the target file from the temporary file with rename */
+					log_perror("file overwrite with rename");
+					log_printf(log_error,
+							   "while trying rename of %s to %s",
+							   backup_file,
+							   s);
+					goto error_spm;
+				}
+		}
+	}
+	return 0;
+
+error_spm:
+	free(backup_file);
+	return 1;
 }
 
 /**
    Convenience function to call break_cowlink with basepath prepended.
  */
-static void break_cowlink_inside_chroot(const char* basepath, const char* filepath)
-{
-  char* filename;
-  asprintf(&filename, "%s%s", basepath, filepath);
-  break_cowlink(filename);
-  free(filename);
+static void break_cowlink_inside_chroot(const char *basepath,
+										const char *filepath) {
+	char *filename;
+	asprintf(&filename, "%s%s", basepath, filepath);
+	break_cowlink(filename);
+	free(filename);
 }
 
 /**
@@ -198,243 +198,224 @@ static void break_cowlink_inside_chroot(const char* basepath, const char* filepa
 
    @return 0 on success, 1 on failure.
  */
-static int cpbuilder_internal_cowcopy(const struct pbuilderconfig* pc)
-{
-  char *ilistfile;
-
-  log_printf(log_info, "Copying COW directory");
-  if (0!=rmrf_check_mount(pc->buildplace))
-    return 1;
-  if (0!=forkexeclp("cp", "cp", "-al", pc->basepath, pc->buildplace, NULL))
-    return 1;
-
-  /* ilist file handling.
-     Delete existing ilist file if it exists, because I use COWDANCER_REUSE */
-  if(!(ilistfile=get_ilistfile_path(pc)))
-    {
-      /* outofmemory */
-      log_printf(log_error, "cowdancer: out of memory.");
-      return 1;
-    }
-  if (unlink(ilistfile))
-    {
-      /* if there was no ilist file in the beginning, that's not a
-	 problem.
-       */
-      log_printf(log_info, "unlink for ilistfile %s failed, it didn't exist?", ilistfile);
-    }
-  else
-    {
-      log_printf(log_info, "removed stale ilistfile %s", ilistfile);
-    }
-  free(ilistfile);
-
-  /* Non-hardlinkable file support
-   */
-  break_cowlink_inside_chroot(pc->buildplace, "/var/cache/debconf/config.dat");
-  break_cowlink_inside_chroot(pc->buildplace, "/var/cache/debconf/templates.dat");
-  break_cowlink_inside_chroot(pc->buildplace, "/var/cache/debconf/passwords.dat");
+static int cpbuilder_internal_cowcopy(const struct pbuilderconfig *pc) {
+	char *ilistfile;
 
-  return 0;
+	log_printf(log_info, "Copying COW directory");
+	if (0 != rmrf_check_mount(pc->buildplace)) {
+		return 1;
+	}
+	if (0 !=
+		forkexeclp("cp", "cp", "-al", pc->basepath, pc->buildplace, NULL)) {
+		return 1;
+	}
+
+	/* ilist file handling.
+	   Delete existing ilist file if it exists, because I use COWDANCER_REUSE */
+	if (!(ilistfile = get_ilistfile_path(pc))) {
+		/* outofmemory */
+		log_printf(log_error, "cowdancer: out of memory.");
+		return 1;
+	}
+	if (unlink(ilistfile)) {
+		/* if there was no ilist file in the beginning, that's not a
+		   problem. */
+		log_printf(log_info,
+				   "unlink for ilistfile %s failed, it didn't exist?",
+				   ilistfile);
+	} else {
+		log_printf(log_info, "removed stale ilistfile %s", ilistfile);
+	}
+	free(ilistfile);
+
+	/* Non-hardlinkable file support */
+	break_cowlink_inside_chroot(pc->buildplace,
+								"/var/cache/debconf/config.dat");
+	break_cowlink_inside_chroot(pc->buildplace,
+								"/var/cache/debconf/templates.dat");
+	break_cowlink_inside_chroot(pc->buildplace,
+								"/var/cache/debconf/passwords.dat");
+
+	return 0;
 }
 
 /*
    @return 0 on success, 1 on failure.
  */
-static int cpbuilder_internal_cleancow(const struct pbuilderconfig* pc)
-{
-  log_printf(log_info, "Cleaning COW directory");
+static int cpbuilder_internal_cleancow(const struct pbuilderconfig *pc) {
+	log_printf(log_info, "Cleaning COW directory");
 
-  if (!pc->debug && 0!=rmrf_check_mount(pc->buildplace))
-    return 1;
-  return 0;
+	if (!pc->debug && 0 != rmrf_check_mount(pc->buildplace)) {
+		return 1;
+	}
+	return 0;
 }
 
-int cpbuilder_check_config(const struct pbuilderconfig* pc)
-{
-  return 0;
+int cpbuilder_check_config(const struct pbuilderconfig *pc) {
+	return 0;
 }
 
 /*
  * @return: return code of pbuilder, or <0 on failure
  */
-int cpbuilder_build(const struct pbuilderconfig* pc, const char* dscfile_)
-{
-  const char* dscfile=canonicalize_file_name(dscfile_);
-  char* ilistfile;
-  char* buf_chroot=NULL;
-  int ret;
-  char * prevdir;
-
-  if (!dscfile)
-    {
-      log_printf(log_error, "File not found: %s", dscfile_);
-      return 1;
-    }
-
-  if (cpbuilder_internal_cowcopy(pc))
-    {
-      log_printf(log_error, "Failed cowcopy.");
-      return 1;
-    }
-
-
-  if (0>asprintf(&buf_chroot, "chroot %s cow-shell", pc->buildplace))
-    {
-      /* outofmemory */
-      log_printf(log_error, "cowdancer: out of memory.");
-      return -1;
-    }
-
-  if(!(ilistfile=get_ilistfile_path(pc)))
-    {
-      /* outofmemory */
-      log_printf(log_error, "cowdancer: out of memory.");
-      return 1;
-    }
-
-  prevdir=get_current_dir_name();
-  chdir(pc->buildplace);
-
-  if (forkexeclp("chroot",
-		 "chroot",
-		 pc->buildplace,
-		 "cowdancer-ilistcreate",
-		 "/.ilist",
-		 "find . -xdev -path ./home -prune -o \\( \\( -type l -o -type f \\) -a -links +1 -print0 \\) | xargs -0 stat --format '%d %i '",
-		 NULL))
-    {
-      /* if there was an error, back off to manual form */
-
-      /* but first, try etch-workaround */
-      if (pc->debian_etch_workaround)
-	{
-	  log_printf(log_warn, "Trying my backup method for working with Debian Etch chroots.");
-	  if (forkexeclp("chroot",
-			 "chroot",
-			 pc->buildplace,
-			 "cow-shell",
-			 "/bin/true",
-			 NULL))
-	    {
-	      /* I failed, what can I do? noooo */
-	      log_printf(log_error, "failed running Debian Etch compatibility backup plan, I'm in panic, eek.");
-	      return 1;
-	    }
-	}
-      else
-	{
-	  /*
-	     try the normal backup method
-
-	     It probably doesn't work but try it anyway.
-	   */
-	  log_printf(log_warn, "cowdancer-ilistcreate failed to run within chroot, falling back to old method");
-	  ilistcreate(ilistfile,
-		      "find . -xdev -path ./home -prune -o \\( \\( -type l -o -type f \\) -a -links +1 -print0 \\) | xargs -0 stat --format '%d %i '");
-	}
-    }
-  chdir(prevdir);
-  free(prevdir);
-
-  log_printf(log_info, "Invoking pbuilder");
-  pbuildercommandline[1]="build";
-  PBUILDER_ADD_PARAM("--buildplace");
-  PBUILDER_ADD_PARAM(pc->buildplace);
-  if (pc->buildresult)
-    {
-      PBUILDER_ADD_PARAM("--buildresult");
-      PBUILDER_ADD_PARAM(pc->buildresult);
-    }
-  if (pc->arch)
-    {
-      PBUILDER_ADD_PARAM("--architecture");
-      PBUILDER_ADD_PARAM(pc->arch);
-    }
-  if (pc->extrapackages)
-    {
-      PBUILDER_ADD_PARAM("--extrapackages");
-      PBUILDER_ADD_PARAM(pc->extrapackages);
-    }
-  if (pc->binary_arch)
-    {
-      PBUILDER_ADD_PARAM("--binary-arch");
-    }
-  else if (pc->binary_indep)
-    {
-      PBUILDER_ADD_PARAM("--binary-indep");
-    }
-  PBUILDER_ADD_PARAM("--no-targz");
-  PBUILDER_ADD_PARAM("--internal-chrootexec");
-  PBUILDER_ADD_PARAM(buf_chroot);
-  PBUILDER_ADD_PARAM(strdup(dscfile));
-  PBUILDER_ADD_PARAM(NULL);
-  ret=forkexecvp(pbuildercommandline);
-  free(buf_chroot);
-  if (ret < 128)
-    cpbuilder_internal_cleancow(pc);
-  else
-    log_printf(log_warn, "pbuilder build aborted, not cleaning");
-
-  free(ilistfile);
-  return ret;
+int cpbuilder_build(const struct pbuilderconfig *pc, const char *dscfile_) {
+	const char *dscfile = canonicalize_file_name(dscfile_);
+	char *ilistfile;
+	char *buf_chroot = NULL;
+	int ret;
+	char *prevdir;
+
+	if (!dscfile) {
+		log_printf(log_error, "File not found: %s", dscfile_);
+		return 1;
+	}
+
+	if (cpbuilder_internal_cowcopy(pc)) {
+		log_printf(log_error, "Failed cowcopy.");
+		return 1;
+	}
+
+	if (0 > asprintf(&buf_chroot, "chroot %s cow-shell", pc->buildplace)) {
+		/* outofmemory */
+		log_printf(log_error, "cowdancer: out of memory.");
+		return -1;
+	}
+
+	if (!(ilistfile = get_ilistfile_path(pc))) {
+		/* outofmemory */
+		log_printf(log_error, "cowdancer: out of memory.");
+		return 1;
+	}
+
+	prevdir = get_current_dir_name();
+	chdir(pc->buildplace);
+
+	if (forkexeclp(
+			"chroot",
+			"chroot",
+			pc->buildplace,
+			"cowdancer-ilistcreate",
+			"/.ilist",
+			"find . -xdev -path ./home -prune -o \\( \\( -type l -o -type f \\) -a -links +1 -print0 \\) | xargs -0 stat --format '%d %i '",
+			NULL)) {
+		/* if there was an error, back off to manual form */
+
+		/* but first, try etch-workaround */
+		if (pc->debian_etch_workaround) {
+			log_printf(
+				log_warn,
+				"Trying my backup method for working with Debian Etch chroots.");
+			if (forkexeclp("chroot",
+						   "chroot",
+						   pc->buildplace,
+						   "cow-shell",
+						   "/bin/true",
+						   NULL)) {
+				/* I failed, what can I do? noooo */
+				log_printf(
+					log_error,
+					"failed running Debian Etch compatibility backup plan, I'm in panic, eek.");
+				return 1;
+			}
+		} else {
+			/*
+			 * try the normal backup method
+			 * It probably doesn't work but try it anyway.
+			 */
+			log_printf(
+				log_warn,
+				"cowdancer-ilistcreate failed to run within chroot, falling back to old method");
+			ilistcreate(
+				ilistfile,
+				"find . -xdev -path ./home -prune -o \\( \\( -type l -o -type f \\) -a -links +1 -print0 \\) | xargs -0 stat --format '%d %i '");
+		}
+	}
+	chdir(prevdir);
+	free(prevdir);
+
+	log_printf(log_info, "Invoking pbuilder");
+	pbuildercommandline[1] = "build";
+	PBUILDER_ADD_PARAM("--buildplace");
+	PBUILDER_ADD_PARAM(pc->buildplace);
+	if (pc->buildresult) {
+		PBUILDER_ADD_PARAM("--buildresult");
+		PBUILDER_ADD_PARAM(pc->buildresult);
+	}
+	if (pc->arch) {
+		PBUILDER_ADD_PARAM("--architecture");
+		PBUILDER_ADD_PARAM(pc->arch);
+	}
+	if (pc->extrapackages) {
+		PBUILDER_ADD_PARAM("--extrapackages");
+		PBUILDER_ADD_PARAM(pc->extrapackages);
+	}
+	if (pc->binary_arch) {
+		PBUILDER_ADD_PARAM("--binary-arch");
+	} else if (pc->binary_indep) {
+		PBUILDER_ADD_PARAM("--binary-indep");
+	}
+	PBUILDER_ADD_PARAM("--no-targz");
+	PBUILDER_ADD_PARAM("--internal-chrootexec");
+	PBUILDER_ADD_PARAM(buf_chroot);
+	PBUILDER_ADD_PARAM(strdup(dscfile));
+	PBUILDER_ADD_PARAM(NULL);
+	ret = forkexecvp(pbuildercommandline);
+	free(buf_chroot);
+	if (ret < 128) {
+		cpbuilder_internal_cleancow(pc);
+	} else {
+		log_printf(log_warn, "pbuilder build aborted, not cleaning");
+	}
+
+	free(ilistfile);
+	return ret;
 }
 
-int cpbuilder_create(const struct pbuilderconfig* pc)
-{
-  int ret;
-
-  mkdir(pc->basepath,0777);
-  log_printf(log_info, "Invoking pbuilder");
-
-  pbuildercommandline[1]="create";
-  PBUILDER_ADD_PARAM("--buildplace");
-  PBUILDER_ADD_PARAM(pc->basepath);
-  if (pc->mirror)
-    {
-      PBUILDER_ADD_PARAM("--mirror");
-      PBUILDER_ADD_PARAM(pc->mirror);
-    }
-  if (pc->arch)
-    {
-      PBUILDER_ADD_PARAM("--architecture");
-      PBUILDER_ADD_PARAM(pc->arch);
-    }
-  PBUILDER_ADD_PARAM("--distribution");
-  PBUILDER_ADD_PARAM(pc->distribution);
-  PBUILDER_ADD_PARAM("--no-targz");
-  PBUILDER_ADD_PARAM("--extrapackages");
-  if (pc->extrapackages)
-    {
-      char *extrapackages;
-      if (0>asprintf(&extrapackages, "%s cowdancer", pc->extrapackages))
-	{
-	  log_printf(log_error, "cowdancer: out of memory.");
-	  ret = 1;
-	  goto out;
-	}
-      PBUILDER_ADD_PARAM(extrapackages);
-    }
-  else
-    {
-      PBUILDER_ADD_PARAM("cowdancer");
-    }
-  PBUILDER_ADD_PARAM(NULL);
-  ret=forkexecvp(pbuildercommandline);
+int cpbuilder_create(const struct pbuilderconfig *pc) {
+	int ret;
+
+	mkdir(pc->basepath, 0777);
+	log_printf(log_info, "Invoking pbuilder");
+
+	pbuildercommandline[1] = "create";
+	PBUILDER_ADD_PARAM("--buildplace");
+	PBUILDER_ADD_PARAM(pc->basepath);
+	if (pc->mirror) {
+		PBUILDER_ADD_PARAM("--mirror");
+		PBUILDER_ADD_PARAM(pc->mirror);
+	}
+	if (pc->arch) {
+		PBUILDER_ADD_PARAM("--architecture");
+		PBUILDER_ADD_PARAM(pc->arch);
+	}
+	PBUILDER_ADD_PARAM("--distribution");
+	PBUILDER_ADD_PARAM(pc->distribution);
+	PBUILDER_ADD_PARAM("--no-targz");
+	PBUILDER_ADD_PARAM("--extrapackages");
+	if (pc->extrapackages) {
+		char *extrapackages;
+		if (0 > asprintf(&extrapackages, "%s cowdancer", pc->extrapackages)) {
+			log_printf(log_error, "cowdancer: out of memory.");
+			ret = 1;
+			goto out;
+		}
+		PBUILDER_ADD_PARAM(extrapackages);
+	} else {
+		PBUILDER_ADD_PARAM("cowdancer");
+	}
+	PBUILDER_ADD_PARAM(NULL);
+	ret = forkexecvp(pbuildercommandline);
 
 out:
-  if (ret)
-    {
-      log_printf(log_error, "pbuilder create failed");
-      if (!pc->debug && 0!=rmrf_check_mount(pc->basepath))
-	{
-	  log_printf(log_error, "Could not remove original tree");
-	}
-    }
-  return ret;
+	if (ret) {
+		log_printf(log_error, "pbuilder create failed");
+		if (!pc->debug && 0 != rmrf_check_mount(pc->basepath)) {
+			log_printf(log_error, "Could not remove original tree");
+		}
+	}
+	return ret;
 }
 
-
 /*
   mv basepath basepath-
   mv buildplace basepath
@@ -442,88 +423,86 @@ out:
 
   return 0 on success, nonzero on error.
  */
-int cpbuilder_internal_saveupdate(const struct pbuilderconfig* pc)
-{
-  int ret=0;
-  char* buf_tmpfile=NULL;
-
-  if (0>asprintf(&buf_tmpfile, "%s-%i-tmp", pc->buildplace, (int)getpid()))
-    {
-      /* outofmemory */
-      return -1;
-    }
-  log_printf(log_info, "Moving work directory [%s] to final location [%s] and cleaning up old copy",
-	 pc->buildplace, pc->basepath);
-
-  if(-1==rename(pc->basepath, buf_tmpfile))
-    {
-      log_perror("rename");
-      ret=-1;
-      goto out;
-    }
-  if(-1==rename(pc->buildplace, pc->basepath))
-    {
-      log_perror("rename");
-      ret=-1;
-      goto out;
-    }
-  if (0!=rmrf_check_mount(buf_tmpfile))
-    {
-      log_printf(log_error, "Could not remove original tree");
-      ret=-1;
-      goto out;
-    }
- out:
-  free(buf_tmpfile);
-  return ret;
+int cpbuilder_internal_saveupdate(const struct pbuilderconfig *pc) {
+	int ret = 0;
+	char *buf_tmpfile = NULL;
+
+	if (0 >
+		asprintf(&buf_tmpfile, "%s-%i-tmp", pc->buildplace, (int)getpid())) {
+		/* outofmemory */
+		return -1;
+	}
+	log_printf(
+		log_info,
+		"Moving work directory [%s] to final location [%s] and cleaning up old copy",
+		pc->buildplace,
+		pc->basepath);
+
+	if (-1 == rename(pc->basepath, buf_tmpfile)) {
+		log_perror("rename");
+		ret = -1;
+		goto out;
+	}
+	if (-1 == rename(pc->buildplace, pc->basepath)) {
+		log_perror("rename");
+		ret = -1;
+		goto out;
+	}
+	if (0 != rmrf_check_mount(buf_tmpfile)) {
+		log_printf(log_error, "Could not remove original tree");
+		ret = -1;
+		goto out;
+	}
+out:
+	free(buf_tmpfile);
+	return ret;
 }
 
+int cpbuilder_login(const struct pbuilderconfig *pc) {
+	char *buf_chroot;
+	int ret;
+
+	if (cpbuilder_internal_cowcopy(pc)) {
+		log_printf(log_error, "Failed cowcopy.");
+		return 1;
+	}
+
+	/* this is the option passed to internal-chrootexec */
+	if (0 > asprintf(&buf_chroot, "chroot %s cow-shell", pc->buildplace)) {
+		/* outofmemory */
+		return -1;
+	}
+	log_printf(log_info, "Invoking pbuilder");
+	pbuildercommandline[1] = "login";
+	PBUILDER_ADD_PARAM("--buildplace");
+	PBUILDER_ADD_PARAM(pc->buildplace);
+	PBUILDER_ADD_PARAM("--no-targz");
+	PBUILDER_ADD_PARAM("--internal-chrootexec");
+	PBUILDER_ADD_PARAM(buf_chroot);
+	PBUILDER_ADD_PARAM(NULL);
+	ret = forkexecvp(pbuildercommandline);
+	free(buf_chroot);
+	if (ret < 128) {
+		if (pc->save_after_login) {
+			if (0 != forkexeclp("chroot",
+								"chroot",
+								pc->buildplace,
+								"apt-get",
+								"clean",
+								NULL)) {
+				ret = -1;
+			}
+			if (cpbuilder_internal_saveupdate(pc)) {
+				ret = -1;
+			}
+		} else {
+			cpbuilder_internal_cleancow(pc);
+		}
+	} else {
+		log_printf(log_warn, "pbuilder login aborted, not cleaning");
+	}
 
-int cpbuilder_login(const struct pbuilderconfig* pc)
-{
-  char *buf_chroot;
-  int ret;
-
-  if (cpbuilder_internal_cowcopy(pc))
-    {
-      log_printf(log_error, "Failed cowcopy.");
-      return 1;
-    }
-
-  /* this is the option passed to internal-chrootexec */
-  if (0>asprintf(&buf_chroot, "chroot %s cow-shell", pc->buildplace))
-    {
-      /* outofmemory */
-      return -1;
-    }
-  log_printf(log_info, "Invoking pbuilder");
-  pbuildercommandline[1]="login";
-  PBUILDER_ADD_PARAM("--buildplace");
-  PBUILDER_ADD_PARAM(pc->buildplace);
-  PBUILDER_ADD_PARAM("--no-targz");
-  PBUILDER_ADD_PARAM("--internal-chrootexec");
-  PBUILDER_ADD_PARAM(buf_chroot);
-  PBUILDER_ADD_PARAM(NULL);
-  ret=forkexecvp(pbuildercommandline);
-  free(buf_chroot);
-  if (ret < 128)
-    {
-      if (pc->save_after_login)
-	{
-	  if (0!=forkexeclp("chroot", "chroot", pc->buildplace, "apt-get", "clean", NULL))
-	    ret=-1;
-	  if (cpbuilder_internal_saveupdate(pc))
-	    ret=-1;
-	}
-      else
-	{
-	  cpbuilder_internal_cleancow(pc);
-	}
-    }
-  else
-    log_printf(log_warn, "pbuilder login aborted, not cleaning");
-
-  return ret;
+	return ret;
 }
 
 /*
@@ -531,77 +510,72 @@ int cpbuilder_login(const struct pbuilderconfig* pc)
 Mostly a copy of pbuilder login, executes a script.
 
  */
-int cpbuilder_execute(const struct pbuilderconfig* pc, char** av)
-{
-  char *buf_chroot;
-  int ret;
-  int i=0;
-
-  if (cpbuilder_internal_cowcopy(pc))
-    {
-      log_printf(log_error, "Failed cowcopy.");
-      return 1;
-    }
-
-  if (0>asprintf(&buf_chroot, "chroot %s cow-shell", pc->buildplace))
-    {
-      /* outofmemory */
-      return -1;
-    }
-  log_printf(log_info, "Invoking pbuilder");
-  pbuildercommandline[1]="execute";
-  PBUILDER_ADD_PARAM("--buildplace");
-  PBUILDER_ADD_PARAM(pc->buildplace);
-  PBUILDER_ADD_PARAM("--no-targz");
-  PBUILDER_ADD_PARAM("--internal-chrootexec");
-  PBUILDER_ADD_PARAM(buf_chroot);
-
-  /* add all additional parameters */
-  while(av[i])
-    {
-      PBUILDER_ADD_PARAM(av[i]);
-      i++;
-    }
-  PBUILDER_ADD_PARAM(NULL);
-  ret=forkexecvp(pbuildercommandline);
-  free(buf_chroot);
-  if (ret < 128)
-    {
-      if (pc->save_after_login)
-	{
-	  if (0!=forkexeclp("chroot", "chroot", pc->buildplace, "apt-get", "clean", NULL))
-	    ret=-1;
-	  if (cpbuilder_internal_saveupdate(pc))
-	    ret=-1;
-	}
-      else
-	{
-	  cpbuilder_internal_cleancow(pc);
-	}
-    }
-  else
-    log_printf(log_warn, "pbuilder execute aborted, not cleaning");
-
-  return ret;
-}
+int cpbuilder_execute(const struct pbuilderconfig *pc, char **av) {
+	char *buf_chroot;
+	int ret;
+	int i = 0;
+
+	if (cpbuilder_internal_cowcopy(pc)) {
+		log_printf(log_error, "Failed cowcopy.");
+		return 1;
+	}
+
+	if (0 > asprintf(&buf_chroot, "chroot %s cow-shell", pc->buildplace)) {
+		/* outofmemory */
+		return -1;
+	}
+	log_printf(log_info, "Invoking pbuilder");
+	pbuildercommandline[1] = "execute";
+	PBUILDER_ADD_PARAM("--buildplace");
+	PBUILDER_ADD_PARAM(pc->buildplace);
+	PBUILDER_ADD_PARAM("--no-targz");
+	PBUILDER_ADD_PARAM("--internal-chrootexec");
+	PBUILDER_ADD_PARAM(buf_chroot);
+
+	/* add all additional parameters */
+	while (av[i]) {
+		PBUILDER_ADD_PARAM(av[i]);
+		i++;
+	}
+	PBUILDER_ADD_PARAM(NULL);
+	ret = forkexecvp(pbuildercommandline);
+	free(buf_chroot);
+	if (ret < 128) {
+		if (pc->save_after_login) {
+			if (0 != forkexeclp("chroot",
+								"chroot",
+								pc->buildplace,
+								"apt-get",
+								"clean",
+								NULL)) {
+				ret = -1;
+			}
+			if (cpbuilder_internal_saveupdate(pc)) {
+				ret = -1;
+			}
+		} else {
+			cpbuilder_internal_cleancow(pc);
+		}
+	} else {
+		log_printf(log_warn, "pbuilder execute aborted, not cleaning");
+	}
 
+	return ret;
+}
 
 /*
    find matching parameter, and check if it's set.
    @returns found=1, not found=0.
  */
-int find_matching_param(const char* option)
-{
-  int i;
-  int found=0;
-  for (i=0; i<offset; ++i)
-    {
-      if (!strcmp(pbuildercommandline[i], option))
-	{
-	  found=1;
-	}
-    }
-  return found;
+int find_matching_param(const char *option) {
+	int i;
+	int found = 0;
+	for (i = 0; i < offset; ++i) {
+		if (!strcmp(pbuildercommandline[i], option)) {
+			found = 1;
+		}
+	}
+	return found;
 }
 
 /**
@@ -609,125 +583,114 @@ int find_matching_param(const char* option)
 
    @return 0 on success, other values on failure.
  */
-int cpbuilder_update(const struct pbuilderconfig* pc)
-{
-  char * buf_chroot;
-  int ret;
-
-  /*
-     I want the following actions done:
-     NEW=buildplace OLD=basepath
-
-     cp -al OLD NEW
-     update in NEW
-     mv OLD OLD-
-     mv NEW OLD
-     rm -rf OLD-
-
-     But if you ignore that part, it's really simple.
-  */
-
-  /* This simple process will not disrupt already-running pbuilder-cow session,
-     but it will not work with new pbuilder-cow sessions until this process finishes,
-     and any failure to pbuilder update will leave crap.
-  */
-
-  if (0>asprintf(&buf_chroot,
-		 (pc->no_cowdancer_update)?"chroot %s":	/* try to not use cow-shell, when
-							   no-cowdancer-update option is used */
-		 "chroot %s cow-shell",
-		 pc->buildplace))
-    {
-      /* if outofmemory, die. */
-      log_printf(log_error, "Out of memory.");
-      return -1;
-    }
-
-  if (cpbuilder_internal_cowcopy(pc))
-    {
-      log_printf(log_error, "Failed cowcopy.");
-      return 1;
-    }
-
-  log_printf(log_info, "Invoking pbuilder");
-
-  pbuildercommandline[1]="update";
-  PBUILDER_ADD_PARAM("--buildplace");
-  PBUILDER_ADD_PARAM(pc->buildplace);
-  if (find_matching_param("--override-config"))
-    {
-      if (pc->mirror)
-	{
-	  PBUILDER_ADD_PARAM("--mirror");
-	  PBUILDER_ADD_PARAM(pc->mirror);
-	}
-      PBUILDER_ADD_PARAM("--distribution");
-      PBUILDER_ADD_PARAM(pc->distribution);
-    }
-  if (pc->extrapackages)
-    {
-      PBUILDER_ADD_PARAM("--extrapackages");
-      PBUILDER_ADD_PARAM(pc->extrapackages);
-    }
-  PBUILDER_ADD_PARAM("--no-targz");
-  PBUILDER_ADD_PARAM("--internal-chrootexec");
-  PBUILDER_ADD_PARAM(buf_chroot);
-  PBUILDER_ADD_PARAM(NULL);
-
-  ret=forkexecvp(pbuildercommandline);
-  if (ret)
-    {
-      if (ret < 128)
-	{
-	  log_printf(log_error, "pbuilder update failed");
-
-	  if (!pc->no_cowdancer_update)
-	    {
-	      /* advise the user to try this option first */
-	      log_printf(log_error, "could not update with cowdancer, try --no-cowdancer-update option");
-	    }
-
-	  if (!pc->debug && 0!=rmrf_check_mount(pc->buildplace))
-	    {
-	      log_printf(log_error, "Could not remove original tree");
-	    }
-	}
-      else
-	log_printf(log_warn, "pbuilder update aborted, not cleaning");
-
-      /* either way, I don't want to touch the original tree */
-      goto out;
-
-    }
-  log_printf(log_info, "removing %s working copy", ilist_PRGNAME);
-  cpbuilder_internal_saveupdate(pc);
- out:
-  free(buf_chroot);
-  return ret;
+int cpbuilder_update(const struct pbuilderconfig *pc) {
+	char *buf_chroot;
+	int ret;
+
+	/*
+	 * I want the following actions done:
+	 * NEW=buildplace OLD=basepath
+	 *
+	 * cp -al OLD NEW
+	 * update in NEW
+	 * mv OLD OLD-
+	 * mv NEW OLD
+	 * rm -rf OLD-
+	 * But if you ignore that part, it's really simple.
+	 */
+
+	/* This simple process will not disrupt already-running pbuilder-cow session,
+	   but it will not work with new pbuilder-cow sessions until this process finishes,
+	   and any failure to pbuilder update will leave crap. */
+
+	if (0 > asprintf(&buf_chroot,
+					 (pc->no_cowdancer_update)
+						 ? "chroot %s"
+						 : /* try to not use cow-shell, when
+						    * no-cowdancer-update option is used */
+						 "chroot %s cow-shell",
+					 pc->buildplace)) {
+		/* if outofmemory, die. */
+		log_printf(log_error, "Out of memory.");
+		return -1;
+	}
+
+	if (cpbuilder_internal_cowcopy(pc)) {
+		log_printf(log_error, "Failed cowcopy.");
+		return 1;
+	}
+
+	log_printf(log_info, "Invoking pbuilder");
+
+	pbuildercommandline[1] = "update";
+	PBUILDER_ADD_PARAM("--buildplace");
+	PBUILDER_ADD_PARAM(pc->buildplace);
+	if (find_matching_param("--override-config")) {
+		if (pc->mirror) {
+			PBUILDER_ADD_PARAM("--mirror");
+			PBUILDER_ADD_PARAM(pc->mirror);
+		}
+		PBUILDER_ADD_PARAM("--distribution");
+		PBUILDER_ADD_PARAM(pc->distribution);
+	}
+	if (pc->extrapackages) {
+		PBUILDER_ADD_PARAM("--extrapackages");
+		PBUILDER_ADD_PARAM(pc->extrapackages);
+	}
+	PBUILDER_ADD_PARAM("--no-targz");
+	PBUILDER_ADD_PARAM("--internal-chrootexec");
+	PBUILDER_ADD_PARAM(buf_chroot);
+	PBUILDER_ADD_PARAM(NULL);
+
+	ret = forkexecvp(pbuildercommandline);
+	if (ret) {
+		if (ret < 128) {
+			log_printf(log_error, "pbuilder update failed");
+
+			if (!pc->no_cowdancer_update) {
+				/* advise the user to try this option first */
+				log_printf(
+					log_error,
+					"could not update with cowdancer, try --no-cowdancer-update option");
+			}
+
+			if (!pc->debug && 0 != rmrf_check_mount(pc->buildplace)) {
+				log_printf(log_error, "Could not remove original tree");
+			}
+		} else {
+			log_printf(log_warn, "pbuilder update aborted, not cleaning");
+		}
+
+		/* either way, I don't want to touch the original tree */
+		goto out;
+	}
+	log_printf(log_info, "removing %s working copy", ilist_PRGNAME);
+	cpbuilder_internal_saveupdate(pc);
+out:
+	free(buf_chroot);
+	return ret;
 }
 
-int cpbuilder_help(void)
-{
-  printf("%s [operation] [options]\n"
-	 "operation:\n"
-	 " --build\n"
-	 " --create\n"
-	 " --update\n"
-	 " --login\n"
-	 " --execute\n"
-	 " --help\n"
-	 " --dumpconfig\n"
-	 "options:\n"
-	 " --basepath:\n"
-	 " --buildplace:\n"
-	 " --distribution:\n"
-	 " ... and other pbuilder options\n", ilist_PRGNAME
-	 );
-  return 0;
+int cpbuilder_help(void) {
+	printf("%s [operation] [options]\n"
+		   "operation:\n"
+		   " --build\n"
+		   " --create\n"
+		   " --update\n"
+		   " --login\n"
+		   " --execute\n"
+		   " --help\n"
+		   " --dumpconfig\n"
+		   "options:\n"
+		   " --basepath:\n"
+		   " --buildplace:\n"
+		   " --distribution:\n"
+		   " ... and other pbuilder options\n",
+		   ilist_PRGNAME);
+	return 0;
 }
 
-int app_main(int ac, char** av)
-{
-  setenv("COWDANCER_REUSE","yes",1);
-  return parse_parameter(ac, av, "cow");
+int app_main(int ac, char **av) {
+	setenv("COWDANCER_REUSE", "yes", 1);
+	return parse_parameter(ac, av, "cow");
 }
diff --git a/cowbuilder_util.c b/cowbuilder_util.c
index 5f8c4a5..36d1dfd 100644
--- a/cowbuilder_util.c
+++ b/cowbuilder_util.c
@@ -9,47 +9,42 @@
 /**
  * @return 0 if not mounted, 1 if something under the mountpoint is mounted.
  */
-int check_mountpoint(const char* mountpoint) {
-  /* Check if a subdirectory under buildplace is still mounted, which may happen when there's a stale bind mount or whatnot. */
-  FILE *mtab = NULL;
-  struct mntent * part = NULL;
-  if ((mtab = setmntent("/etc/mtab", "r")) != NULL)
-    {
-      while ((part = getmntent(mtab) ) != NULL)
-        {
-          if ( part->mnt_fsname != NULL )
-            {
-              if (strstr(part->mnt_dir, mountpoint) == part->mnt_dir)
-                {
-                  log_printf(log_error,
-                      "Something (%s) is still mounted under %s; unmount and remove %s manually",
-                      part->mnt_dir, mountpoint, mountpoint);
-                  endmntent(mtab);
-                  return 1;
-                }
-            }
-        }
-      endmntent(mtab);
-    }
-  return 0;
+int check_mountpoint(const char *mountpoint) {
+	/* Check if a subdirectory under buildplace is still mounted, which may happen when there's a stale bind mount or whatnot. */
+	FILE *mtab = NULL;
+	struct mntent *part = NULL;
+	if ((mtab = setmntent("/etc/mtab", "r")) != NULL) {
+		while ((part = getmntent(mtab)) != NULL) {
+			if (part->mnt_fsname != NULL) {
+				if (strstr(part->mnt_dir, mountpoint) == part->mnt_dir) {
+					log_printf(
+						log_error,
+						"Something (%s) is still mounted under %s; unmount and remove %s manually",
+						part->mnt_dir,
+						mountpoint,
+						mountpoint);
+					endmntent(mtab);
+					return 1;
+				}
+			}
+		}
+		endmntent(mtab);
+	}
+	return 0;
 }
 
 /**
  * Remove double slash "//" from pc->buildplace and use "/"
  * dest needs to be large enough to hold buildplace string.
  */
-void canonicalize_doubleslash(const char* buildplace,
-			      char* dest) {
-  char prev=0;
-  int i, j;
-  for (i = 0, j = 0; buildplace[i]; ++i)
-    {
-      if (prev == '/' && buildplace[i] == '/')
-	{
-	  continue;
+void canonicalize_doubleslash(const char *buildplace, char *dest) {
+	char prev = 0;
+	int i, j;
+	for (i = 0, j = 0; buildplace[i]; ++i) {
+		if (prev == '/' && buildplace[i] == '/') {
+			continue;
+		}
+		prev = dest[j++] = buildplace[i];
 	}
-      prev = dest[j++] = buildplace[i];
-    }
-  dest[j] = '\0';
+	dest[j] = '\0';
 }
-
diff --git a/cowbuilder_util.h b/cowbuilder_util.h
index 416a812..8ccdfbd 100644
--- a/cowbuilder_util.h
+++ b/cowbuilder_util.h
@@ -1,8 +1,7 @@
 #ifndef COWBUILDER_UTIL_H
 #define COWBUILDER_UTIL_H
-int check_mountpoint(const char* mountpoint);
+int check_mountpoint(const char *mountpoint);
 
-void canonicalize_doubleslash(const char* buildplace,
-			      char* dest);
+void canonicalize_doubleslash(const char *buildplace, char *dest);
 
 #endif
diff --git a/cowdancer-ilistcreate.c b/cowdancer-ilistcreate.c
old mode 100755
new mode 100644
index f2e4954..1be6b40
--- a/cowdancer-ilistcreate.c
+++ b/cowdancer-ilistcreate.c
@@ -24,20 +24,19 @@
 #include <sys/stat.h>
 #include <sys/types.h>
 #include "ilist.h"
-const char* ilist_PRGNAME="cowdancer-ilistcreate";
+const char *ilist_PRGNAME = "cowdancer-ilistcreate";
 
-int main(int argc, char** argv)
-{
-  /*
+int main(int argc, char **argv) {
+	/*
     Wrapper to invoke ilistcreate.
    */
-  if (argc != 3)
-    {
-      fprintf (stderr,
-	       "%s ilist-path find-option\n\n\tcreate .ilist file for use with cow-shell\n\n",
-	       argv[0]);
-      return 1;
-    }
+	if (argc != 3) {
+		fprintf(
+			stderr,
+			"%s ilist-path find-option\n\n\tcreate .ilist file for use with cow-shell\n\n",
+			argv[0]);
+		return 1;
+	}
 
-  return ilistcreate(argv[1], argv[2]);
+	return ilistcreate(argv[1], argv[2]);
 }
diff --git a/cowdancer-ilistdump.c b/cowdancer-ilistdump.c
old mode 100755
new mode 100644
index abb00a3..ab8d8d3
--- a/cowdancer-ilistdump.c
+++ b/cowdancer-ilistdump.c
@@ -10,50 +10,47 @@
 #include "ilist.h"
 #include "log.h"
 
-const char* ilist_PRGNAME="cowdancer-ilistdump";
-
-int main(int argc, char** argv)
-{
-  struct ilist_struct s;
-  struct ilist_header h;
-
-  FILE*f;
-  
-  if (argc != 2)
-    {
-      fprintf (stderr,
-	       "%s ilist-path \n\n\tdump contents of .ilist file\n\n",
-	       argv[0]);
-      return 1;
-    }
-  
-  fprintf (stderr, "ilist_struct size on this architecture: %i\n", (int)sizeof(struct ilist_struct));
-
-  f=fopen (argv[1], "r");
-  if (!f)
-    {
-      log_printf(log_error,
-	  "%s: cannot open file %s",
-	  argv[0], argv[1]);
-      return 1;
-    }
-  
-  fread(&h, sizeof(struct ilist_header), 1, f);
-  fprintf(stderr, 
-	  "Signature: %x (expect %x)\n"
-	  "Revision: %i (expect %i)\n"
-	  "Struct size: %i\n\n",
-	  h.ilistsig, ILISTSIG, 
-	  h.revision, ILISTREVISION, 
-	  h.ilist_struct_size
-	  );
-  
-  while(fread(&s, sizeof(struct ilist_struct), 1, f))
-    {
-      printf ("%li %li\n", (long)s.dev, (long)s.inode);
-    }
-
-  fclose(f);
-  
-  return 0;
+const char *ilist_PRGNAME = "cowdancer-ilistdump";
+
+int main(int argc, char **argv) {
+	struct ilist_struct s;
+	struct ilist_header h;
+
+	FILE *f;
+
+	if (argc != 2) {
+		fprintf(stderr,
+				"%s ilist-path \n\n\tdump contents of .ilist file\n\n",
+				argv[0]);
+		return 1;
+	}
+
+	fprintf(stderr,
+			"ilist_struct size on this architecture: %i\n",
+			(int)sizeof(struct ilist_struct));
+
+	f = fopen(argv[1], "r");
+	if (!f) {
+		log_printf(log_error, "%s: cannot open file %s", argv[0], argv[1]);
+		return 1;
+	}
+
+	fread(&h, sizeof(struct ilist_header), 1, f);
+	fprintf(stderr,
+			"Signature: %x (expect %x)\n"
+			"Revision: %i (expect %i)\n"
+			"Struct size: %i\n\n",
+			h.ilistsig,
+			ILISTSIG,
+			h.revision,
+			ILISTREVISION,
+			h.ilist_struct_size);
+
+	while (fread(&s, sizeof(struct ilist_struct), 1, f)) {
+		printf("%li %li\n", (long)s.dev, (long)s.inode);
+	}
+
+	fclose(f);
+
+	return 0;
 }
diff --git a/cowdancer.c b/cowdancer.c
index 61e5018..4ad4bc7 100644
--- a/cowdancer.c
+++ b/cowdancer.c
@@ -26,15 +26,15 @@
    larger. */
 typedef __typeof__(+(mode_t)0) promoted_mode_t;
 
-const char* ilist_PRGNAME="cowdancer";
+const char *ilist_PRGNAME = "cowdancer";
 
 /* libc functions. */
 static int (*origlibc_open)(const char *, int, ...) = NULL;
 static int (*origlibc_open64)(const char *, int, ...) = NULL;
 static int (*origlibc_creat)(const char *, mode_t) = NULL;
 static int (*origlibc_creat64)(const char *, mode_t) = NULL;
-static FILE* (*origlibc_fopen)(const char *, const char*) = NULL;
-static FILE* (*origlibc_fopen64)(const char *, const char*) = NULL;
+static FILE *(*origlibc_fopen)(const char *, const char *) = NULL;
+static FILE *(*origlibc_fopen64)(const char *, const char *) = NULL;
 
 static int (*origlibc_chown)(const char *, uid_t, gid_t) = NULL;
 static int (*origlibc_fchown)(int fd, uid_t, gid_t) = NULL;
@@ -43,115 +43,130 @@ static int (*origlibc_chmod)(const char *, mode_t) = NULL;
 static int (*origlibc_fchmod)(int fd, mode_t) = NULL;
 static int (*origlibc_flock)(int fd, int) = NULL;
 
-static struct ilist_struct* ilist=NULL;
-static long ilist_len=0;
+static struct ilist_struct *ilist = NULL;
+static long ilist_len = 0;
 
 /*
    verify the header content
  */
-static int verify_ilist_header(struct ilist_header header)
-{
-  if (header.revision != ILISTREVISION ||
-      header.ilistsig != ILISTSIG ||
-      header.ilist_struct_size != sizeof (struct ilist_struct))
-    {
-      ilist_outofmemory(".ilist header unexpected");
-      return 1;
-    }
-  return 0;
+static int verify_ilist_header(struct ilist_header header) {
+	if (header.revision != ILISTREVISION || header.ilistsig != ILISTSIG ||
+		header.ilist_struct_size != sizeof(struct ilist_struct)) {
+		ilist_outofmemory(".ilist header unexpected");
+		return 1;
+	}
+	return 0;
 }
 
 /* load ilist file
 
    @return 1 on error, 0 on success */
-static int load_ilist(void)
-{
-  FILE* f=0;
-  int fd=0;
-  struct stat stbuf;
-  struct ilist_struct* local_ilist=NULL;
-  struct ilist_header header;
-  long local_ilist_len=0;
-
-  if (!getenv("COWDANCER_ILISTFILE"))
-    {
-      log_printf(log_error, "env var COWDANCER_ILISTFILE not defined");
-      return 1;
-    }
-
-  if (-1==(fd=origlibc_open(getenv("COWDANCER_ILISTFILE"),O_RDONLY,0)))
-    {
-      log_printf(log_error, "%s: cannot open ilistfile %s", ilist_PRGNAME, getenv("COWDANCER_ILISTFILE"));
-      return 1;
-    }
-  if (-1==fstat(fd,&stbuf))
-    {
-      log_printf(log_error, "%s: cannot fstat ilistfile %s", ilist_PRGNAME, getenv("COWDANCER_ILISTFILE"));
-      return 1;
-    }
-
-  local_ilist_len=(stbuf.st_size - sizeof (struct ilist_header)) / sizeof(struct ilist_struct);
-
-  if (stbuf.st_size != (sizeof(struct ilist_struct) * local_ilist_len + sizeof (struct ilist_header)))
-    {
-      log_printf(log_error, "%s: .ilist size: %li", ilist_PRGNAME, (long)stbuf.st_size);
-      ilist_outofmemory(".ilist size unexpected");
-      return 1;
-    }
-
-  if (((void*)-1)==
-      (local_ilist=mmap(NULL, stbuf.st_size, PROT_READ, MAP_PRIVATE,
-		  fd, 0)))
-    {
-      log_perror("mmap failed, failback to other method");
-      /* fall back to non-mmap method. */
-      if (NULL==(f=fdopen(fd, "r")))
-	{
-	  log_printf(log_error, "%s: cannot fdopen ilistfile %s", ilist_PRGNAME, getenv("COWDANCER_ILISTFILE"));
-	  return 1;
+static int load_ilist(void) {
+	FILE *f = 0;
+	int fd = 0;
+	struct stat stbuf;
+	struct ilist_struct *local_ilist = NULL;
+	struct ilist_header header;
+	long local_ilist_len = 0;
+
+	if (!getenv("COWDANCER_ILISTFILE")) {
+		log_printf(log_error, "env var COWDANCER_ILISTFILE not defined");
+		return 1;
 	}
 
-      if (NULL==(local_ilist=malloc(stbuf.st_size)))
-	{
-	  log_printf(log_error, "%s: out of memory while trying to allocate memory for ilist", ilist_PRGNAME);
-	  return 1;
-	}
-      fread(&header, sizeof(struct ilist_header), 1, f);
-      if(verify_ilist_header(header)) return 1;
-      fread(local_ilist, sizeof(struct ilist_struct), local_ilist_len, f);
-      fclose(f);
-    }
-  else
-    {
-      if (verify_ilist_header(*(struct ilist_header *)local_ilist)) return 1;
-      local_ilist=(void*)local_ilist+sizeof (struct ilist_header);
-      close(fd);
-    }
-
-  /* commit, this should really be atomic,
-     but I don't want to have a lock here.
-     Pray that same result will result in multiple invocations,
-     and ask for luck. It shouldn't change the result very much if it was called multiple times.
-  */
-  sched_yield();
-  /* Do I need to make them volatile? I want the following assignment to happen
-     at this exact timing, to make this quasi-lock-free logic to be remotely successful. */
-  ilist_len = local_ilist_len;
-  ilist = local_ilist;
+	if (-1 ==
+		(fd = origlibc_open(getenv("COWDANCER_ILISTFILE"), O_RDONLY, 0))) {
+		log_printf(log_error,
+				   "%s: cannot open ilistfile %s",
+				   ilist_PRGNAME,
+				   getenv("COWDANCER_ILISTFILE"));
+		return 1;
+	}
+	if (-1 == fstat(fd, &stbuf)) {
+		log_printf(log_error,
+				   "%s: cannot fstat ilistfile %s",
+				   ilist_PRGNAME,
+				   getenv("COWDANCER_ILISTFILE"));
+		return 1;
+	}
+
+	local_ilist_len = (stbuf.st_size - sizeof(struct ilist_header)) /
+					  sizeof(struct ilist_struct);
+
+	if (stbuf.st_size != (sizeof(struct ilist_struct) * local_ilist_len +
+						  sizeof(struct ilist_header))) {
+		log_printf(log_error,
+				   "%s: .ilist size: %li",
+				   ilist_PRGNAME,
+				   (long)stbuf.st_size);
+		ilist_outofmemory(".ilist size unexpected");
+		return 1;
+	}
+
+	if (((void *)-1) ==
+		(local_ilist =
+			 mmap(NULL, stbuf.st_size, PROT_READ, MAP_PRIVATE, fd, 0))) {
+		log_perror("mmap failed, failback to other method");
+		/* fall back to non-mmap method. */
+		if (NULL == (f = fdopen(fd, "r"))) {
+			log_printf(log_error,
+					   "%s: cannot fdopen ilistfile %s",
+					   ilist_PRGNAME,
+					   getenv("COWDANCER_ILISTFILE"));
+			return 1;
+		}
+
+		if (NULL == (local_ilist = malloc(stbuf.st_size))) {
+			log_printf(
+				log_error,
+				"%s: out of memory while trying to allocate memory for ilist",
+				ilist_PRGNAME);
+			return 1;
+		}
+		fread(&header, sizeof(struct ilist_header), 1, f);
+		if (verify_ilist_header(header)) {
+			return 1;
+		}
+		fread(local_ilist, sizeof(struct ilist_struct), local_ilist_len, f);
+		fclose(f);
+	} else {
+		if (verify_ilist_header(*(struct ilist_header *)local_ilist)) {
+			return 1;
+		}
+		local_ilist = (void *)local_ilist + sizeof(struct ilist_header);
+		close(fd);
+	}
+
+	/* commit, this should really be atomic,
+	   but I don't want to have a lock here.
+	   Pray that same result will result in multiple invocations,
+	   and ask for luck. It shouldn't change the result very much if it was
+	   called multiple times. */
+	sched_yield();
+	/* Do I need to make them volatile? I want the following assignment
+	 * to happen at this exact timing, to make this quasi-lock-free
+	 * logic to be remotely successful. */
+	ilist_len = local_ilist_len;
+	ilist = local_ilist;
 
-  return 0;
+	return 0;
 }
 
-static void debug_cowdancer (const char * s)
-{
-  if (getenv("COWDANCER_DEBUG"))
-    log_printf(log_debug | log_always_print, "%s: DEBUG %s", ilist_PRGNAME, s);
+static void debug_cowdancer(const char *s) {
+	if (getenv("COWDANCER_DEBUG")) {
+		log_printf(
+			log_debug | log_always_print, "%s: DEBUG %s", ilist_PRGNAME, s);
+	}
 }
 
-static void debug_cowdancer_2 (const char * s, const char*e)
-{
-  if (getenv("COWDANCER_DEBUG"))
-    log_printf(log_debug | log_always_print, "%s: DEBUG %s:%s", ilist_PRGNAME, s, e);
+static void debug_cowdancer_2(const char *s, const char *e) {
+	if (getenv("COWDANCER_DEBUG")) {
+		log_printf(log_debug | log_always_print,
+				   "%s: DEBUG %s:%s",
+				   ilist_PRGNAME,
+				   s,
+				   e);
+	}
 }
 
 /**
@@ -159,103 +174,92 @@ static void debug_cowdancer_2 (const char * s, const char*e)
 
     @return 1 on error
  */
-__attribute__ ((warn_unused_result))
-static int initialize_functions ()
-{
-  static volatile int initialized = 0;
-  /* this code is quasi-reentrant;
-     shouldn't suffer too much if it is called multiple times. */
-
-  /* this code is __unlikely__ to be true
-     It is initialized==0 only for the first time
-     so should be !initialized==0 most of the time.
-  */
-  if (__builtin_expect(!initialized,0))
-    {
-      log_use_colors use_colors = log_get_use_colors_unresolved();
-      /* Temporarily disable auto detection, since ncurses calls fopen, which
-       * leads to initialize_functions calling itself. */
-      if (use_colors == log_use_colors_auto)
-	log_set_use_colors(log_use_colors_no);
-
-      initialized = 1;
-      origlibc_open = dlsym(RTLD_NEXT, "open");
-      origlibc_open64 = dlsym(RTLD_NEXT, "open64");
-      origlibc_creat = dlsym(RTLD_NEXT, "creat");
-      origlibc_creat64 = dlsym(RTLD_NEXT, "creat64");
-      origlibc_fopen = dlsym(RTLD_NEXT, "fopen64");
-      origlibc_fopen64 = dlsym(RTLD_NEXT, "fopen64");
-      dlerror();
-      if (!(origlibc_chown = dlvsym(RTLD_NEXT, "chown", "GLIBC_2.1")))
-	{
-	  /* I should really check dlerror, but due to a possible bug in glibc,
-	     dlerror doesn't seem to work at all.
-	   */
-	  const char* d=dlerror();
-	  if(!d)
-	    {
-	      debug_cowdancer("dlerror does not return anything, chown returned NULL but OK");
-	      /* success */
-	    }
-	  else
-	    {
-	      debug_cowdancer(d);
-	    }
-
-
-	  /* fallback to loading unversioned symbol doing it anyway
-	     since glibc does not seem to set dlerror on dlsym failure.
-	  */
-	  origlibc_chown = dlsym(RTLD_NEXT, "chown");
-
-	}
-      origlibc_fchown = dlsym(RTLD_NEXT, "fchown");
-      origlibc_lchown = dlsym(RTLD_NEXT, "lchown");
-      origlibc_chmod = dlsym(RTLD_NEXT, "chmod");
-      origlibc_fchmod = dlsym(RTLD_NEXT, "fchmod");
-      origlibc_flock = dlsym(RTLD_NEXT, "flock");
-
-      if (getenv("COWDANCER_DEBUG"))
-	{
-	  log_printf(log_debug | log_always_print,
-		     "chown:%p lchown:%p", origlibc_chown, origlibc_lchown);
+__attribute__((warn_unused_result)) static int initialize_functions() {
+	static volatile int initialized = 0;
+	/* this code is quasi-reentrant;
+	   shouldn't suffer too much if it is called multiple times. */
+
+	/* this code is __unlikely__ to be true
+	   It is initialized==0 only for the first time
+	   so should be !initialized==0 most of the time. */
+	if (__builtin_expect(!initialized, 0)) {
+		log_use_colors use_colors = log_get_use_colors_unresolved();
+		/* Temporarily disable auto detection, since ncurses calls fopen, which
+		 * leads to initialize_functions calling itself. */
+		if (use_colors == log_use_colors_auto) {
+			log_set_use_colors(log_use_colors_no);
+		}
+
+		initialized = 1;
+		origlibc_open = dlsym(RTLD_NEXT, "open");
+		origlibc_open64 = dlsym(RTLD_NEXT, "open64");
+		origlibc_creat = dlsym(RTLD_NEXT, "creat");
+		origlibc_creat64 = dlsym(RTLD_NEXT, "creat64");
+		origlibc_fopen = dlsym(RTLD_NEXT, "fopen64");
+		origlibc_fopen64 = dlsym(RTLD_NEXT, "fopen64");
+		dlerror();
+		if (!(origlibc_chown = dlvsym(RTLD_NEXT, "chown", "GLIBC_2.1"))) {
+			/* I should really check dlerror, but due to a possible bug
+			 * in glibc, dlerror doesn't seem to work at all. */
+			const char *d = dlerror();
+			if (!d) {
+				debug_cowdancer(
+					"dlerror does not return anything, chown returned NULL but OK");
+				/* success */
+			} else {
+				debug_cowdancer(d);
+			}
+
+			/* fallback to loading unversioned symbol doing it anyway
+			 * since glibc does not seem to set dlerror on dlsym failure
+			 */
+			origlibc_chown = dlsym(RTLD_NEXT, "chown");
+		}
+		origlibc_fchown = dlsym(RTLD_NEXT, "fchown");
+		origlibc_lchown = dlsym(RTLD_NEXT, "lchown");
+		origlibc_chmod = dlsym(RTLD_NEXT, "chmod");
+		origlibc_fchmod = dlsym(RTLD_NEXT, "fchmod");
+		origlibc_flock = dlsym(RTLD_NEXT, "flock");
+
+		if (getenv("COWDANCER_DEBUG")) {
+			log_printf(log_debug | log_always_print,
+					   "chown:%p lchown:%p",
+					   origlibc_chown,
+					   origlibc_lchown);
+		}
+
+		/* load the ilist */
+		if (!ilist) {
+			if (load_ilist()) {
+				initialized = 0;
+				return 1;
+			}
+			initialized = 2;
+			debug_cowdancer("Initialization successfully finished.");
+		}
+		log_set_use_colors(use_colors);
 	}
-
-      /* load the ilist */
-      if (!ilist)
-	{
-	  if (load_ilist())
-	    {
-	      initialized = 0;
-	      return 1;
-	    }
-	  initialized = 2;
-	  debug_cowdancer ("Initialization successfully finished.");
-	}
-      log_set_use_colors(use_colors);
-    }
-  /*
+	/*
      Wait until somebody else finishes his job
      This is very unlikely
   */
-  while (__builtin_expect(initialized == 1,0))
-    sched_yield();
+	while (__builtin_expect(initialized == 1, 0)) {
+		sched_yield();
+	}
 
-  if (initialized==0)
-    return 1;			/* that somebody else failed */
-  else
-    return 0;
+	if (initialized == 0) {
+		return 1; /* that somebody else failed */
+	} else {
+		return 0;
+	}
 }
 
 /* the constructor for this library */
-__attribute__ ((constructor))
-     void ctor()
-{
-  if (initialize_functions())
-    {
-      log_printf(log_error,
-          "%s: Fatal, initialize_functions failed", ilist_PRGNAME);
-    }
+__attribute__((constructor)) void ctor() {
+	if (initialize_functions()) {
+		log_printf(
+			log_error, "%s: Fatal, initialize_functions failed", ilist_PRGNAME);
+	}
 }
 
 /**
@@ -267,337 +271,325 @@ __attribute__ ((constructor))
 
    @return 1 on failure, 0 on success
 */
-__attribute__ ((warn_unused_result))
-static int check_inode_and_copy(const char* s, int canonicalize)
-{
-  struct ilist_struct search_target;
-  char* canonical=NULL;/* the canonical filename, the filename of the protected inode and the newly generated*/
-  struct stat buf;
-  char* backup_file=NULL;/* filename of backup file, the new file with new inode that will be used for future writes */
-  int ret;
-  pid_t pid;
-  int status;
-  sigset_t newmask, omask;
-
-  debug_cowdancer_2("DEBUG: test for", s);
-  if(lstat(s, &buf))
-    return 0;			/* if stat fails, the file probably
-				   doesn't exist; return, success */
-  if (canonicalize && S_ISLNK(buf.st_mode))
-    {
-      /* for symbollic link, canonicalize and get the real filename */
-      if (!(canonical=canonicalize_file_name(s)))
-	return 0;			/* if canonicalize_file_name fails,
-					   the file probably doesn't exist. */
-
-      if(stat(canonical, &buf))	/* if I can't stat this file, I don't think
-				   I can write to it; ignore */
-	return 0;
-    }
-  else
-    canonical=strdup(s);
-
-  memset(&search_target, 0, sizeof(search_target));
-  search_target.inode = buf.st_ino;
-  search_target.dev = buf.st_dev;
-
-  //do some hardcore debugging here:
-  if (getenv("COWDANCER_DEBUG"))
-    {
-      log_printf(log_debug | log_always_print,
-		 "ciac: s:%s=canonical:%s nlink:%i reg:%i lnk:%i match:%p", s, canonical, (int)buf.st_nlink, S_ISREG(buf.st_mode), S_ISLNK(buf.st_mode),
-		 bsearch(&search_target, ilist, ilist_len,
-			 sizeof(search_target), compare_ilist));
-    }
-
-  if((buf.st_nlink > 1) && 	/* it is hardlinked */
-     (S_ISREG(buf.st_mode) ||
-      S_ISLNK(buf.st_mode)) && 	/* it is a regular file or a symbollic link */
-     bsearch(&search_target, ilist, ilist_len,
-	     sizeof(search_target), compare_ilist)) /* and a match is
-						       found in ilist
-						       file */
-    {
-      /* There is a file that needs to be protected,
-	 Copy-on-write hardlink files.
-
-	 we copy the file first to a backup place, and then mv the
-	 backup to the original file, to break the hardlink.
-      */
-
-      if (asprintf(&backup_file, "%sXXXXXX", canonical)==-1)
-	{
-	  ilist_outofmemory("out of memory in check_inode_and_copy, 1");
-	  goto error_canonical;
+__attribute__((warn_unused_result)) static int
+check_inode_and_copy(const char *s, int canonicalize) {
+	struct ilist_struct search_target;
+	/* the canonical filename, the filename of the protected inode and the
+	 * newly generated */
+	char *canonical = NULL;
+	struct stat buf;
+	/* filename of backup file, the new file with new inode that will be used
+	 * for future writes */
+	char *backup_file = NULL;
+	int ret;
+	pid_t pid;
+	int status;
+	sigset_t newmask, omask;
+
+	debug_cowdancer_2("DEBUG: test for", s);
+	if (lstat(s, &buf)) {
+		/* if stat fails, the file probably
+		 * doesn't exist; return, success */
+		return 0;
+	}
+	if (canonicalize && S_ISLNK(buf.st_mode)) {
+		/* for symbollic link, canonicalize and get the real filename */
+		if (!(canonical = canonicalize_file_name(s))) {
+			/* if canonicalize_file_name fails,
+			 * the file probably doesn't exist. */
+			return 0;
+		}
+		if (stat(canonical, &buf)) {
+			/* if I can't stat this file, I don't think
+			 * I can write to it; ignore */
+			return 0;
+		}
+	} else {
+		canonical = strdup(s);
 	}
 
-      close(ret=mkstemp(backup_file));
-      if (ret==-1)
-	{
-	  log_perror("mkstemp");
-	  goto error_buf;
+	memset(&search_target, 0, sizeof(search_target));
+	search_target.inode = buf.st_ino;
+	search_target.dev = buf.st_dev;
+
+	//do some hardcore debugging here:
+	if (getenv("COWDANCER_DEBUG")) {
+		log_printf(log_debug | log_always_print,
+				   "ciac: s:%s=canonical:%s nlink:%i reg:%i lnk:%i match:%p",
+				   s,
+				   canonical,
+				   (int)buf.st_nlink,
+				   S_ISREG(buf.st_mode),
+				   S_ISLNK(buf.st_mode),
+				   bsearch(&search_target,
+						   ilist,
+						   ilist_len,
+						   sizeof(search_target),
+						   compare_ilist));
 	}
 
-      /* mask the SIGCHLD signal, I want waitpid to work.
-       */
-      sigemptyset (&newmask);
-      sigaddset (&newmask, SIGCHLD);
-      if (sigprocmask (SIG_BLOCK, &newmask, &omask) < 0)
+	if ((buf.st_nlink > 1) && /* it is hardlinked */
+		(S_ISREG(buf.st_mode) ||
+		 S_ISLNK(buf.st_mode)) && /* it is a regular file or a symbollic link */
+		bsearch(&search_target,
+				ilist,
+				ilist_len,
+				sizeof(search_target),
+				compare_ilist)) /* and a match is
+						       found in ilist
+						       file */
 	{
-	  log_perror("sigprocmask");
-	  goto error_buf;
+		/* There is a file that needs to be protected,
+		 * Copy-on-write hardlink files.
+		 *
+		 * we copy the file first to a backup place, and then mv the
+		 * backup to the original file, to break the hardlink.
+		 */
+
+		if (asprintf(&backup_file, "%sXXXXXX", canonical) == -1) {
+			ilist_outofmemory("out of memory in check_inode_and_copy, 1");
+			goto error_canonical;
+		}
+
+		close(ret = mkstemp(backup_file));
+		if (ret == -1) {
+			log_perror("mkstemp");
+			goto error_buf;
+		}
+
+		/* mask the SIGCHLD signal, I want waitpid to work.  */
+		sigemptyset(&newmask);
+		sigaddset(&newmask, SIGCHLD);
+		if (sigprocmask(SIG_BLOCK, &newmask, &omask) < 0) {
+			log_perror("sigprocmask");
+			goto error_buf;
+		}
+
+		/* let cp do the task,
+		 * it probably knows about filesystem details more than I do.
+		 *
+		 * forking here is really difficult; I should rewrite this code
+		 * to not fork/exec. Signal handling and process waiting is too
+		 * unreliable.
+		 */
+		switch (pid = fork()) {
+			case 0:
+				/* child process, run cp */
+				putenv("COWDANCER_IGNORE=yes");
+				sigprocmask(SIG_SETMASK,
+							&omask,
+							(sigset_t *)NULL); /* unmask SIGCHLD signal */
+				execl("/bin/cp", "/bin/cp", "-a", canonical, backup_file, NULL);
+				log_perror("execl:cp:");
+				exit(EXIT_FAILURE);
+			case -1:
+				/* error condition in fork(); something is really wrong */
+				ilist_outofmemory("out of memory in check_inode_and_copy, 2");
+				goto error_spm;
+			default:
+				/* parent process, waiting for cp -a to terminate */
+				if (-1 == waitpid(pid, &status, 0)) {
+					log_perror("waitpid:cp");
+					log_printf(
+						log_error,
+						"%s: unexpected waitpid error when waiting for process %i with status %x",
+						ilist_PRGNAME,
+						pid,
+						status);
+					goto error_spm;
+				}
+
+				if (!WIFEXITED(status)) {
+					/* something unexpected */
+					log_printf(log_error,
+							   "%s: unexpected WIFEXITED status in waitpid: %x",
+							   ilist_PRGNAME,
+							   (int)status);
+					goto error_spm;
+				} else if (WEXITSTATUS(status)) {
+					/* cp -a failed */
+					log_printf(log_error,
+							   "%s: cp -a failed for %s",
+							   ilist_PRGNAME,
+							   backup_file);
+					goto error_spm;
+				} else if (-1 == rename(backup_file, canonical)) {
+					/* when cp -a succeeded, overwrite the target file from the temporary file with rename */
+					log_perror("file overwrite with rename");
+					log_printf(log_error,
+							   "%s: while trying rename of %s to %s",
+							   ilist_PRGNAME,
+							   canonical,
+							   backup_file);
+					goto error_spm;
+				}
+		}
+		free(backup_file);
+		sigprocmask(SIG_SETMASK, &omask, (sigset_t *)NULL);
+	} else {
+		debug_cowdancer_2("DEBUG: did not match ", s);
 	}
 
-      /* let cp do the task,
-	 it probably knows about filesystem details more than I do.
+	free(canonical);
+	return 0;
 
-	 forking here is really difficult; I should rewrite this code
-	 to not fork/exec. Signal handling and process waiting is too
-	 unreliable.
-      */
-      switch(pid=fork())
-	{
-	case 0:
-	  /* child process, run cp */
-	  putenv("COWDANCER_IGNORE=yes");
-	  sigprocmask (SIG_SETMASK, &omask, (sigset_t *) NULL); /* unmask SIGCHLD signal */
-	  execl("/bin/cp", "/bin/cp", "-a", canonical, backup_file, NULL);
-	  log_perror("execl:cp:");
-	  exit(EXIT_FAILURE);
-	case -1:
-	  /* error condition in fork(); something is really wrong */
-	  ilist_outofmemory("out of memory in check_inode_and_copy, 2");
-	  goto error_spm;
-	default:
-	  /* parent process, waiting for cp -a to terminate */
-	  if(-1==waitpid(pid, &status, 0))
-	    {
-	      log_perror("waitpid:cp");
-	      log_printf(log_error, "%s: unexpected waitpid error when waiting for process %i with status %x",
-		  ilist_PRGNAME, pid, status);
-	      goto error_spm;
-	    }
-
-	  if (!WIFEXITED(status))
-	    {
-	      /* something unexpected */
-	      log_printf(log_error, "%s: unexpected WIFEXITED status in waitpid: %x", ilist_PRGNAME,
-		  (int)status);
-	      goto error_spm;
-	    }
-	  else if (WEXITSTATUS(status))
-	    {
-	      /* cp -a failed */
-	      log_printf(log_error, "%s: cp -a failed for %s", ilist_PRGNAME, backup_file);
-	      goto error_spm;
-	    }
-	  /* when cp -a succeeded, overwrite the target file from the temporary file with rename */
-	  else if (-1==rename(backup_file, canonical))
-	    {
-	      log_perror("file overwrite with rename");
-	      log_printf(log_error, "%s: while trying rename of %s to %s",  ilist_PRGNAME, canonical, backup_file);
-	      goto error_spm;
-	    }
-	}
-      free(backup_file);
-      sigprocmask (SIG_SETMASK, &omask, (sigset_t *) NULL);
-    }
-  else
-    debug_cowdancer_2("DEBUG: did not match ", s);
-
-  free(canonical);
-  return 0;
-
-  /* error-processing routine. */
- error_spm:
-  sigprocmask (SIG_SETMASK, &omask, (sigset_t *) NULL);
- error_buf:
-  free(backup_file);
- error_canonical:
-  free(canonical);
-  return 1;
+/* error-processing routine. */
+error_spm:
+	sigprocmask(SIG_SETMASK, &omask, (sigset_t *)NULL);
+error_buf:
+	free(backup_file);
+error_canonical:
+	free(canonical);
+	return 1;
 }
 
-int open(const char * a, int flags, ...)
-{
-  int fd;
-  mode_t mode;
-  va_list args;
-  va_start(args, flags);
-  mode = (mode_t) va_arg(args, promoted_mode_t);
-  va_end(args);
-  if (initialize_functions())
-    {
-      errno=ENOMEM;
-      return -1;
-    }
-
-  if(!getenv("COWDANCER_IGNORE"))
-    {
-      debug_cowdancer_2 ("open", a);
-      switch(flags & O_ACCMODE)
-	{
-	case O_WRONLY:
-	case O_RDWR:
-	  if (check_inode_and_copy(a,1))
-	    {
-	      errno=ENOMEM;
-	      return -1;
-	    }
-	  break;
-	}
-    }
-  fd = origlibc_open (a, flags, mode);
-  return fd;
+int open(const char *a, int flags, ...) {
+	int fd;
+	mode_t mode;
+	va_list args;
+	va_start(args, flags);
+	mode = (mode_t)va_arg(args, promoted_mode_t);
+	va_end(args);
+	if (initialize_functions()) {
+		errno = ENOMEM;
+		return -1;
+	}
+
+	if (!getenv("COWDANCER_IGNORE")) {
+		debug_cowdancer_2("open", a);
+		switch (flags & O_ACCMODE) {
+			case O_WRONLY:
+			case O_RDWR:
+				if (check_inode_and_copy(a, 1)) {
+					errno = ENOMEM;
+					return -1;
+				}
+				break;
+		}
+	}
+	fd = origlibc_open(a, flags, mode);
+	return fd;
 }
 
-int open64(const char * a, int flags, ...)
-{
-  int fd;
-  mode_t mode;
-  va_list args;
-  va_start(args, flags);
-  mode = (mode_t) va_arg(args, promoted_mode_t);
-  va_end(args);
-  if (initialize_functions())
-    {
-      errno=ENOMEM;
-      return -1;
-    }
-  if(!getenv("COWDANCER_IGNORE"))
-    {
-      debug_cowdancer_2 ("open64", a);
-      switch(flags & O_ACCMODE)
-	{
-	case O_WRONLY:
-	case O_RDWR:
-	  if (check_inode_and_copy(a,1))
-	    {
-	      errno=ENOMEM;
-	      return -1;
-	    }
-	  break;
-	}
-    }
-  fd = origlibc_open64 (a, flags, mode);
-  return fd;
+int open64(const char *a, int flags, ...) {
+	int fd;
+	mode_t mode;
+	va_list args;
+	va_start(args, flags);
+	mode = (mode_t)va_arg(args, promoted_mode_t);
+	va_end(args);
+	if (initialize_functions()) {
+		errno = ENOMEM;
+		return -1;
+	}
+	if (!getenv("COWDANCER_IGNORE")) {
+		debug_cowdancer_2("open64", a);
+		switch (flags & O_ACCMODE) {
+			case O_WRONLY:
+			case O_RDWR:
+				if (check_inode_and_copy(a, 1)) {
+					errno = ENOMEM;
+					return -1;
+				}
+				break;
+		}
+	}
+	fd = origlibc_open64(a, flags, mode);
+	return fd;
 }
 
-int creat(const char * a, mode_t mode)
-{
-  int fd;
-  if (initialize_functions())
-    {
-      errno=ENOMEM;
-      return -1;
-    }
-  if(!getenv("COWDANCER_IGNORE"))
-    {
-      debug_cowdancer_2 ("creat", a);
-      if (check_inode_and_copy(a,1))
-	{
-	  errno=ENOMEM;
-	  return -1;
+int creat(const char *a, mode_t mode) {
+	int fd;
+	if (initialize_functions()) {
+		errno = ENOMEM;
+		return -1;
+	}
+	if (!getenv("COWDANCER_IGNORE")) {
+		debug_cowdancer_2("creat", a);
+		if (check_inode_and_copy(a, 1)) {
+			errno = ENOMEM;
+			return -1;
+		}
 	}
-    }
-  fd = origlibc_creat (a, mode);
-  return fd;
+	fd = origlibc_creat(a, mode);
+	return fd;
 }
 
-int creat64(const char * a, mode_t mode)
-{
-  int fd;
-  if (initialize_functions())
-    {
-      errno=ENOMEM;
-      return -1;
-    }
-  if(!getenv("COWDANCER_IGNORE"))
-    {
-      debug_cowdancer_2 ("creat64", a);
-      if (check_inode_and_copy(a,1))
-	    {
-	      errno=ENOMEM;
-	      return -1;
-	    }
-    }
-  fd = origlibc_creat64 (a, mode);
-  return fd;
+int creat64(const char *a, mode_t mode) {
+	int fd;
+	if (initialize_functions()) {
+		errno = ENOMEM;
+		return -1;
+	}
+	if (!getenv("COWDANCER_IGNORE")) {
+		debug_cowdancer_2("creat64", a);
+		if (check_inode_and_copy(a, 1)) {
+			errno = ENOMEM;
+			return -1;
+		}
+	}
+	fd = origlibc_creat64(a, mode);
+	return fd;
 }
 
-static int likely_fopen_write(const char *t)
-{
-  /* checks if it is likely to be a write fopen */
-  return strspn(t, "aw+");
+static int likely_fopen_write(const char *t) {
+	/* checks if it is likely to be a write fopen */
+	return strspn(t, "aw+");
 }
 
 #undef fopen
-FILE* fopen(const char* s, const char* t)
-{
-  FILE *f;
-  if (initialize_functions())
-    {
-      errno=ENOMEM;
-      return NULL;
-    }
-  if(!getenv("COWDANCER_IGNORE")&&
-     likely_fopen_write(t))
-    {
-      debug_cowdancer_2 ("fopen", s);
-      if (check_inode_and_copy(s,1))
-	{
-	  errno=ENOMEM;
-	  return NULL;
+FILE *fopen(const char *s, const char *t) {
+	FILE *f;
+	if (initialize_functions()) {
+		errno = ENOMEM;
+		return NULL;
+	}
+	if (!getenv("COWDANCER_IGNORE") && likely_fopen_write(t)) {
+		debug_cowdancer_2("fopen", s);
+		if (check_inode_and_copy(s, 1)) {
+			errno = ENOMEM;
+			return NULL;
+		}
 	}
-    }
-  f = origlibc_fopen (s, t);
-  return f;
+	f = origlibc_fopen(s, t);
+	return f;
 }
 
 #undef fopen64
-FILE* fopen64(const char* s, const char* t)
-{
-  FILE *f;
-  if(initialize_functions())
-    {
-      errno=ENOMEM;
-      return NULL;
-    }
-  if(!getenv("COWDANCER_IGNORE")&&
-     likely_fopen_write(t))
-    {
-      debug_cowdancer_2 ("fopen64", s);
-      if(check_inode_and_copy(s,1))
-	{
-	  errno=ENOMEM;
-	  return NULL;
+FILE *fopen64(const char *s, const char *t) {
+	FILE *f;
+	if (initialize_functions()) {
+		errno = ENOMEM;
+		return NULL;
+	}
+	if (!getenv("COWDANCER_IGNORE") && likely_fopen_write(t)) {
+		debug_cowdancer_2("fopen64", s);
+		if (check_inode_and_copy(s, 1)) {
+			errno = ENOMEM;
+			return NULL;
+		}
 	}
-    }
-  f = origlibc_fopen64(s, t);
-  return f;
+	f = origlibc_fopen64(s, t);
+	return f;
 }
 
 #undef chown
-int chown(const char* s, uid_t u, gid_t g)
-{
-  int ret;
-  if(initialize_functions())
-    {
-      errno=ENOMEM;
-      return -1;
-    }
-  if(!getenv("COWDANCER_IGNORE"))
-    {
-      debug_cowdancer_2 ("chown", s);
-      if(check_inode_and_copy(s,1))
-	{
-	  errno=ENOMEM;
-	  return -1;
+int chown(const char *s, uid_t u, gid_t g) {
+	int ret;
+	if (initialize_functions()) {
+		errno = ENOMEM;
+		return -1;
+	}
+	if (!getenv("COWDANCER_IGNORE")) {
+		debug_cowdancer_2("chown", s);
+		if (check_inode_and_copy(s, 1)) {
+			errno = ENOMEM;
+			return -1;
+		}
 	}
-    }
-  ret = origlibc_chown(s, u, g);
-  debug_cowdancer_2 ("end-chown", s);
-  return ret;
+	ret = origlibc_chown(s, u, g);
+	debug_cowdancer_2("end-chown", s);
+	return ret;
 }
 
 /* Check out file descriptor
@@ -607,142 +599,129 @@ int chown(const char* s, uid_t u, gid_t g)
  * @return 1 on failure, 0 on success
  *
  */
-static int check_fd_inode_and_warn(int fd, const char* operation)
-{
-  struct stat buf;
-  struct ilist_struct search_target;
-
-  fstat(fd, &buf);
-  memset(&search_target, 0, sizeof(search_target));
-  search_target.inode = buf.st_ino;
-  search_target.dev = buf.st_dev;
-  if(bsearch(&search_target, ilist, ilist_len,
-	     sizeof(search_target), compare_ilist) &&
-     S_ISREG(buf.st_mode))
-    {
-      /* Someone opened file read-only, and called
-	 fchown/fchmod/flock; I don't really know how to do
-	 salvation in that case, since the original filename is
-	 probably not available, and file is already open.
-
-	 If there is any better way, I'd like to know.
-       */
-      log_printf(log_warn,
-          "cowdancer: unsupported operation %s, read-only open and fchown/fchmod/flock are not supported: tried opening dev:inode of %li:%li",
-          operation, (long)buf.st_dev, (long)buf.st_ino);
-      /* emit a warning and do not fail,
-	 if you want to make it fail, add a return 1;
-	 apt seems to want to use this operation; thus apt will always fail.
-       */
-    }
-  return 0;
+static int check_fd_inode_and_warn(int fd, const char *operation) {
+	struct stat buf;
+	struct ilist_struct search_target;
+
+	fstat(fd, &buf);
+	memset(&search_target, 0, sizeof(search_target));
+	search_target.inode = buf.st_ino;
+	search_target.dev = buf.st_dev;
+	if (bsearch(&search_target,
+				ilist,
+				ilist_len,
+				sizeof(search_target),
+				compare_ilist) &&
+		S_ISREG(buf.st_mode)) {
+		/* Someone opened file read-only, and called
+		 * fchown/fchmod/flock; I don't really know how to do
+		 * salvation in that case, since the original filename is
+		 * probably not available, and file is already open.
+		 *
+		 * If there is any better way, I'd like to know.
+		 */
+		log_printf(
+			log_warn,
+			"cowdancer: unsupported operation %s, read-only open and fchown/fchmod/flock are not supported: tried opening dev:inode of %li:%li",
+			operation,
+			(long)buf.st_dev,
+			(long)buf.st_ino);
+		/* emit a warning and do not fail,
+		 * if you want to make it fail, add a return 1;
+		 * apt seems to want to use this operation; thus apt will
+		 * always fail.
+		 */
+	}
+	return 0;
 }
 
 #undef fchown
-int fchown(int fd, uid_t u, gid_t g)
-{
-  int ret;
-  if(initialize_functions())
-    return -1;
-  if(!getenv("COWDANCER_IGNORE"))
-    {
-      debug_cowdancer ("fchown");
-      if (check_fd_inode_and_warn(fd, "fchown"))
-	{
-	  errno=ENOMEM;
-	  return -1;
+int fchown(int fd, uid_t u, gid_t g) {
+	int ret;
+	if (initialize_functions()) {
+		return -1;
+	}
+	if (!getenv("COWDANCER_IGNORE")) {
+		debug_cowdancer("fchown");
+		if (check_fd_inode_and_warn(fd, "fchown")) {
+			errno = ENOMEM;
+			return -1;
+		}
 	}
-    }
-  ret = origlibc_fchown(fd, u, g);
-  return ret;
+	ret = origlibc_fchown(fd, u, g);
+	return ret;
 }
 
 #undef lchown
 /* chown that does not follow the symbollic links. */
-int lchown(const char* s, uid_t u, gid_t g)
-{
-  int ret;
-  if(initialize_functions())
-    {
-      errno=ENOMEM;
-      return -1;
-    }
-  if(!getenv("COWDANCER_IGNORE"))
-    {
-      debug_cowdancer_2 ("lchown", s);
-      if (check_inode_and_copy(s,0))
-	{
-	  errno=ENOMEM;
-	  return -1;
+int lchown(const char *s, uid_t u, gid_t g) {
+	int ret;
+	if (initialize_functions()) {
+		errno = ENOMEM;
+		return -1;
+	}
+	if (!getenv("COWDANCER_IGNORE")) {
+		debug_cowdancer_2("lchown", s);
+		if (check_inode_and_copy(s, 0)) {
+			errno = ENOMEM;
+			return -1;
+		}
 	}
-    }
-  ret = origlibc_lchown(s, u, g);
-  debug_cowdancer_2 ("end-lchown", s);
-  return ret;
+	ret = origlibc_lchown(s, u, g);
+	debug_cowdancer_2("end-lchown", s);
+	return ret;
 }
 
 #undef chmod
-int chmod(const char* s, mode_t mode)
-{
-  int ret;
-  if(initialize_functions())
-    {
-      errno=ENOMEM;
-      return -1;
-    }
-  if(!getenv("COWDANCER_IGNORE"))
-    {
-      debug_cowdancer_2 ("chmod", s);
-      if (check_inode_and_copy(s,1))
-	{
-	  errno=ENOMEM;
-	  return -1;
+int chmod(const char *s, mode_t mode) {
+	int ret;
+	if (initialize_functions()) {
+		errno = ENOMEM;
+		return -1;
+	}
+	if (!getenv("COWDANCER_IGNORE")) {
+		debug_cowdancer_2("chmod", s);
+		if (check_inode_and_copy(s, 1)) {
+			errno = ENOMEM;
+			return -1;
+		}
 	}
-    }
-  ret = origlibc_chmod(s, mode);
-  return ret;
+	ret = origlibc_chmod(s, mode);
+	return ret;
 }
 
 #undef fchmod
-int fchmod(int fd, mode_t mode)
-{
-  int ret;
-  if(initialize_functions())
-    {
-      errno=ENOMEM;
-      return -1;
-    }
-  if(!getenv("COWDANCER_IGNORE"))
-    {
-      debug_cowdancer ("fchmod");
-      if (check_fd_inode_and_warn(fd, "fchmod"))
-	{
-	  errno=ENOMEM;
-	  return -1;
+int fchmod(int fd, mode_t mode) {
+	int ret;
+	if (initialize_functions()) {
+		errno = ENOMEM;
+		return -1;
+	}
+	if (!getenv("COWDANCER_IGNORE")) {
+		debug_cowdancer("fchmod");
+		if (check_fd_inode_and_warn(fd, "fchmod")) {
+			errno = ENOMEM;
+			return -1;
+		}
 	}
-    }
-  ret = origlibc_fchmod(fd, mode);
-  return ret;
+	ret = origlibc_fchmod(fd, mode);
+	return ret;
 }
 
 #undef flock
-int flock(int fd, int operation)
-{
-  int ret;
-  if(initialize_functions())
-    {
-      errno=ENOMEM;
-      return -1;
-    }
-  if(!getenv("COWDANCER_IGNORE"))
-    {
-      debug_cowdancer ("flock");
-      if (check_fd_inode_and_warn(fd, "flock"))
-	{
-	  errno=ENOMEM;
-	  return -1;
+int flock(int fd, int operation) {
+	int ret;
+	if (initialize_functions()) {
+		errno = ENOMEM;
+		return -1;
+	}
+	if (!getenv("COWDANCER_IGNORE")) {
+		debug_cowdancer("flock");
+		if (check_fd_inode_and_warn(fd, "flock")) {
+			errno = ENOMEM;
+			return -1;
+		}
 	}
-    }
-  ret = origlibc_flock(fd, operation);
-  return ret;
+	ret = origlibc_flock(fd, operation);
+	return ret;
 }
diff --git a/file.c b/file.c
index 0255185..8a557d1 100644
--- a/file.c
+++ b/file.c
@@ -45,77 +45,64 @@
  *
  * returns 0 on success, -1 on failure.
  */
-int copy_file(const char*orig, const char*dest)
-{
-  const int buffer_size=4096;
-  char *buf=malloc(buffer_size);
-  int ret=-1;
-  int fin=-1;
-  int fout=-1;
-  size_t count;
-  struct stat st;
-
-  if (!buf)
-    {
-      log_printf(log_error, "Out of memory");
-      goto out;
-    }
-
-  if (-1==(fin=open(orig,O_RDONLY)))
-    {
-      log_perror("file copy: open for read");
-      goto out;
-    }
-  if (-1==(fout=creat(dest,0666)))
-    {
-      log_perror("file copy: open for write");
-      goto out;
-    }
-  while((count=read(fin, buf, buffer_size))>0)
-    {
-      if (-1==write(fout, buf, count))
-	{			/* error */
-	  log_perror("file copy: write");
-	  log_printf(log_error, "%i", fin);
-	  log_printf(log_error, "%i %i", fout, (int)count);
-	  goto out;
-	}
-    }
-  if(count==-1)
-    {
-      log_perror("file copy: read ");
-      goto out;
-    }
-  if (-1==close(fin) ||
-      -1==close(fout))
-    {
-      log_perror("file copy: close ");
-      goto out;
-    }
-
-  if (0>stat(orig, &st))
-    {
-      log_printf(log_error,
-	      "Error calling stat '%s': %s",
-	      orig,
-	      strerror(errno));
-      goto out;
-    }
-
-  if (chmod(dest, st.st_mode))
-    {
-      log_printf(log_error,
-	      "Error calling chmod('%s' 0%llo): %s",
-	      orig,
-	      (unsigned long long) st.st_mode,
-	      strerror(errno));
-      goto out;
-    }
-
-  ret=0;
- out:
-  free(buf);
-  return ret;
+int copy_file(const char *orig, const char *dest) {
+	const int buffer_size = 4096;
+	char *buf = malloc(buffer_size);
+	int ret = -1;
+	int fin = -1;
+	int fout = -1;
+	size_t count;
+	struct stat st;
+
+	if (!buf) {
+		log_printf(log_error, "Out of memory");
+		goto out;
+	}
+
+	if (-1 == (fin = open(orig, O_RDONLY))) {
+		log_perror("file copy: open for read");
+		goto out;
+	}
+	if (-1 == (fout = creat(dest, 0666))) {
+		log_perror("file copy: open for write");
+		goto out;
+	}
+	while ((count = read(fin, buf, buffer_size)) > 0) {
+		if (-1 == write(fout, buf, count)) { /* error */
+			log_perror("file copy: write");
+			log_printf(log_error, "%i", fin);
+			log_printf(log_error, "%i %i", fout, (int)count);
+			goto out;
+		}
+	}
+	if (count == -1) {
+		log_perror("file copy: read ");
+		goto out;
+	}
+	if (-1 == close(fin) || -1 == close(fout)) {
+		log_perror("file copy: close ");
+		goto out;
+	}
+
+	if (0 > stat(orig, &st)) {
+		log_printf(
+			log_error, "Error calling stat '%s': %s", orig, strerror(errno));
+		goto out;
+	}
+
+	if (chmod(dest, st.st_mode)) {
+		log_printf(log_error,
+				   "Error calling chmod('%s' 0%llo): %s",
+				   orig,
+				   (unsigned long long)st.st_mode,
+				   strerror(errno));
+		goto out;
+	}
+
+	ret = 0;
+out:
+	free(buf);
+	return ret;
 }
 
 /**
@@ -123,81 +110,74 @@ int copy_file(const char*orig, const char*dest)
 
    returns 0 on success, 1 on fail.
  */
-int create_sparse_file(const char* filename, unsigned long int size)
-{
-  int fd=creat(filename, 0660);
-  if (-1==fd)
-    {
-      log_perror("creat");
-      log_printf(log_error, "Could not create %s", filename);
-      return 1;
-    }
-
-  const off_t seeksize = 1 << 30;	/* try with 30-bit seeks (1GB / seek) */
-  assert(size > 1);
-  size--;
-  if (-1==lseek(fd, 0, SEEK_SET))
-    {
-	log_perror("initial lseek");
-	return 1;
-    }
-
-  while(size > seeksize) {
-    if (-1==lseek(fd, seeksize, SEEK_CUR))
-      {
-	log_perror("intermediate lseek");
-	return 1;
-      }
-    size -= seeksize;
-  }
-  if (-1==lseek(fd, size - 1, SEEK_CUR))
-    {
-      log_perror("final lseek");
-      return 1;
-    }
-
-  if (-1==write(fd, "", 1))		/* A string consists of \0, write 0 to end of file */
-    {
-      log_perror("write");
-      return 1;
-    }
-
-  if (-1==close(fd))
-    {
-      log_perror("close");
-      return 1;
-    }
-  return 0;
+int create_sparse_file(const char *filename, unsigned long int size) {
+	int fd = creat(filename, 0660);
+	if (-1 == fd) {
+		log_perror("creat");
+		log_printf(log_error, "Could not create %s", filename);
+		return 1;
+	}
+
+	const off_t seeksize = 1 << 30; /* try with 30-bit seeks (1GB / seek) */
+	assert(size > 1);
+	size--;
+	if (-1 == lseek(fd, 0, SEEK_SET)) {
+		log_perror("initial lseek");
+		return 1;
+	}
+
+	while (size > seeksize) {
+		if (-1 == lseek(fd, seeksize, SEEK_CUR)) {
+			log_perror("intermediate lseek");
+			return 1;
+		}
+		size -= seeksize;
+	}
+	if (-1 == lseek(fd, size - 1, SEEK_CUR)) {
+		log_perror("final lseek");
+		return 1;
+	}
+
+	if (-1 ==
+		write(fd, "", 1)) /* A string consists of \0, write 0 to end of file */
+	{
+		log_perror("write");
+		return 1;
+	}
+
+	if (-1 == close(fd)) {
+		log_perror("close");
+		return 1;
+	}
+	return 0;
 }
 
 /* mknod with prepended pathname
    return -1 on failure.
  */
-int mknod_inside_chroot(const char* chroot, const char* pathname, mode_t mode, dev_t dev)
-{
-  char* p = alloca(strlen(chroot)+strlen(pathname)+2);
-  int ret;
-
-  if (!p)
-    {
-      log_printf(log_error, "error on alloca");
-      return -1;
-    }
-
-  if (-1==sprintf(p, "%s/%s", chroot, pathname))
-    {
-      log_printf(log_error, "error on sprintf");
-      return -1;
-    }
-
-  ret=mknod(p, mode, dev);
-
-  if (ret == -1)
-    {
-      /* output the error message for debug, but ignore it here. */
-      log_perror(p);
-    }
-
-  return ret;
-}
+int mknod_inside_chroot(const char *chroot,
+						const char *pathname,
+						mode_t mode,
+						dev_t dev) {
+	char *p = alloca(strlen(chroot) + strlen(pathname) + 2);
+	int ret;
+
+	if (!p) {
+		log_printf(log_error, "error on alloca");
+		return -1;
+	}
+
+	if (-1 == sprintf(p, "%s/%s", chroot, pathname)) {
+		log_printf(log_error, "error on sprintf");
+		return -1;
+	}
+
+	ret = mknod(p, mode, dev);
 
+	if (ret == -1) {
+		/* output the error message for debug, but ignore it here. */
+		log_perror(p);
+	}
+
+	return ret;
+}
diff --git a/file.h b/file.h
index 2f7c3fd..7707f99 100644
--- a/file.h
+++ b/file.h
@@ -22,7 +22,10 @@
 
 #ifndef __FILE_H__
 #define __FILE_H__
-int copy_file(const char*orig, const char*dest);
-int create_sparse_file(const char* filename, unsigned long int size);
-int mknod_inside_chroot(const char* chroot, const char* pathname, mode_t mode, dev_t dev);
+int copy_file(const char *orig, const char *dest);
+int create_sparse_file(const char *filename, unsigned long int size);
+int mknod_inside_chroot(const char *chroot,
+						const char *pathname,
+						mode_t mode,
+						dev_t dev);
 #endif
diff --git a/forkexec.c b/forkexec.c
index db89842..e3a2dfa 100644
--- a/forkexec.c
+++ b/forkexec.c
@@ -31,58 +31,57 @@
 
   @return < 0 for failure, exit code for other cases.
  */
-int forkexecvp (char *const argv[])
-{
-  int ret;
-  pid_t pid;
-  int status;
-
-  /* DEBUG: */
-  {
-    int i=0;
-    log_begin(log_info);
-    log_middle(log_info, "forking:");
-
-    for (i = 0; argv[i]; ++i)
-      {
-	if (strchr(argv[i], ' '))
-	  log_middle(log_info, " '%s'", argv[i]);
-	else
-	  log_middle(log_info, " %s", argv[i]);
-      }
-    log_end(log_info);
-  }
-
-  fflush(NULL);
-
-  switch(pid=fork())
-    {
-    case 0:
-      execvp(argv[0], (char*const*)argv);
-      log_perror("execvp");
-      log_printf(log_error, "Could not execute %s", argv[0]);
-      exit(EXIT_FAILURE);
-    case -1:
-      /* error condition in fork(); something is really wrong */
-      log_perror("fork");
-      return -1;
-    default:
-      /* parent process, waiting for termination */
-      if (-1==waitpid(pid, &status, 0))
+int forkexecvp(char *const argv[]) {
+	int ret;
+	pid_t pid;
+	int status;
+
+	/* DEBUG: */
 	{
-	  log_perror("waitpid");
-	  log_printf(log_error, "Unexpected waitpid error when waiting for process %i with status %x",
-		  pid, status);
-	  return -1;
+		int i = 0;
+		log_begin(log_info);
+		log_middle(log_info, "forking:");
+
+		for (i = 0; argv[i]; ++i) {
+			if (strchr(argv[i], ' ')) {
+				log_middle(log_info, " '%s'", argv[i]);
+			} else {
+				log_middle(log_info, " %s", argv[i]);
+			}
+		}
+		log_end(log_info);
 	}
-      if (!WIFEXITED(status))
-	{
-	  /* something unexpected */
-	  return -1;
+
+	fflush(NULL);
+
+	switch (pid = fork()) {
+		case 0:
+			execvp(argv[0], (char *const *)argv);
+			log_perror("execvp");
+			log_printf(log_error, "Could not execute %s", argv[0]);
+			exit(EXIT_FAILURE);
+		case -1:
+			/* error condition in fork(); something is really wrong */
+			log_perror("fork");
+			return -1;
+		default:
+			/* parent process, waiting for termination */
+			if (-1 == waitpid(pid, &status, 0)) {
+				log_perror("waitpid");
+				log_printf(
+					log_error,
+					"Unexpected waitpid error when waiting for process %i with status %x",
+					pid,
+					status);
+				return -1;
+			}
+			if (!WIFEXITED(status)) {
+				/* something unexpected */
+				return -1;
+			}
+			ret = WEXITSTATUS(status);
 	}
-      ret = WEXITSTATUS(status);
-    }
-  return ret;
+	return ret;
 }
 
 /*
@@ -95,74 +94,66 @@ int forkexecvp (char *const argv[])
 
   @return < 0 for failure, exit code for other cases.
  */
-int
-forkexeclp (const char *path, const char *arg0, ...)
-{
-  int i, ret;
-  va_list args;
-  const char *argv[1024];
-  pid_t pid;
-  int status;
-
-  va_start(args, arg0);
-  argv[0] = arg0;
-  i = 1;
-
-  log_begin(log_info);
-  if (strchr(argv[0], ' '))
-    log_middle(log_info, "forking: '%s'", argv[0]); /* debug message */
-  else
-    log_middle(log_info, "forking: %s", argv[0]);   /* debug message */
-
-  do
-    {
-      argv[i] = va_arg(args, const char *);
-      if (argv[i])
-	{
-	  if (strchr(argv[i], ' '))
-	    log_middle(log_info, " '%s'", argv[i]);    /* debug message */
-	  else
-	    log_middle(log_info, " %s", argv[i]);      /* debug message */
+int forkexeclp(const char *path, const char *arg0, ...) {
+	int i, ret;
+	va_list args;
+	const char *argv[1024];
+	pid_t pid;
+	int status;
+
+	va_start(args, arg0);
+	argv[0] = arg0;
+	i = 1;
+
+	log_begin(log_info);
+	if (strchr(argv[0], ' ')) {
+		log_middle(log_info, "forking: '%s'", argv[0]); /* debug message */
+	} else {
+		log_middle(log_info, "forking: %s", argv[0]); /* debug message */
 	}
 
-      if ( i >= 1023 )
-	{
-	  return -1;
+	do {
+		argv[i] = va_arg(args, const char *);
+		if (argv[i]) {
+			if (strchr(argv[i], ' ')) {
+				log_middle(log_info, " '%s'", argv[i]); /* debug message */
+			} else {
+				log_middle(log_info, " %s", argv[i]); /* debug message */
+			}
+		}
+
+		if (i >= 1023) {
+			return -1;
+		}
+
+	} while (argv[i++] != NULL);
+	va_end(args);
+
+	log_end(log_info); /* debug message */
+
+	fflush(NULL);
+
+	switch (pid = fork()) {
+		case 0:
+			execvp(path, (char *const *)argv);
+			log_perror("pbuilder: execlp");
+			log_printf(log_error, "Could not execute %s", path);
+			exit(EXIT_FAILURE);
+		case -1:
+			/* error condition in fork(); something is really wrong */
+			log_perror("pbuilder: fork");
+			return -1;
+		default:
+			/* parent process, waiting for termination */
+			if (-1 == waitpid(pid, &status, 0)) {
+				log_perror("waitpid");
+				return -1;
+			}
+			if (!WIFEXITED(status)) {
+				/* something unexpected */
+				return -1;
+			}
+			ret = WEXITSTATUS(status);
 	}
-
-    }
-  while (argv[i++] != NULL);
-  va_end (args);
-
-  log_end(log_info);				  /* debug message */
-
-  fflush(NULL);
-
-  switch(pid=fork())
-    {
-    case 0:
-      execvp(path, (char*const*)argv);
-      log_perror("pbuilder: execlp");
-      log_printf(log_error, "Could not execute %s", path);
-      exit(EXIT_FAILURE);
-    case -1:
-      /* error condition in fork(); something is really wrong */
-      log_perror("pbuilder: fork");
-      return -1;
-    default:
-      /* parent process, waiting for termination */
-      if (-1==waitpid(pid, &status, 0))
-	{
-	  log_perror("waitpid");
-	  return -1;
-	}
-      if (!WIFEXITED(status))
-	{
-	  /* something unexpected */
-	  return -1;
-	}
-      ret = WEXITSTATUS(status);
-    }
-  return ret;
+	return ret;
 }
-
diff --git a/ilist.h b/ilist.h
index eb15919..51a8be2 100644
--- a/ilist.h
+++ b/ilist.h
@@ -6,21 +6,19 @@
 /* 'COWD' in the host-order */
 #define ILISTSIG 0x4f434457
 
-struct ilist_header
-{
-  int ilistsig;
-  int revision;
-  int ilist_struct_size;
-  int dummy;
+struct ilist_header {
+	int ilistsig;
+	int revision;
+	int ilist_struct_size;
+	int dummy;
 };
 
-struct ilist_struct
-{
-  dev_t dev;
-  ino_t inode;
+struct ilist_struct {
+	dev_t dev;
+	ino_t inode;
 };
 
-void ilist_outofmemory(const char* msg);
-int ilistcreate(const char* ilistpath, const char* findcommandline);
-int compare_ilist (const void *a, const void *b);
-extern const char* ilist_PRGNAME;
+void ilist_outofmemory(const char *msg);
+int ilistcreate(const char *ilistpath, const char *findcommandline);
+int compare_ilist(const void *a, const void *b);
+extern const char *ilist_PRGNAME;
diff --git a/ilistcreate.c b/ilistcreate.c
old mode 100755
new mode 100644
index 31ba143..c7459c1
--- a/ilistcreate.c
+++ b/ilistcreate.c
@@ -12,134 +12,116 @@
 #include "log.h"
 
 /* Output error message. You need to process the error result. */
-void ilist_outofmemory(const char* msg)
-{
-  log_printf(log_error, "%s: %s", ilist_PRGNAME, msg);
+void ilist_outofmemory(const char *msg) {
+	log_printf(log_error, "%s: %s", ilist_PRGNAME, msg);
 }
 
 /* return 1 on error, 0 on success */
-int ilistcreate(const char* ilistpath, const char* findcommandline)
-{
-  int i=0;
-  long dev, ino;
-  FILE* inf;
-  FILE* outf;
-  struct ilist_struct* ilist=NULL;
-  struct ilist_header header=
-    {
-      ILISTSIG,
-      ILISTREVISION,
-      sizeof (struct ilist_struct),
-      0
-    };
-  long ilist_len=0;
-  if(!findcommandline)
-    findcommandline="find . -xdev \\( -type l -o -type f \\) -a -links +1 -print0 | xargs -0 stat --format '%d %i '";
-
-  if (!(ilist=calloc(2000,sizeof(struct ilist_struct))))
-    {
-      ilist_outofmemory("memory allocation failed");
-      return 1;
-    }
-  ilist_len=2000;
-  if (NULL==(inf=popen(findcommandline, "r")))
-    {
-      ilist_outofmemory("popen find failed");
-      return 1;
-    }
-
-  while (fscanf(inf,"%li %li", &dev, &ino)>0)
-    {
-      (ilist+i)->dev=(dev_t)dev;
-      (ilist+i)->inode=(ino_t)ino;
-
-      if (getenv("COWDANCER_DEBUG"))
-	printf("%li %li \n ", (long int)dev, (long int)ino);
-
-      i++;
-      if (i>=ilist_len)
-	{
-	  ilist=realloc(ilist, (ilist_len*=2)*sizeof(struct ilist_struct));
-	  if (!ilist)
-	    {
-	      ilist_outofmemory("realloc failed");
-	      pclose(inf);
-	      return 1;
-	    }
+int ilistcreate(const char *ilistpath, const char *findcommandline) {
+	int i = 0;
+	long dev, ino;
+	FILE *inf;
+	FILE *outf;
+	struct ilist_struct *ilist = NULL;
+	struct ilist_header header = {
+		ILISTSIG, ILISTREVISION, sizeof(struct ilist_struct), 0};
+	long ilist_len = 0;
+	if (!findcommandline) {
+		findcommandline =
+			"find . -xdev \\( -type l -o -type f \\) -a -links +1 -print0 | xargs -0 stat --format '%d %i '";
 	}
-    }
-  ilist_len=i;
-  if (pclose(inf))
-    {
-      ilist_outofmemory("pclose returned non-zero, probably the directory contains no hardlinked file, don't bother using cow-shell here.");
-      return 1;
-    }
-
-  /* sort the ilist */
-  qsort(ilist, ilist_len, sizeof(struct ilist_struct), compare_ilist);
-
-  /* write out the ilist file */
-  if (NULL==(outf=fopen(ilistpath,"w")))
-    {
-      ilist_outofmemory("cannot open .ilist file");
-      return 1;
-    }
-
-
-  if(1 != fwrite(&header, sizeof(struct ilist_header), 1, outf))
-    {
-      ilist_outofmemory("failed writing header to .ilist file");
-      return 1;
-    }
-
-  if (ilist_len != fwrite(ilist, sizeof(struct ilist_struct), ilist_len, outf))
-    {
-      ilist_outofmemory("failed writing to .ilist file");
-      return 1;
-    }
-
-  if (fclose (outf))
-    {
-      ilist_outofmemory("error flushing to .ilist file");
-      return 1;
-    }
-  return 0;
-}
 
+	if (!(ilist = calloc(2000, sizeof(struct ilist_struct)))) {
+		ilist_outofmemory("memory allocation failed");
+		return 1;
+	}
+	ilist_len = 2000;
+	if (NULL == (inf = popen(findcommandline, "r"))) {
+		ilist_outofmemory("popen find failed");
+		return 1;
+	}
+
+	while (fscanf(inf, "%li %li", &dev, &ino) > 0) {
+		(ilist + i)->dev = (dev_t)dev;
+		(ilist + i)->inode = (ino_t)ino;
+
+		if (getenv("COWDANCER_DEBUG")) {
+			printf("%li %li \n ", (long int)dev, (long int)ino);
+		}
+
+		i++;
+		if (i >= ilist_len) {
+			ilist =
+				realloc(ilist, (ilist_len *= 2) * sizeof(struct ilist_struct));
+			if (!ilist) {
+				ilist_outofmemory("realloc failed");
+				pclose(inf);
+				return 1;
+			}
+		}
+	}
+	ilist_len = i;
+	if (pclose(inf)) {
+		ilist_outofmemory(
+			"pclose returned non-zero, probably the directory contains no hardlinked file, don't bother using cow-shell here.");
+		return 1;
+	}
+
+	/* sort the ilist */
+	qsort(ilist, ilist_len, sizeof(struct ilist_struct), compare_ilist);
+
+	/* write out the ilist file */
+	if (NULL == (outf = fopen(ilistpath, "w"))) {
+		ilist_outofmemory("cannot open .ilist file");
+		return 1;
+	}
+
+	if (1 != fwrite(&header, sizeof(struct ilist_header), 1, outf)) {
+		ilist_outofmemory("failed writing header to .ilist file");
+		return 1;
+	}
+
+	if (ilist_len !=
+		fwrite(ilist, sizeof(struct ilist_struct), ilist_len, outf)) {
+		ilist_outofmemory("failed writing to .ilist file");
+		return 1;
+	}
+
+	if (fclose(outf)) {
+		ilist_outofmemory("error flushing to .ilist file");
+		return 1;
+	}
+	return 0;
+}
 
 /* comparison function for qsort/bsearch of ilist
  */
-int
-compare_ilist (const void *a, const void *b)
-{
-  const struct ilist_struct * ilista = (const struct ilist_struct*) a;
-  const struct ilist_struct * ilistb = (const struct ilist_struct*) b;
-  int ret;
-
-  ret = ilista->inode - ilistb->inode;
-  if (!ret)
-    {
-      ret = ilista->dev - ilistb->dev;
-    }
-  return ret;
+int compare_ilist(const void *a, const void *b) {
+	const struct ilist_struct *ilista = (const struct ilist_struct *)a;
+	const struct ilist_struct *ilistb = (const struct ilist_struct *)b;
+	int ret;
+
+	ret = ilista->inode - ilistb->inode;
+	if (!ret) {
+		ret = ilista->dev - ilistb->dev;
+	}
+	return ret;
 }
 
 #ifdef ILISTCREATEBENCH
 /* test code for performance tuning */
-const char* ilist_PRGNAME="testbench";
+const char *ilist_PRGNAME = "testbench";
 
-int
-main()
-{
-  int i;
+int main() {
+	int i;
 
-  if (-1==chdir("/home/dancer/shared/git/linux-2.6/"))
-    exit (1);
+	if (-1 == chdir("/home/dancer/shared/git/linux-2.6/"))
+		exit(1);
 
-  for(i=0; i<100; ++i)
-    ilistcreate("/home/dancer/shared/git/linux-2.6/.ilist", NULL);
+	for (i = 0; i < 100; ++i)
+		ilistcreate("/home/dancer/shared/git/linux-2.6/.ilist", NULL);
 
-  exit (0);
+	exit(0);
 }
 
 #endif
diff --git a/initrd/qemuinit.c b/initrd/qemuinit.c
index 2ff3731..fc2da72 100644
--- a/initrd/qemuinit.c
+++ b/initrd/qemuinit.c
@@ -25,161 +25,148 @@
 #define ROOT_MOUNTPOINT "/root"
 
 /* global variable to hold /proc/cmdline */
-char* proc_cmdline = NULL;
-
-void read_proc_cmdline()
-{
-  int fd = open("/proc/cmdline", O_RDONLY);
-  char buf[BUFSIZ];
-  int len=read(fd, buf, sizeof(buf)-1);
-  buf[len]=0;			/* make sure it's NULL-terminated */
-  proc_cmdline=strdup(buf);
-  close(fd);
+char *proc_cmdline = NULL;
+
+void read_proc_cmdline() {
+	int fd = open("/proc/cmdline", O_RDONLY);
+	char buf[BUFSIZ];
+	int len = read(fd, buf, sizeof(buf) - 1);
+	buf[len] = 0; /* make sure it's NULL-terminated */
+	proc_cmdline = strdup(buf);
+	close(fd);
 }
 
 /* parse the command-line option, and return a pointer to
 space-delimited option string */
-const char* parse_option(const char* option)
-{
-  const char* s = proc_cmdline;
-  do {
-    if (!strncmp(option, s, strlen(option)) &&
-	s[strlen(option)] == '=')
-      return s;
-  } while((s=strchr(s, ' ')));
-  return NULL;
+const char *parse_option(const char *option) {
+	const char *s = proc_cmdline;
+	do {
+		if (!strncmp(option, s, strlen(option)) && s[strlen(option)] == '=') {
+			return s;
+		}
+	} while ((s = strchr(s, ' ')));
+	return NULL;
 }
 
 /*
    Return a strdup string, optionally NULL-terminating if it's
    space-delimited.
  */
-char* strdup_spacedelimit(const char* str)
-{
-  char* s = strdup(str);
-  char* space = strchr(str, ' ');
-  if (space) *space = 0;
-  return s;
+char *strdup_spacedelimit(const char *str) {
+	char *s = strdup(str);
+	char *space = strchr(str, ' ');
+	if (space) {
+		*space = 0;
+	}
+	return s;
 }
 
 /*
    insert module and display error message when insmod returns an
    error.
  */
-int insmod(const char* module)
-{
-  int ret=forkexeclp("/bin/insmod", "/bin/insmod", module, NULL);
-  if (ret)
-    {
-      fprintf(stderr, "W: insmod of %s returned %i\n",
-	      module,
-	      ret);
-    }
-  return ret;
-
+int insmod(const char *module) {
+	int ret = forkexeclp("/bin/insmod", "/bin/insmod", module, NULL);
+	if (ret) {
+		fprintf(stderr, "W: insmod of %s returned %i\n", module, ret);
+	}
+	return ret;
 }
 
-int main(int argc, char** argv)
-{
-  printf(" -> qemu-pbuilder first-stage(initrd version)\n");
-
-  umask(S_IWGRP | S_IWOTH);
-
-  chdir("/");
-  setenv("PATH", "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", 1);
-  setenv("PBUILDER_MOUNTPOINT", PBUILDER_MOUNTPOINT, 1);
-
-  mkdir("/root", 0777);		/* mountpoint */
-  mkdir("/proc", 0777);
-  mkdir("/dev", 0777);
-  mkdir("/dev/pts", 0777);
-
-  if (mount("/proc", "/proc",
-	    "proc", MS_MGC_VAL, NULL) == -1)
-    {
-      perror("mount proc");
-    }
-
-  if (mount("/dev/pts", "/dev/pts",
-	    "devpts", MS_MGC_VAL, NULL) == -1)
-    {
-      perror("mount devpts");
-    }
-
-  read_proc_cmdline();
-
-  /* ext3 driver */
-  insmod("lib/modules/linux-live/kernel/drivers/ide/ide-core.ko");
-  insmod("lib/modules/linux-live/kernel/drivers/ide/ide-disk.ko");
-  insmod("lib/modules/linux-live/kernel/drivers/ide/ide-generic.ko");
-  insmod("lib/modules/linux-live/kernel/fs/mbcache.ko");
-  insmod("lib/modules/linux-live/kernel/fs/jbd/jbd.ko");
-  insmod("lib/modules/linux-live/kernel/fs/ext2/ext2.ko");
-  insmod("lib/modules/linux-live/kernel/fs/ext3/ext3.ko");
-  sleep(1);
-
-  /* ne2k driver */
-  insmod("lib/modules/linux-live/kernel/drivers/net/8390.ko");
-  insmod("lib/modules/linux-live/kernel/drivers/net/ne2k-pci.ko");
-  /* ARM would need different driver... smc */
-
-  if (copy_file("/proc/mounts", "/etc/mtab"))
-    {
-      fprintf(stderr, "Cannot copy file /proc/mounts to /etc/mtab.\n");
-    }
-
-  mknod_inside_chroot("", "dev/sda", S_IFBLK | 0660, makedev(8, 0));
-  mknod_inside_chroot("", "dev/sdb", S_IFBLK | 0660, makedev(8, 16));
-  mknod_inside_chroot("", "dev/hda", S_IFBLK | 0660, makedev(3, 0));
-  mknod_inside_chroot("", "dev/hdb", S_IFBLK | 0660, makedev(3, 64));
-
-  if (mount("/dev/sda", ROOT_MOUNTPOINT, "ext3",
-	     MS_MGC_VAL, NULL) == -1)
-    {
-      perror("mount root device try sda");
-      if (mount("/dev/hda", ROOT_MOUNTPOINT, "ext3",
-		MS_MGC_VAL, NULL) == -1)
-	{
-	  perror("mount root device try hda");
+int main(int argc, char **argv) {
+	printf(" -> qemu-pbuilder first-stage(initrd version)\n");
+
+	umask(S_IWGRP | S_IWOTH);
+
+	chdir("/");
+	setenv("PATH",
+		   "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
+		   1);
+	setenv("PBUILDER_MOUNTPOINT", PBUILDER_MOUNTPOINT, 1);
+
+	mkdir("/root", 0777); /* mountpoint */
+	mkdir("/proc", 0777);
+	mkdir("/dev", 0777);
+	mkdir("/dev/pts", 0777);
+
+	if (mount("/proc", "/proc", "proc", MS_MGC_VAL, NULL) == -1) {
+		perror("mount proc");
+	}
+
+	if (mount("/dev/pts", "/dev/pts", "devpts", MS_MGC_VAL, NULL) == -1) {
+		perror("mount devpts");
+	}
+
+	read_proc_cmdline();
+
+	/* ext3 driver */
+	insmod("lib/modules/linux-live/kernel/drivers/ide/ide-core.ko");
+	insmod("lib/modules/linux-live/kernel/drivers/ide/ide-disk.ko");
+	insmod("lib/modules/linux-live/kernel/drivers/ide/ide-generic.ko");
+	insmod("lib/modules/linux-live/kernel/fs/mbcache.ko");
+	insmod("lib/modules/linux-live/kernel/fs/jbd/jbd.ko");
+	insmod("lib/modules/linux-live/kernel/fs/ext2/ext2.ko");
+	insmod("lib/modules/linux-live/kernel/fs/ext3/ext3.ko");
+	sleep(1);
+
+	/* ne2k driver */
+	insmod("lib/modules/linux-live/kernel/drivers/net/8390.ko");
+	insmod("lib/modules/linux-live/kernel/drivers/net/ne2k-pci.ko");
+	/* ARM would need different driver... smc */
+
+	if (copy_file("/proc/mounts", "/etc/mtab")) {
+		fprintf(stderr, "Cannot copy file /proc/mounts to /etc/mtab.\n");
+	}
+
+	mknod_inside_chroot("", "dev/sda", S_IFBLK | 0660, makedev(8, 0));
+	mknod_inside_chroot("", "dev/sdb", S_IFBLK | 0660, makedev(8, 16));
+	mknod_inside_chroot("", "dev/hda", S_IFBLK | 0660, makedev(3, 0));
+	mknod_inside_chroot("", "dev/hdb", S_IFBLK | 0660, makedev(3, 64));
+
+	if (mount("/dev/sda", ROOT_MOUNTPOINT, "ext3", MS_MGC_VAL, NULL) == -1) {
+		perror("mount root device try sda");
+		if (mount("/dev/hda", ROOT_MOUNTPOINT, "ext3", MS_MGC_VAL, NULL) ==
+			-1) {
+			perror("mount root device try hda");
+		}
 	}
-    }
-
-  if (mount("/dev/sdb",
-	    ROOT_MOUNTPOINT PBUILDER_MOUNTPOINT,
-	    "ext3", MS_MGC_VAL, NULL) == -1)
-    {
-      perror("mount command device try sdb");
-      if (mount("/dev/hdb",
-		ROOT_MOUNTPOINT PBUILDER_MOUNTPOINT,
-		"ext3", MS_MGC_VAL, NULL) == -1)
-	{
-	   perror("mount command device try hdb");
+
+	if (mount("/dev/sdb",
+			  ROOT_MOUNTPOINT PBUILDER_MOUNTPOINT,
+			  "ext3",
+			  MS_MGC_VAL,
+			  NULL) == -1) {
+		perror("mount command device try sdb");
+		if (mount("/dev/hdb",
+				  ROOT_MOUNTPOINT PBUILDER_MOUNTPOINT,
+				  "ext3",
+				  MS_MGC_VAL,
+				  NULL) == -1) {
+			perror("mount command device try hdb");
+		}
 	}
-    }
 
-  /* debug shell to see what's there. */
-  printf("command-line inside initrd, exit to continue\n");
-  forkexeclp("/bin/sh", "/bin/sh", NULL);
+	/* debug shell to see what's there. */
+	printf("command-line inside initrd, exit to continue\n");
+	forkexeclp("/bin/sh", "/bin/sh", NULL);
 
-  if (chroot("root/"))
-    {
-      perror("chroot");
-    }
+	if (chroot("root/")) {
+		perror("chroot");
+	}
 
-  if (chdir("/"))
-    {
-      perror("chdir");
-    }
+	if (chdir("/")) {
+		perror("chdir");
+	}
 
-  forkexeclp("bin/sh", "bin/sh", PBUILDER_MOUNTPOINT "/pbuilder-run", NULL);
+	forkexeclp("bin/sh", "bin/sh", PBUILDER_MOUNTPOINT "/pbuilder-run", NULL);
 
-  /* debug shell inside chroot. */
-  printf("command-line inside chroot, exit to continue\n");
-  forkexeclp("bin/sh", "bin/sh", NULL);
+	/* debug shell inside chroot. */
+	printf("command-line inside chroot, exit to continue\n");
+	forkexeclp("bin/sh", "bin/sh", NULL);
 
-  /* turn the machine off */
-  sync();
-  sync();
-  reboot(RB_POWER_OFF);
-  return 0;
+	/* turn the machine off */
+	sync();
+	sync();
+	reboot(RB_POWER_OFF);
+	return 0;
 }
diff --git a/log.c b/log.c
index 388a4b5..4573fde 100644
--- a/log.c
+++ b/log.c
@@ -31,10 +31,10 @@
 #include <curses.h>
 #include <term.h>
 
-static const char *red="\033[0;31m";
-static const char *yellow="\033[1;33m";
-static const char *blue="\033[0;34m";
-static const char *reset="\033[0m";
+static const char *red = "\033[0;31m";
+static const char *yellow = "\033[1;33m";
+static const char *blue = "\033[0;34m";
+static const char *reset = "\033[0m";
 
 static int called_setupterm = 0;
 static log_level filter_level = log_info;
@@ -42,198 +42,186 @@ static log_use_colors use_colors = log_use_colors_auto;
 /* Same as use_colors, but stays as auto even when auto has been resolved */
 static log_use_colors use_colors_orig = log_use_colors_auto;
 
-static int term_supports_colors(void)
-{
-  /* Don't use log_printf - potential for infinite mutual recursion... */
+static int term_supports_colors(void) {
+	/* Don't use log_printf - potential for infinite mutual recursion... */
 
-  int colors;
-  int erret;
-  const char *term;
+	int colors;
+	int erret;
+	const char *term;
 
-  term = getenv("TERM");
+	term = getenv("TERM");
 
-  if (!term || !*term)
-    return 0;
-
-  if (!called_setupterm)
-    {
-      if (setupterm(term, STDOUT_FILENO, &erret) != OK && erret <= 0)
-	{
-	  fprintf(stderr, "E: Error calling setupterm: %d\n", erret);
-	  return 0;
+	if (!term || !*term) {
+		return 0;
 	}
 
-      called_setupterm = 1;
-    }
+	if (!called_setupterm) {
+		if (setupterm(term, STDOUT_FILENO, &erret) != OK && erret <= 0) {
+			fprintf(stderr, "E: Error calling setupterm: %d\n", erret);
+			return 0;
+		}
+
+		called_setupterm = 1;
+	}
 
-  colors = tigetnum("colors");
+	colors = tigetnum("colors");
 
-  /* colors is -1 on error, which will be treated as not supported */
-  return colors >= 8;
+	/* colors is -1 on error, which will be treated as not supported */
+	return colors >= 8;
 }
 
-static FILE *file_for_level(log_level level)
-{
-  switch (level & LOG_LEVEL_MASK) {
-    case log_debug:
-    case log_info:
-      return stdout;
-    case log_warn:
-    case log_error:
-    default:
-      return stderr;
-  }
+static FILE *file_for_level(log_level level) {
+	switch (level & LOG_LEVEL_MASK) {
+		case log_debug:
+		case log_info:
+			return stdout;
+		case log_warn:
+		case log_error:
+		default:
+			return stderr;
+	}
 }
 
-log_level log_get_filter_level(void)
-{
-  return filter_level;
+log_level log_get_filter_level(void) {
+	return filter_level;
 }
 
-void log_set_filter_level(log_level filter_level_new)
-{
-  filter_level = filter_level_new;
+void log_set_filter_level(log_level filter_level_new) {
+	filter_level = filter_level_new;
 }
 
-log_use_colors log_get_use_colors(void)
-{
-  if (use_colors == log_use_colors_auto)
-    {
-      if (term_supports_colors())
-	use_colors = log_use_colors_yes;
-      else
-	use_colors = log_use_colors_no;
-    }
-
-  return use_colors;
+log_use_colors log_get_use_colors(void) {
+	if (use_colors == log_use_colors_auto) {
+		if (term_supports_colors()) {
+			use_colors = log_use_colors_yes;
+		} else {
+			use_colors = log_use_colors_no;
+		}
+	}
+
+	return use_colors;
 }
 
-log_use_colors log_get_use_colors_unresolved(void)
-{
-  return use_colors_orig;
+log_use_colors log_get_use_colors_unresolved(void) {
+	return use_colors_orig;
 }
 
-void log_set_use_colors(log_use_colors use_colors_new)
-{
-  use_colors = use_colors_orig = use_colors_new;
+void log_set_use_colors(log_use_colors use_colors_new) {
+	use_colors = use_colors_orig = use_colors_new;
 }
 
-void log_perror(const char *s)
-{
-  if (s != NULL && *s)
-    log_printf(log_error, "%s: %s", s, strerror(errno));
-  else
-    log_printf(log_error, "%s", strerror(errno));
+void log_perror(const char *s) {
+	if (s != NULL && *s) {
+		log_printf(log_error, "%s: %s", s, strerror(errno));
+	} else {
+		log_printf(log_error, "%s", strerror(errno));
+	}
 }
 
-void log_printf(log_level level, const char *format, ...)
-{
-  va_list args;
+void log_printf(log_level level, const char *format, ...) {
+	va_list args;
 
-  if (level < filter_level)
-    return;
+	if (level < filter_level) {
+		return;
+	}
 
-  log_begin(level);
+	log_begin(level);
 
-  va_start(args, format);
-  log_vmiddle(level, format, args);
-  va_end(args);
+	va_start(args, format);
+	log_vmiddle(level, format, args);
+	va_end(args);
 
-  log_end(level);
+	log_end(level);
 }
 
-void log_begin(log_level level)
-{
-  const char *color_str;
-  FILE *file;
-  const char *level_str;
-
-  if (level < filter_level)
-    return;
-
-  file = file_for_level(level);
-
-  if (use_colors == log_use_colors_auto)
-    {
-      if (term_supports_colors())
-	use_colors = log_use_colors_yes;
-      else
-	use_colors = log_use_colors_no;
-    }
-
-  switch (level & LOG_LEVEL_MASK) {
-    case log_debug:
-      color_str = blue;
-      level_str = "D";
-      break;
-    case log_info:
-      color_str = reset;
-      level_str = "I";
-      break;
-    case log_warn:
-      color_str = yellow;
-      level_str = "W";
-      break;
-    case log_error:
-      color_str = red;
-      level_str = "E";
-      break;
-    default:
-      color_str = red;
-      level_str = "?";
-      break;
-  }
-
-  if (use_colors == log_use_colors_yes)
-  {
-    fprintf(file, "%s", color_str);
-  }
-
-  fprintf(file, "%s: ", level_str);
+void log_begin(log_level level) {
+	const char *color_str;
+	FILE *file;
+	const char *level_str;
+
+	if (level < filter_level) {
+		return;
+	}
+
+	file = file_for_level(level);
+
+	if (use_colors == log_use_colors_auto) {
+		if (term_supports_colors()) {
+			use_colors = log_use_colors_yes;
+		} else {
+			use_colors = log_use_colors_no;
+		}
+	}
+
+	switch (level & LOG_LEVEL_MASK) {
+		case log_debug:
+			color_str = blue;
+			level_str = "D";
+			break;
+		case log_info:
+			color_str = reset;
+			level_str = "I";
+			break;
+		case log_warn:
+			color_str = yellow;
+			level_str = "W";
+			break;
+		case log_error:
+			color_str = red;
+			level_str = "E";
+			break;
+		default:
+			color_str = red;
+			level_str = "?";
+			break;
+	}
+
+	if (use_colors == log_use_colors_yes) {
+		fprintf(file, "%s", color_str);
+	}
+
+	fprintf(file, "%s: ", level_str);
 }
 
-void log_middle(log_level level, const char *format, ...)
-{
-  va_list args;
-  FILE *file;
+void log_middle(log_level level, const char *format, ...) {
+	va_list args;
+	FILE *file;
 
-  if (level < filter_level)
-    return;
+	if (level < filter_level) {
+		return;
+	}
 
-  file = file_for_level(level);
+	file = file_for_level(level);
 
-  va_start(args, format);
-  vfprintf(file, format, args);
-  va_end(args);
+	va_start(args, format);
+	vfprintf(file, format, args);
+	va_end(args);
 }
 
-void log_vmiddle(log_level level, const char *format, va_list args)
-{
-  FILE *file;
+void log_vmiddle(log_level level, const char *format, va_list args) {
+	FILE *file;
 
-  if (level < filter_level)
-    return;
+	if (level < filter_level) {
+		return;
+	}
 
-  file = file_for_level(level);
+	file = file_for_level(level);
 
-  vfprintf(file, format, args);
+	vfprintf(file, format, args);
 }
 
-void log_end(log_level level)
-{
-  FILE *file;
+void log_end(log_level level) {
+	FILE *file;
 
-  if (level < filter_level)
-    return;
+	if (level < filter_level) {
+		return;
+	}
 
-  file = file_for_level(level);
+	file = file_for_level(level);
 
-  if (use_colors == log_use_colors_yes)
-    {
-      fprintf(file, "%s\n", reset);
-    }
-  else
-    {
-      fprintf(file, "\n");
-    }
+	if (use_colors == log_use_colors_yes) {
+		fprintf(file, "%s\n", reset);
+	} else {
+		fprintf(file, "\n");
+	}
 }
diff --git a/log.h b/log.h
index 8956b1a..df96ed4 100644
--- a/log.h
+++ b/log.h
@@ -25,20 +25,20 @@
 #include <stdio.h>
 
 typedef enum log_level {
-  log_debug = 0,
-  log_info = 1,
-  log_warn = 2,
-  log_error = 3,
-  /* Do not use on its own - OR it in */
-  log_always_print = 0x100
+	log_debug = 0,
+	log_info = 1,
+	log_warn = 2,
+	log_error = 3,
+	/* Do not use on its own - OR it in */
+	log_always_print = 0x100
 } log_level;
 
 #define LOG_LEVEL_MASK 0xff
 
 typedef enum log_use_colors {
-  log_use_colors_auto,
-  log_use_colors_no,
-  log_use_colors_yes
+	log_use_colors_auto,
+	log_use_colors_no,
+	log_use_colors_yes
 } log_use_colors;
 
 log_level log_get_filter_level(void);
@@ -53,16 +53,16 @@ void log_set_use_colors(log_use_colors use_colors_new);
 
 void log_perror(const char *s);
 
-__attribute__((format(printf, 2, 3)))
-void log_printf(log_level level, const char *format, ...);
+__attribute__((format(printf, 2, 3))) void
+log_printf(log_level level, const char *format, ...);
 
 void log_begin(log_level level);
 
-__attribute__((format(printf, 2, 3)))
-void log_middle(log_level level, const char *format, ...);
+__attribute__((format(printf, 2, 3))) void
+log_middle(log_level level, const char *format, ...);
 
-__attribute__((format(printf, 2, 0)))
-void log_vmiddle(log_level level, const char *format, va_list args);
+__attribute__((format(printf, 2, 0))) void
+log_vmiddle(log_level level, const char *format, va_list args);
 
 void log_end(log_level level);
 
diff --git a/main.c b/main.c
index 1fdf1c1..ffcfb33 100644
--- a/main.c
+++ b/main.c
@@ -2,9 +2,8 @@
    Just calls app_main. Makes easier for testing individual functions.
  */
 
-int app_main(int ac, char** av);
+int app_main(int ac, char **av);
 
-int main(int ac, char** av)
-{
-  return app_main(ac, av);
+int main(int ac, char **av) {
+	return app_main(ac, av);
 }
diff --git a/parameter.c b/parameter.c
index 6f2039f..8483bb7 100644
--- a/parameter.c
+++ b/parameter.c
@@ -30,8 +30,8 @@
 #include <assert.h>
 
 struct pbuilder_operation_arg {
-  const char* arg;
-  enum pbuilder_operation operation;
+	const char *arg;
+	enum pbuilder_operation operation;
 };
 
 /*
@@ -46,8 +46,8 @@ The last-command will be
 PBUILDER_ADD_PARAM(NULL);
 
  */
-char* pbuildercommandline[MAXPBUILDERCOMMANDLINE];
-int offset=2;
+char *pbuildercommandline[MAXPBUILDERCOMMANDLINE];
+int offset = 2;
 
 /*
 
@@ -64,20 +64,19 @@ The last-command will be
 DEBOOTSTRAP_ADD_PARAM(NULL);
 
  */
-char* debootstrap_command_line[MAX_DEBOOTSTRAP_COMMAND_LINE];
+char *debootstrap_command_line[MAX_DEBOOTSTRAP_COMMAND_LINE];
 int debootstrap_param_offset = 4;
 
 /*
    get size of Null Terminated array of strings
  */
-int size_of_ntarray(char ** buf)
-{
-  int i = 0;
-  while(buf[i]) {
-    ++i;
-    assert(i < MAX_CUSTOM_FILES);
-  }
-  return i;
+int size_of_ntarray(char **buf) {
+	int i = 0;
+	while (buf[i]) {
+		++i;
+		assert(i < MAX_CUSTOM_FILES);
+	}
+	return i;
 }
 
 /**
@@ -86,39 +85,31 @@ int size_of_ntarray(char ** buf)
  *
  ... for ', ''"'"
  */
-char* strdup_strip_quote(const char* p) {
-  if (*p == 0) {
-    return strdup("");
-  }
-
-  size_t len = strlen(p);
-  if (*p == '\'' && p[len-1] == '\'') {
-    char* ret = strdup(p+1);
-    assert(strlen(ret) == len - 1);
-    ret[len-2] = 0;
-    return ret;
-  }
-  return strdup(p);
+char *strdup_strip_quote(const char *p) {
+	if (*p == 0) {
+		return strdup("");
+	}
+
+	size_t len = strlen(p);
+	if (*p == '\'' && p[len - 1] == '\'') {
+		char *ret = strdup(p + 1);
+		assert(strlen(ret) == len - 1);
+		ret[len - 2] = 0;
+		return ret;
+	}
+	return strdup(p);
 }
 
-void parse_set_log_level(const char *str)
-{
-  if (!strcmp(str, "D"))
-  {
-    log_set_filter_level(log_debug);
-  }
-  else if (!strcmp(str, "I"))
-  {
-    log_set_filter_level(log_info);
-  }
-  else if (!strcmp(str, "W"))
-  {
-    log_set_filter_level(log_warn);
-  }
-  else if (!strcmp(str, "E"))
-  {
-    log_set_filter_level(log_error);
-  }
+void parse_set_log_level(const char *str) {
+	if (!strcmp(str, "D")) {
+		log_set_filter_level(log_debug);
+	} else if (!strcmp(str, "I")) {
+		log_set_filter_level(log_info);
+	} else if (!strcmp(str, "W")) {
+		log_set_filter_level(log_warn);
+	} else if (!strcmp(str, "E")) {
+		log_set_filter_level(log_error);
+	}
 }
 
 /**
@@ -132,784 +123,724 @@ void parse_set_log_level(const char *str)
  *   1 = file not found
  *   2 = syntax error
  */
-int load_config_file(const char* config, pbuilderconfig* pc)
-{
-  char *s;
-  FILE* f;
-
-  char* buf=NULL;
-  size_t bufsiz=0;
-  char* delim;
-  int result;
-
-  asprintf(&s, "env bash -c 'set -e ; . %s; set ' 2>&1", config);
-  f=popen(s, "r");
-  if( NULL == f )
-    return -1;
-  while ( (0 == feof(f)) && (getline(&buf,&bufsiz,f)>0) )
-    {
-      if (strrchr(buf,'\n'))
-	{
-	  *(strrchr(buf,'\n'))=0;
+int load_config_file(const char *config, pbuilderconfig *pc) {
+	char *s;
+	FILE *f;
+
+	char *buf = NULL;
+	size_t bufsiz = 0;
+	char *delim;
+	int result;
+
+	asprintf(&s, "env bash -c 'set -e ; . %s; set ' 2>&1", config);
+	f = popen(s, "r");
+	if (NULL == f) {
+		return -1;
 	}
-
-      if ((delim=strchr(buf,'=')))
-	{
-	  /* assuming config entry */
-	  *(delim++)=0;
-	  if (!strcmp(buf, "LOGLEVEL"))
-	    {
-	      parse_set_log_level(delim);
-	    }
-	  else if (!strcmp(buf, "USECOLORS"))
-	    {
-	      if (!strcmp(delim, "auto"))
-		{
-		  log_set_use_colors(log_use_colors_auto);
+	while ((0 == feof(f)) && (getline(&buf, &bufsiz, f) > 0)) {
+		if (strrchr(buf, '\n')) {
+			*(strrchr(buf, '\n')) = 0;
 		}
-	      else if (!strcmp(delim, "no"))
-		{
-		  log_set_use_colors(log_use_colors_no);
-		}
-	      else if (!strcmp(delim, "yes"))
-		{
-		  log_set_use_colors(log_use_colors_yes);
-		}
-	    }
-	  else if (!strcmp(buf, "MIRRORSITE"))
-	    {
-	      pc->mirror=strdup_strip_quote(delim);
-	    }
-	  else if (!strcmp(buf, "BUILDRESULT"))
-	    {
-	      pc->buildresult=strdup_strip_quote(delim);
-	    }
-	  else if (!strcmp(buf, "DISTRIBUTION"))
-	    {
-	      pc->distribution=strdup_strip_quote(delim);
-	    }
-	  else if (!strcmp(buf, "KERNEL_IMAGE"))
-	    {
-	      pc->kernel_image=strdup_strip_quote(delim);
-	    }
-	  else if (!strcmp(buf, "INITRD"))
-	    {
-	      pc->initrd=strdup_strip_quote(delim);
-	    }
-	  else if (!strcmp(buf, "MEMORY_MEGS"))
-	    {
-	      pc->memory_megs=atoi(delim);
-	    }
-	  else if (!strcmp(buf, "ARCHITECTURE"))
-	    {
-	      pc->arch=strdup_strip_quote(delim);
-	    }
-	  else if (!strcmp(buf, "ARCH"))
-	    {
-	      pc->arch=strdup_strip_quote(delim);
-	    }
-	  else if (!strcmp(buf, "BASEPATH"))
-	    {
-	      pc->basepath=strdup_strip_quote(delim);
-	    }
-	  else if (!strcmp(buf, "BUILDPLACE"))
-	    {
-	      pc->buildplace=strdup_strip_quote(delim);
-	    }
-	  else if (!strcmp(buf, "COMPONENTS"))
-	    {
-	      pc->components=strdup_strip_quote(delim);
-	    }
-	  else if (!strcmp(buf, "EXTRAPACKAGES"))
-	    {
-	      pc->extrapackages=strdup_strip_quote(delim);
-	    }
-	  else if (!strcmp(buf, "OTHERMIRROR"))
-	    {
-	      pc->othermirror=strdup_strip_quote(delim);
-	    }
-	  else if (!strcmp(buf, "SMP"))
-	    {
-	      pc->smp=strdup_strip_quote(delim);
-	    }
-	  else if (!strcmp(buf, "HOOKDIR"))
-	    {
-	      pc->hookdir=strdup_strip_quote(delim);
-	    }
-	  else if (!strcmp(buf, "DEBBUILDOPTS"))
-	    {
-	      pc->debbuildopts=strdup_strip_quote(delim);
-	    }
-	  else if (!strcmp(buf, "BINARY_ARCH"))
-	    {
-	      if (!strcmp(delim, "binary"))
-		{
-		  pc->binary_arch=1;
-		  pc->binary_indep=0;
+
+		if ((delim = strchr(buf, '='))) {
+			/* assuming config entry */
+			*(delim++) = 0;
+			if (!strcmp(buf, "LOGLEVEL")) {
+				parse_set_log_level(delim);
+			} else if (!strcmp(buf, "USECOLORS")) {
+				if (!strcmp(delim, "auto")) {
+					log_set_use_colors(log_use_colors_auto);
+				} else if (!strcmp(delim, "no")) {
+					log_set_use_colors(log_use_colors_no);
+				} else if (!strcmp(delim, "yes")) {
+					log_set_use_colors(log_use_colors_yes);
+				}
+			} else if (!strcmp(buf, "MIRRORSITE")) {
+				pc->mirror = strdup_strip_quote(delim);
+			} else if (!strcmp(buf, "BUILDRESULT")) {
+				pc->buildresult = strdup_strip_quote(delim);
+			} else if (!strcmp(buf, "DISTRIBUTION")) {
+				pc->distribution = strdup_strip_quote(delim);
+			} else if (!strcmp(buf, "KERNEL_IMAGE")) {
+				pc->kernel_image = strdup_strip_quote(delim);
+			} else if (!strcmp(buf, "INITRD")) {
+				pc->initrd = strdup_strip_quote(delim);
+			} else if (!strcmp(buf, "MEMORY_MEGS")) {
+				pc->memory_megs = atoi(delim);
+			} else if (!strcmp(buf, "ARCHITECTURE")) {
+				pc->arch = strdup_strip_quote(delim);
+			} else if (!strcmp(buf, "ARCH")) {
+				pc->arch = strdup_strip_quote(delim);
+			} else if (!strcmp(buf, "BASEPATH")) {
+				pc->basepath = strdup_strip_quote(delim);
+			} else if (!strcmp(buf, "BUILDPLACE")) {
+				pc->buildplace = strdup_strip_quote(delim);
+			} else if (!strcmp(buf, "COMPONENTS")) {
+				pc->components = strdup_strip_quote(delim);
+			} else if (!strcmp(buf, "EXTRAPACKAGES")) {
+				pc->extrapackages = strdup_strip_quote(delim);
+			} else if (!strcmp(buf, "OTHERMIRROR")) {
+				pc->othermirror = strdup_strip_quote(delim);
+			} else if (!strcmp(buf, "SMP")) {
+				pc->smp = strdup_strip_quote(delim);
+			} else if (!strcmp(buf, "HOOKDIR")) {
+				pc->hookdir = strdup_strip_quote(delim);
+			} else if (!strcmp(buf, "DEBBUILDOPTS")) {
+				pc->debbuildopts = strdup_strip_quote(delim);
+			} else if (!strcmp(buf, "BINARY_ARCH")) {
+				if (!strcmp(delim, "binary")) {
+					pc->binary_arch = 1;
+					pc->binary_indep = 0;
+				} else if (!strcmp(delim, "all")) {
+					pc->binary_arch = 0;
+					pc->binary_indep = 1;
+				}
+			} else if (!strcmp(buf, "NO_COWDANCER_UPDATE")) {
+				pc->no_cowdancer_update = 1;
+			} else if (!strcmp(buf, "DEBIAN_ETCH_WORKAROUND")) {
+				pc->debian_etch_workaround = 1;
+			} else if (!strcmp(buf, "ARCH_DISKDEVICE")) {
+				pc->arch_diskdevice = strdup_strip_quote(delim);
+			} else if (!strcmp(buf, "HTTP_PROXY")) {
+				pc->http_proxy = strdup_strip_quote(delim);
+			} else if (!strcmp(buf, "ALLOWUNTRUSTED")) {
+				pc->allow_untrusted = !strcmp(delim, "yes");
+			} else if (!strcmp(buf, "BUILDRESULTUID")) {
+				pc->buildresultuid = atoi(delim);
+			} else if (!strcmp(buf, "BUILDRESULTGID")) {
+				pc->buildresultgid = atoi(delim);
+			}
 		}
-	      else if (!strcmp(delim, "all"))
-		{
-		  pc->binary_arch=0;
-		  pc->binary_indep=1;
+	}
+
+	result = WEXITSTATUS(pclose(f));
+	if (buf) {
+		// Don't warn of missing config files
+		if (result > 1) {
+			log_printf(log_error, "(exit %i) -> %s", result, buf);
 		}
-	    }
-	  else if (!strcmp(buf, "NO_COWDANCER_UPDATE"))
-	    {
-	      pc->no_cowdancer_update=1;
-	    }
-	  else if (!strcmp(buf, "DEBIAN_ETCH_WORKAROUND"))
-	    {
-	      pc->debian_etch_workaround=1;
-	    }
-	  else if (!strcmp(buf, "ARCH_DISKDEVICE"))
-	    {
-	      pc->arch_diskdevice=strdup_strip_quote(delim);
-	    }
-	  else if (!strcmp(buf, "HTTP_PROXY"))
-	    {
-	      pc->http_proxy=strdup_strip_quote(delim);
-	    }
-	  else if (!strcmp(buf, "ALLOWUNTRUSTED"))
-	    {
-	      pc->allow_untrusted=!strcmp(delim, "yes");
-	    }
-	  else if (!strcmp(buf, "BUILDRESULTUID"))
-	    {
-	      pc->buildresultuid=atoi(delim);
-	    }
-	  else if (!strcmp(buf, "BUILDRESULTGID"))
-	    {
-	      pc->buildresultgid=atoi(delim);
-	    }
+		free(buf);
 	}
-    }
-
-  result = WEXITSTATUS( pclose(f) );
-  if (buf) {
-    // Don't warn of missing config files
-    if (result > 1)
-      log_printf(log_error, "(exit %i) -> %s", result, buf);
-    free(buf);
-  }
-  if (s) free(s);
-  return result;
+	if (s) {
+		free(s);
+	}
+	return result;
 }
 
+int cpbuilder_dumpconfig(pbuilderconfig *pc) {
+	/* dump configuration */
+	int i;
 
-int cpbuilder_dumpconfig(pbuilderconfig* pc)
-{
-  /* dump configuration */
-  int i;
-
-  log_printf(log_info, "start dump config");
-#define DUMPINT(S) printf("  "#S": %i\n", pc->S);
-#define DUMPSTR(S) printf("  "#S": %s\n", pc->S);
+	log_printf(log_info, "start dump config");
+#define DUMPINT(S) printf("  " #S ": %i\n", pc->S);
+#define DUMPSTR(S) printf("  " #S ": %s\n", pc->S);
 #define DUMPSTRARRAY(S) \
-  for (i = 0; pc->S[i]; ++i) \
-    { \
-      printf("  "#S"[%i]: %s\n", i, pc->S[i]); \
-    }
-
-#define DUMPLOGLEVEL(S) printf("  log_level: "S"\n");
-#define CASELOGLEVEL(L, S) case L: DUMPLOGLEVEL(S); break;
-  switch (log_get_filter_level()) {
-    CASELOGLEVEL(log_debug, "D");
-    CASELOGLEVEL(log_info,  "I");
-    CASELOGLEVEL(log_warn,  "W");
-    CASELOGLEVEL(log_error, "E");
-    default:
-      DUMPLOGLEVEL("?");
-      break;
-  }
-
-#define DUMPUSECOLORS(S) printf("  use_colors: "S"\n")
-#define DUMPUSECOLORSAUTO(S) DUMPUSECOLORS("auto ("S")")
-#define CASEUSECOLORS(S) case log_use_colors_##S: DUMPUSECOLORS(#S); break;
-#define CASEUSECOLORSAUTO(S) case log_use_colors_##S: DUMPUSECOLORSAUTO(#S); break;
-  switch (log_get_use_colors_unresolved()) {
-    case log_use_colors_auto:
-      switch (log_get_use_colors()) {
-	CASEUSECOLORSAUTO(no);
-	CASEUSECOLORSAUTO(yes);
-	default:
-	  DUMPUSECOLORSAUTO("?");
-	  break;
-      }
-      break;
-    CASEUSECOLORS(no);
-    CASEUSECOLORS(yes);
-    default:
-      DUMPUSECOLORS("?");
-      break;
-  }
-
-  DUMPINT(mountproc);
-  DUMPINT(mountdev);
-  DUMPINT(mountdevpts);
-  DUMPINT(save_after_login);
-  DUMPINT(debug);
-
-  DUMPSTR(buildplace);
-  DUMPSTR(buildresult);
-  DUMPSTR(basepath);
-  DUMPSTR(mirror);
-  DUMPSTR(distribution);
-  DUMPSTR(components);
-  DUMPSTR(extrapackages);
-  DUMPSTR(othermirror);
-  DUMPSTR(hookdir);
-  DUMPSTR(debbuildopts);
-  DUMPINT(binary_arch);
-  DUMPINT(binary_indep);
-  DUMPSTR(http_proxy);
-  DUMPINT(allow_untrusted);
-
-  DUMPSTRARRAY(inputfile);
-  DUMPSTRARRAY(outputfile);
-
-  DUMPINT(buildresultuid);
-  DUMPINT(buildresultgid);
-
-  DUMPINT(no_cowdancer_update);
-  DUMPINT(debian_etch_workaround);
-
-  DUMPSTR(kernel_image);
-  DUMPSTR(initrd);
-  DUMPSTR(smp);
-  DUMPINT(memory_megs);
-  DUMPSTR(arch);
-  DUMPSTR(arch_diskdevice);
-
-  log_printf(log_info, "end dump config");
-  return 0;
-}
+	for (i = 0; pc->S[i]; ++i) { \
+		printf("  " #S "[%i]: %s\n", i, pc->S[i]); \
+	}
 
-int parse_parameter(int ac, char** av,
-		    const char* keyword)
-{
-  int c;			/* option */
-  int i;
-  int index_point;
-  int config_ok = -1, load_ok;
-  char * cmdstr=NULL;
-  static pbuilderconfig pc;
-
-  static const struct pbuilder_operation_arg operations[] =
-  {
-    {"--create",     pbuilder_create},
-    {"create",       pbuilder_create},
-
-    {"--update",     pbuilder_update},
-    {"update",       pbuilder_update},
-    {"up",           pbuilder_update},
-    {"u",            pbuilder_update},
-
-    {"--build",      pbuilder_build},
-    {"build",        pbuilder_build},
-    {"b",            pbuilder_build},
-
-    {"--login",      pbuilder_login},
-    {"login",        pbuilder_login},
-    {"l",            pbuilder_login},
-
-    {"--execute",    pbuilder_execute},
-    {"execute",      pbuilder_execute},
-    {"e",            pbuilder_execute},
-
-    {"--dumpconfig", pbuilder_dumpconfig},
-    {"dumpconfig",   pbuilder_dumpconfig},
-
-    {"--help",       pbuilder_help},
-    {"help",         pbuilder_help},
-    {"h",            pbuilder_help},
-    {"--version",    pbuilder_help},
-    {"version",      pbuilder_help},
-    {"-v",           pbuilder_help},
-    {"v",            pbuilder_help},
-
-    {NULL,           pbuilder_do_nothing}
-  };
-
-  static struct option long_options[]=
-  {
-    {"basepath", required_argument, 0, 'b'},
-    {"buildplace", required_argument, 0, 'B'},
-    {"mountproc", no_argument, &(pc.mountproc), 1},
-    {"mountdev", no_argument, &(pc.mountdev), 1},
-    {"mountdevpts", no_argument, &(pc.mountdevpts), 1},
-    {"nomountproc", no_argument, &(pc.mountproc), 0},
-    {"nomountdev", no_argument, &(pc.mountdev), 0},
-    {"nomountdevpts", no_argument, &(pc.mountdevpts), 0},
-    {"save-after-login", no_argument, &(pc.save_after_login), 1},
-    {"save-after-exec", no_argument, &(pc.save_after_login), 1},
-    {"help", no_argument, (int*)&(pc.operation), pbuilder_help},
-    {"version", no_argument, 0, 'v'},
-    {"debug", no_argument, 0, 0},
-    {"loglevel", required_argument, 0, 0},
-    {"configfile", required_argument, 0, 'c'},
-    {"mirror", required_argument, 0, 0},
-    {"buildresult", required_argument, 0, 0},
-    {"distribution", required_argument, 0, 0},
-    {"components", required_argument, 0, 0},
-    {"extrapackages", required_argument, 0, 0},
-    {"othermirror", required_argument, 0, 0},
-    {"smp", required_argument, 0, 0},
-    {"hookdir", required_argument, 0, 0},
-    {"debbuildopts", required_argument, 0, 0},
-    {"binary-arch", no_argument, 0, 0},
-    {"binary-indep", no_argument, 0, 0},
-    {"inputfile", required_argument, 0, 0},
-    {"outputfile", required_argument, 0, 0},
-    {"architecture", required_argument, 0, 0},
-    {"http-proxy", required_argument, 0, 0},
-    {"allow-untrusted", no_argument, 0, 0},
-    {"debootstrapopts", required_argument, 0, 0},
-    {"debootstrap", required_argument, 0, 0},
-
-    /* cowbuilder specific options */
-    {"no-cowdancer-update", no_argument, 0, 0},
-    {"debian-etch-workaround", no_argument, 0, 0},
-
-    /* qemubuilder specific options */
-    {"arch-diskdevice", no_argument, 0, 0},
-
-    /* verbatim options with argument, synced as of pbuilder 0.228 */
-    {"use-network", required_argument, 0, 'M'},
-    {"host-arch", required_argument, 0, 'M'},
-    {"aptcache", required_argument, 0, 'M'},
-    {"debemail", required_argument, 0, 'M'},
-    {"profiles", required_argument, 0, 'M'},
-    {"logfile", required_argument, 0, 'M'},
-    {"aptconfdir", required_argument, 0, 'M'},
-    {"timeout", required_argument, 0, 'M'},
-    {"bin-nmu", required_argument, 0, 'M'},
-    {"bin-nmu-maintainer", required_argument, 0, 'M'},
-    {"bin-nmu-version", required_argument, 0, 'M'},
-    {"bin-nmu-timestamp", required_argument, 0, 'M'},
-    {"keyring", required_argument, 0, 'M'},
-    {"bindmounts", required_argument, 0, 'M'},
-
-    /* verbatim options without argument, synced as of pbuilder 0.228 */
-    {"no-auto-cross", no_argument, 0, 'm'},
-    {"autocleanaptcache", no_argument, 0, 'm'},
-    {"removepackages", no_argument, 0, 'm'},
-    {"pkgname-logfile", no_argument, 0, 'm'},
-    {"override-config", no_argument, 0, 'm'},
-    {"source-only-changes", no_argument, 0, 'm'},
-    {"preserve-buildplace", no_argument, 0, 'm'},
-    {"debdelta", no_argument, 0, 'm'},
-    {"twice", no_argument, 0, 'm'},
-
-    {0,0,0,0}
-  };
-
-  /* define pc to be clear. */
-  memset (&pc, 0, sizeof(pbuilderconfig));
-  /* default command-line component */
-  pbuildercommandline[0]="pbuilder";
-  debootstrap_command_line[0]=strdup("debootstrap");
-
-  /**
-   * Try to load all standard config files.
-   * Skip non existing, but exit on broken ones.
-   * config_ok is 0, if any load was successfull
-   **/
-  load_ok = load_config_file("/usr/share/pbuilder/pbuilderrc", &pc);
-  if( load_ok > 1 ) exit( 2 );
-  if( config_ok != 0 ) config_ok = load_ok;
-
-  load_ok = load_config_file("/etc/pbuilderrc", &pc);
-  if( load_ok > 1 ) exit( 3 );
-  if( config_ok != 0 ) config_ok = load_ok;
-
-  load_ok = load_config_file("~/.pbuilderrc", &pc);
-  if( load_ok > 1 ) exit( 4 );
-  if( config_ok != 0 ) config_ok = load_ok;
-
-  if (ac >= 2)
-    {
-      for (i = 0; operations[i].arg; ++i)
-	{
-	  if (!strcmp(av[1], operations[i].arg))
-	    {
-	      pc.operation = operations[i].operation;
-	      break;
-	    }
+#define DUMPLOGLEVEL(S) printf("  log_level: " S "\n");
+#define CASELOGLEVEL(L, S) \
+	case L: \
+		DUMPLOGLEVEL(S); \
+		break;
+
+	switch (log_get_filter_level()) {
+		CASELOGLEVEL(log_debug, "D");
+		CASELOGLEVEL(log_info, "I");
+		CASELOGLEVEL(log_warn, "W");
+		CASELOGLEVEL(log_error, "E");
+		default:
+			DUMPLOGLEVEL("?");
+			break;
 	}
 
-      if (pc.operation == pbuilder_do_nothing)
-	{
-	  log_printf(log_error, "Unknown operation: %s", av[1]);
-	  return 1;
+#define DUMPUSECOLORS(S) printf("  use_colors: " S "\n")
+#define DUMPUSECOLORSAUTO(S) DUMPUSECOLORS("auto (" S ")")
+#define CASEUSECOLORS(S) \
+	case log_use_colors_##S: \
+		DUMPUSECOLORS(#S); \
+		break;
+#define CASEUSECOLORSAUTO(S) \
+	case log_use_colors_##S: \
+		DUMPUSECOLORSAUTO(#S); \
+		break;
+
+	switch (log_get_use_colors_unresolved()) {
+		case log_use_colors_auto:
+			switch (log_get_use_colors()) {
+				CASEUSECOLORSAUTO(no);
+				CASEUSECOLORSAUTO(yes);
+				default:
+					DUMPUSECOLORSAUTO("?");
+					break;
+			}
+			break;
+			CASEUSECOLORS(no);
+			CASEUSECOLORS(yes);
+		default:
+			DUMPUSECOLORS("?");
+			break;
 	}
-    }
-  else
-    {
-      log_printf(log_error, "No operation specified");
-      return 1;
-    }
-
-  --ac;
-  av[1] = av[0];
-  ++av;
-
-#define PASS_TO_PBUILDER_WITH_PARAM PBUILDER_ADD_PARAM(cmdstr); \
-	      PBUILDER_ADD_PARAM(strdup(optarg));
-
-  /* load config files here. */
-  while((c = getopt_long (ac, av, "b:B:c:hv", long_options, &index_point)) != -1)
-    {
-      switch (c)
-	{
-	case 'b':		/* basepath */
-	  if (pc.operation == pbuilder_create)
-	    {
-	      if (mkdir(optarg, 0777)<0)
-		{
-		  log_printf(log_error,
-			     "Could not create basepath '%s': %s",
-			     optarg,
-			     strerror(errno));
-		  return 1;
-		}
-	    }
-	  else if (!pc.operation)
-	    {
-	      log_printf(log_error, "need to specify operation before --basepath option");
-	      return 1;
-	    }
-	  if (!(pc.basepath = canonicalize_file_name(optarg)))
-	    {
-	      log_printf(log_error, "cannot canonicalize filename %s, does not exist", optarg);
-	      return 1;
-	    }
-	  break;
-	case 'B':		/* buildplace */
-	  pc.buildplace = strdup(optarg);
-	  break;
-	case 'c':		/* --config */
-	  load_ok = load_config_file(optarg, &pc);
-	  if( load_ok > 1 ) exit( 5 );
-	  if( config_ok != 0 ) config_ok = load_ok;
-
-	  if (0>asprintf(&cmdstr, "--%s", long_options[index_point].name))
-	    {
-	      /* error */
-	      log_printf(log_error, "out of memory constructing command-line options");
-	      exit (1);
-	    }
-	  PASS_TO_PBUILDER_WITH_PARAM
-	  break;
-	case 'M':		/* pass through to pbuilder: duplicate with param */
-	  if (0>asprintf(&cmdstr, "--%s", long_options[index_point].name))
-	    {
-	      /* error */
-	      log_printf(log_error, "out of memory constructing command-line options");
-	      exit (1);
-	    }
-	  PASS_TO_PBUILDER_WITH_PARAM
-	  break;
-	case 'm':		/* pass through to pbuilder: duplicate without param */
-	  if (0>asprintf(&cmdstr, "--%s", long_options[index_point].name))
-	    {
-	      /* error */
-	      log_printf(log_error, "out of memory constructing command-line options");
-	      exit (1);
-	    }
-	  PBUILDER_ADD_PARAM(cmdstr);
-	  break;
-	case 0:
-	  /* other cases with long option with flags, this is expected
-	     behavior, so ignore it, for most of the time.
-	  */
-
-	  /* handle specific options which also give 0. */
-
-	  /* first, generate 'cmdstr' which is useful anyway */
-	  if (0>asprintf(&cmdstr, "--%s", long_options[index_point].name))
-	    {
-	      /* error */
-	      log_printf(log_error, "out of memory constructing command-line options");
-	      exit (1);
-	    }
-
-	  if (!strcmp(long_options[index_point].name,"loglevel"))
-	    {
-	      parse_set_log_level(optarg);
-	      PASS_TO_PBUILDER_WITH_PARAM
-	    }
-	  else if (!strcmp(long_options[index_point].name,"mirror"))
-	    {
-	      pc.mirror=strdup(optarg);
-	    }
-	  else if (!strcmp(long_options[index_point].name,"buildresult"))
-	    {
-	      pc.buildresult=strdup(optarg);
-	    }
-	  else if (!strcmp(long_options[index_point].name,"distribution"))
-	    {
-	      pc.distribution=strdup(optarg);
-	    }
-	  else if (!strcmp(long_options[index_point].name,"no-cowdancer-update"))
-	    {
-	      pc.no_cowdancer_update=1;
-	    }
-	  else if (!strcmp(long_options[index_point].name,"debian-etch-workaround"))
-	    {
-	      pc.debian_etch_workaround=1;
-	    }
-	  else if (!strcmp(long_options[index_point].name,"architecture"))
-	    {
-	      pc.arch=strdup(optarg);
-	    }
-	  else if (!strcmp(long_options[index_point].name,"arch-diskdevice"))
-	    {
-	      pc.arch_diskdevice=strdup(optarg);
-	    }
-	  else if (!strcmp(long_options[index_point].name,"debug"))
-	    {
-	      pc.debug=1;
-	      PBUILDER_ADD_PARAM(cmdstr);
-	    }
-	  else if (!strcmp(long_options[index_point].name,"inputfile"))
-	    {
-	      pc.inputfile[size_of_ntarray(pc.inputfile)]=strdup(optarg);
-	      if (size_of_ntarray(pc.inputfile) >= MAX_CUSTOM_FILES)
-		{
-		  log_printf(log_error, "too many inputfile options");
-		  exit (1);
-		}
-	      PASS_TO_PBUILDER_WITH_PARAM
-	    }
-	  else if (!strcmp(long_options[index_point].name,"outputfile"))
-	    {
-	      pc.inputfile[size_of_ntarray(pc.outputfile)]=strdup(optarg);
-	      if (size_of_ntarray(pc.outputfile) >= MAX_CUSTOM_FILES)
-		{
-		  log_printf(log_error, "too many outputfile options");
-		  exit (1);
-		}
-	    }
-	  else if (!strcmp(long_options[index_point].name,"components"))
-	    {
-	      /* this is for qemubuilder */
-	      pc.components=strdup(optarg);
-
-	      /* pass it for cowbuilder */
-	      PASS_TO_PBUILDER_WITH_PARAM
-	    }
-	  else if (!strcmp(long_options[index_point].name,"extrapackages"))
-	    {
-	      /* this is for qemubuilder and cowbuilder (adds cowdancer) */
-	      pc.extrapackages=strdup(optarg);
-	    }
-	  else if (!strcmp(long_options[index_point].name,"othermirror"))
-	    {
-	      /* this is for qemubuilder */
-	      pc.othermirror=strdup(optarg);
-
-	      /* pass it for cowbuilder */
-	      PASS_TO_PBUILDER_WITH_PARAM
-	    }
-	  else if (!strcmp(long_options[index_point].name,"smp"))
-	    {
-	      /* this is for qemubuilder */
-	      pc.smp=strdup(optarg);
-
-	      /* pass it for cowbuilder */
-	      PASS_TO_PBUILDER_WITH_PARAM
-	    }
-	  else if (!strcmp(long_options[index_point].name,"http-proxy"))
-	    {
-	      /* this is for qemubuilder */
-	      pc.http_proxy=strdup(optarg);
-
-	      /* pass it for cowbuilder */
-	      PASS_TO_PBUILDER_WITH_PARAM
-	    }
-	  else if (!strcmp(long_options[index_point].name,"hookdir"))
-	    {
-	      /* this is for qemubuilder */
-	      pc.hookdir=strdup(optarg);
-
-	      /* pass it for cowbuilder */
-	      PASS_TO_PBUILDER_WITH_PARAM
-	    }
-	  else if (!strcmp(long_options[index_point].name,"debbuildopts"))
-	    {
-	      /* this is for qemubuilder */
-	      pc.debbuildopts=strdup(optarg);
-
-	      /* pass it for cowbuilder */
-	      PASS_TO_PBUILDER_WITH_PARAM
-	    }
-	  else if (!strcmp(long_options[index_point].name,"binary-arch"))
-	    {
-	      pc.binary_arch=1;
-	      pc.binary_indep=0;
-	      PBUILDER_ADD_PARAM(cmdstr);
-	    }
-	  else if (!strcmp(long_options[index_point].name,"binary-indep"))
-	    {
-	      pc.binary_arch=0;
-	      pc.binary_indep=1;
-	      PBUILDER_ADD_PARAM(cmdstr);
-	    }
-	  else if (!strcmp(long_options[index_point].name,"allow-untrusted"))
-	    {
-	      pc.allow_untrusted=1;
-	      PBUILDER_ADD_PARAM(cmdstr);
-	    }
-	  else if (!strcmp(long_options[index_point].name,"debootstrapopts"))
-	    {
-	      /* this is for qemubuilder */
-	      DEBOOTSTRAP_ADD_PARAM(strdup(optarg));
-
-	      /* pass it for cowbuilder */
-	      PASS_TO_PBUILDER_WITH_PARAM
-	    }
-	  else if (!strcmp(long_options[index_point].name,"debootstrap"))
-	    {
-	      /* this is for qemubuilder */
-	      free(debootstrap_command_line[0]);
-	      debootstrap_command_line[0]=strdup(optarg);
-
-	      /* pass it for cowbuilder */
-	      PASS_TO_PBUILDER_WITH_PARAM
-	    }
-	  break;
-	case 'h':		/* -h */
-	case 'v':		/* -v --version */
-	  pc.operation=pbuilder_help;
-	  break;
-	default:
-	  log_printf(log_error, "Unhandled option");
-	  /* Error case. */
-	  return 1;
+
+	DUMPINT(mountproc);
+	DUMPINT(mountdev);
+	DUMPINT(mountdevpts);
+	DUMPINT(save_after_login);
+	DUMPINT(debug);
+
+	DUMPSTR(buildplace);
+	DUMPSTR(buildresult);
+	DUMPSTR(basepath);
+	DUMPSTR(mirror);
+	DUMPSTR(distribution);
+	DUMPSTR(components);
+	DUMPSTR(extrapackages);
+	DUMPSTR(othermirror);
+	DUMPSTR(hookdir);
+	DUMPSTR(debbuildopts);
+	DUMPINT(binary_arch);
+	DUMPINT(binary_indep);
+	DUMPSTR(http_proxy);
+	DUMPINT(allow_untrusted);
+
+	DUMPSTRARRAY(inputfile);
+	DUMPSTRARRAY(outputfile);
+
+	DUMPINT(buildresultuid);
+	DUMPINT(buildresultgid);
+
+	DUMPINT(no_cowdancer_update);
+	DUMPINT(debian_etch_workaround);
+
+	DUMPSTR(kernel_image);
+	DUMPSTR(initrd);
+	DUMPSTR(smp);
+	DUMPINT(memory_megs);
+	DUMPSTR(arch);
+	DUMPSTR(arch_diskdevice);
+
+	log_printf(log_info, "end dump config");
+	return 0;
+}
+
+int parse_parameter(int ac, char **av, const char *keyword) {
+	int c; /* option */
+	int i;
+	int index_point;
+	int config_ok = -1, load_ok;
+	char *cmdstr = NULL;
+	static pbuilderconfig pc;
+
+	static const struct pbuilder_operation_arg operations[] = {
+		{"--create", pbuilder_create},
+		{"create", pbuilder_create},
+
+		{"--update", pbuilder_update},
+		{"update", pbuilder_update},
+		{"up", pbuilder_update},
+		{"u", pbuilder_update},
+
+		{"--build", pbuilder_build},
+		{"build", pbuilder_build},
+		{"b", pbuilder_build},
+
+		{"--login", pbuilder_login},
+		{"login", pbuilder_login},
+		{"l", pbuilder_login},
+
+		{"--execute", pbuilder_execute},
+		{"execute", pbuilder_execute},
+		{"e", pbuilder_execute},
+
+		{"--dumpconfig", pbuilder_dumpconfig},
+		{"dumpconfig", pbuilder_dumpconfig},
+
+		{"--help", pbuilder_help},
+		{"help", pbuilder_help},
+		{"h", pbuilder_help},
+		{"--version", pbuilder_help},
+		{"version", pbuilder_help},
+		{"-v", pbuilder_help},
+		{"v", pbuilder_help},
+
+		{NULL, pbuilder_do_nothing}};
+
+	static struct option long_options[] = {
+		{"basepath", required_argument, 0, 'b'},
+		{"buildplace", required_argument, 0, 'B'},
+		{"mountproc", no_argument, &(pc.mountproc), 1},
+		{"mountdev", no_argument, &(pc.mountdev), 1},
+		{"mountdevpts", no_argument, &(pc.mountdevpts), 1},
+		{"nomountproc", no_argument, &(pc.mountproc), 0},
+		{"nomountdev", no_argument, &(pc.mountdev), 0},
+		{"nomountdevpts", no_argument, &(pc.mountdevpts), 0},
+		{"save-after-login", no_argument, &(pc.save_after_login), 1},
+		{"save-after-exec", no_argument, &(pc.save_after_login), 1},
+		{"help", no_argument, (int *)&(pc.operation), pbuilder_help},
+		{"version", no_argument, 0, 'v'},
+		{"debug", no_argument, 0, 0},
+		{"loglevel", required_argument, 0, 0},
+		{"configfile", required_argument, 0, 'c'},
+		{"mirror", required_argument, 0, 0},
+		{"buildresult", required_argument, 0, 0},
+		{"distribution", required_argument, 0, 0},
+		{"components", required_argument, 0, 0},
+		{"extrapackages", required_argument, 0, 0},
+		{"othermirror", required_argument, 0, 0},
+		{"smp", required_argument, 0, 0},
+		{"hookdir", required_argument, 0, 0},
+		{"debbuildopts", required_argument, 0, 0},
+		{"binary-arch", no_argument, 0, 0},
+		{"binary-indep", no_argument, 0, 0},
+		{"inputfile", required_argument, 0, 0},
+		{"outputfile", required_argument, 0, 0},
+		{"architecture", required_argument, 0, 0},
+		{"http-proxy", required_argument, 0, 0},
+		{"allow-untrusted", no_argument, 0, 0},
+		{"debootstrapopts", required_argument, 0, 0},
+		{"debootstrap", required_argument, 0, 0},
+
+		/* cowbuilder specific options */
+		{"no-cowdancer-update", no_argument, 0, 0},
+		{"debian-etch-workaround", no_argument, 0, 0},
+
+		/* qemubuilder specific options */
+		{"arch-diskdevice", no_argument, 0, 0},
+
+		/* verbatim options with argument, synced as of pbuilder 0.228 */
+		{"use-network", required_argument, 0, 'M'},
+		{"host-arch", required_argument, 0, 'M'},
+		{"aptcache", required_argument, 0, 'M'},
+		{"debemail", required_argument, 0, 'M'},
+		{"profiles", required_argument, 0, 'M'},
+		{"logfile", required_argument, 0, 'M'},
+		{"aptconfdir", required_argument, 0, 'M'},
+		{"timeout", required_argument, 0, 'M'},
+		{"bin-nmu", required_argument, 0, 'M'},
+		{"bin-nmu-maintainer", required_argument, 0, 'M'},
+		{"bin-nmu-version", required_argument, 0, 'M'},
+		{"bin-nmu-timestamp", required_argument, 0, 'M'},
+		{"keyring", required_argument, 0, 'M'},
+		{"bindmounts", required_argument, 0, 'M'},
+
+		/* verbatim options without argument, synced as of pbuilder 0.228 */
+		{"no-auto-cross", no_argument, 0, 'm'},
+		{"autocleanaptcache", no_argument, 0, 'm'},
+		{"removepackages", no_argument, 0, 'm'},
+		{"pkgname-logfile", no_argument, 0, 'm'},
+		{"override-config", no_argument, 0, 'm'},
+		{"source-only-changes", no_argument, 0, 'm'},
+		{"preserve-buildplace", no_argument, 0, 'm'},
+		{"debdelta", no_argument, 0, 'm'},
+		{"twice", no_argument, 0, 'm'},
+
+		{0, 0, 0, 0}};
+
+	/* define pc to be clear. */
+	memset(&pc, 0, sizeof(pbuilderconfig));
+	/* default command-line component */
+	pbuildercommandline[0] = "pbuilder";
+	debootstrap_command_line[0] = strdup("debootstrap");
+
+	/**
+	 * Try to load all standard config files.
+	 * Skip non existing, but exit on broken ones.
+	 * config_ok is 0, if any load was successfull
+	 **/
+	load_ok = load_config_file("/usr/share/pbuilder/pbuilderrc", &pc);
+	if (load_ok > 1) {
+		exit(2);
 	}
-    }
-
-  if( 0 != config_ok ) {
-    log_printf(log_error, "Couldn't load any valid config file.");
-    exit( 6 );
-  }
-
-  /* set default values */
-  if (!pc.basepath)
-    asprintf(&(pc.basepath), "/var/cache/pbuilder/base.%s", keyword);
-  if (!pc.buildplace)
-    {
-      log_printf(log_error, "BUILDPLACE is not set");
-      return 1;
-    }
-  else
-    {
-      char* buildplace_ = pc.buildplace;
-      mkdir(buildplace_,0777); /* create if it does not exist */
-      int len = strlen(buildplace_);
-      if (len > 0 && buildplace_[len-1] == '/')
-	{
-	  asprintf(&(pc.buildplace), "%s%s.%i",
-		   buildplace_, keyword, (int)getpid());
+	if (config_ok != 0) {
+		config_ok = load_ok;
 	}
-      else
-	{
-	  asprintf(&(pc.buildplace), "%s/%s.%i",
-		   buildplace_, keyword, (int)getpid());
+
+	load_ok = load_config_file("/etc/pbuilderrc", &pc);
+	if (load_ok > 1) {
+		exit(3);
 	}
-      free(buildplace_);
-    }
-
-  if (!pc.distribution)
-    pc.distribution=strdup("sid");
-
-  if (!pc.buildresultuid)
-    {
-      const char* sudo_uid = getenv("SUDO_UID");
-      if (sudo_uid)
-	pc.buildresultuid = atoi(sudo_uid);
-    }
-
-  if (!pc.buildresultgid)
-    {
-      const char* sudo_gid = getenv("SUDO_GID");
-      if (sudo_gid)
-	pc.buildresultgid = atoi(sudo_gid);
-    }
-
-  if (!pc.memory_megs)
-    pc.memory_megs=256;
-
-  switch(pc.operation)
-    {
-    case pbuilder_build:
-      if (cpbuilder_check_config(&pc))
-	return 1;
-
-      if (!av[optind])
-	{
-	  /* parameter missing */
-	  log_printf(log_error, "parameter missing for build operation");
-	  return 1;
+	if (config_ok != 0) {
+		config_ok = load_ok;
 	}
 
-      return cpbuilder_build(&pc, av[optind]);
-
-    case pbuilder_create:
-      if (cpbuilder_check_config(&pc))
-	return 1;
-
-      if (av[optind])
-	{
-	  /* extra parameter */
-	  log_printf(log_error, "too many parameters for create");
-	  return 1;
+	load_ok = load_config_file("~/.pbuilderrc", &pc);
+	if (load_ok > 1) {
+		exit(4);
+	}
+	if (config_ok != 0) {
+		config_ok = load_ok;
 	}
 
-      return cpbuilder_create(&pc);
-
-    case pbuilder_update:
-      if (cpbuilder_check_config(&pc))
-	return 1;
+	if (ac >= 2) {
+		for (i = 0; operations[i].arg; ++i) {
+			if (!strcmp(av[1], operations[i].arg)) {
+				pc.operation = operations[i].operation;
+				break;
+			}
+		}
 
-      if (av[optind])
-	{
-	  /* extra parameter */
-	  log_printf(log_error, "too many parameters for update");
-	  return 1;
+		if (pc.operation == pbuilder_do_nothing) {
+			log_printf(log_error, "Unknown operation: %s", av[1]);
+			return 1;
+		}
+	} else {
+		log_printf(log_error, "No operation specified");
+		return 1;
 	}
 
-      return cpbuilder_update(&pc);
-
-    case pbuilder_login:
-      if (cpbuilder_check_config(&pc))
-	return 1;
+	--ac;
+	av[1] = av[0];
+	++av;
+
+#define PASS_TO_PBUILDER_WITH_PARAM \
+	PBUILDER_ADD_PARAM(cmdstr); \
+	PBUILDER_ADD_PARAM(strdup(optarg));
+
+	/* load config files here. */
+	while ((c = getopt_long(ac, av, "b:B:c:hv", long_options, &index_point)) !=
+		   -1) {
+		switch (c) {
+			case 'b': /* basepath */
+				if (pc.operation == pbuilder_create) {
+					if (mkdir(optarg, 0777) < 0) {
+						log_printf(log_error,
+								   "Could not create basepath '%s': %s",
+								   optarg,
+								   strerror(errno));
+						return 1;
+					}
+				} else if (!pc.operation) {
+					log_printf(
+						log_error,
+						"need to specify operation before --basepath option");
+					return 1;
+				}
+				if (!(pc.basepath = canonicalize_file_name(optarg))) {
+					log_printf(
+						log_error,
+						"cannot canonicalize filename %s, does not exist",
+						optarg);
+					return 1;
+				}
+				break;
+			case 'B': /* buildplace */
+				pc.buildplace = strdup(optarg);
+				break;
+			case 'c': /* --config */
+				load_ok = load_config_file(optarg, &pc);
+				if (load_ok > 1) {
+					exit(5);
+				}
+				if (config_ok != 0) {
+					config_ok = load_ok;
+				}
+
+				if (0 >
+					asprintf(&cmdstr, "--%s", long_options[index_point].name)) {
+					/* error */
+					log_printf(
+						log_error,
+						"out of memory constructing command-line options");
+					exit(1);
+				}
+				PASS_TO_PBUILDER_WITH_PARAM
+				break;
+			case 'M': /* pass through to pbuilder: duplicate with param */
+				if (0 >
+					asprintf(&cmdstr, "--%s", long_options[index_point].name)) {
+					/* error */
+					log_printf(
+						log_error,
+						"out of memory constructing command-line options");
+					exit(1);
+				}
+				PASS_TO_PBUILDER_WITH_PARAM
+				break;
+			case 'm': /* pass through to pbuilder: duplicate without param */
+				if (0 >
+					asprintf(&cmdstr, "--%s", long_options[index_point].name)) {
+					/* error */
+					log_printf(
+						log_error,
+						"out of memory constructing command-line options");
+					exit(1);
+				}
+				PBUILDER_ADD_PARAM(cmdstr);
+				break;
+			case 0:
+				/* other cases with long option with flags, this is expected
+				 * behavior, so ignore it, for most of the time.
+				 */
+
+				/* handle specific options which also give 0. */
+
+				/* first, generate 'cmdstr' which is useful anyway */
+				if (0 >
+					asprintf(&cmdstr, "--%s", long_options[index_point].name)) {
+					/* error */
+					log_printf(
+						log_error,
+						"out of memory constructing command-line options");
+					exit(1);
+				}
+
+				if (!strcmp(long_options[index_point].name, "loglevel")) {
+					parse_set_log_level(optarg);
+					PASS_TO_PBUILDER_WITH_PARAM
+				} else if (!strcmp(long_options[index_point].name, "mirror")) {
+					pc.mirror = strdup(optarg);
+				} else if (!strcmp(long_options[index_point].name,
+								   "buildresult")) {
+					pc.buildresult = strdup(optarg);
+				} else if (!strcmp(long_options[index_point].name,
+								   "distribution")) {
+					pc.distribution = strdup(optarg);
+				} else if (!strcmp(long_options[index_point].name,
+								   "no-cowdancer-update")) {
+					pc.no_cowdancer_update = 1;
+				} else if (!strcmp(long_options[index_point].name,
+								   "debian-etch-workaround")) {
+					pc.debian_etch_workaround = 1;
+				} else if (!strcmp(long_options[index_point].name,
+								   "architecture")) {
+					pc.arch = strdup(optarg);
+				} else if (!strcmp(long_options[index_point].name,
+								   "arch-diskdevice")) {
+					pc.arch_diskdevice = strdup(optarg);
+				} else if (!strcmp(long_options[index_point].name, "debug")) {
+					pc.debug = 1;
+					PBUILDER_ADD_PARAM(cmdstr);
+				} else if (!strcmp(long_options[index_point].name,
+								   "inputfile")) {
+					pc.inputfile[size_of_ntarray(pc.inputfile)] =
+						strdup(optarg);
+					if (size_of_ntarray(pc.inputfile) >= MAX_CUSTOM_FILES) {
+						log_printf(log_error, "too many inputfile options");
+						exit(1);
+					}
+					PASS_TO_PBUILDER_WITH_PARAM
+				} else if (!strcmp(long_options[index_point].name,
+								   "outputfile")) {
+					pc.inputfile[size_of_ntarray(pc.outputfile)] =
+						strdup(optarg);
+					if (size_of_ntarray(pc.outputfile) >= MAX_CUSTOM_FILES) {
+						log_printf(log_error, "too many outputfile options");
+						exit(1);
+					}
+				} else if (!strcmp(long_options[index_point].name,
+								   "components")) {
+					/* this is for qemubuilder */
+					pc.components = strdup(optarg);
+
+					/* pass it for cowbuilder */
+					PASS_TO_PBUILDER_WITH_PARAM
+				} else if (!strcmp(long_options[index_point].name,
+								   "extrapackages")) {
+					/* this is for qemubuilder and cowbuilder (adds cowdancer) */
+					pc.extrapackages = strdup(optarg);
+				} else if (!strcmp(long_options[index_point].name,
+								   "othermirror")) {
+					/* this is for qemubuilder */
+					pc.othermirror = strdup(optarg);
+
+					/* pass it for cowbuilder */
+					PASS_TO_PBUILDER_WITH_PARAM
+				} else if (!strcmp(long_options[index_point].name, "smp")) {
+					/* this is for qemubuilder */
+					pc.smp = strdup(optarg);
+
+					/* pass it for cowbuilder */
+					PASS_TO_PBUILDER_WITH_PARAM
+				} else if (!strcmp(long_options[index_point].name,
+								   "http-proxy")) {
+					/* this is for qemubuilder */
+					pc.http_proxy = strdup(optarg);
+
+					/* pass it for cowbuilder */
+					PASS_TO_PBUILDER_WITH_PARAM
+				} else if (!strcmp(long_options[index_point].name, "hookdir")) {
+					/* this is for qemubuilder */
+					pc.hookdir = strdup(optarg);
+
+					/* pass it for cowbuilder */
+					PASS_TO_PBUILDER_WITH_PARAM
+				} else if (!strcmp(long_options[index_point].name,
+								   "debbuildopts")) {
+					/* this is for qemubuilder */
+					pc.debbuildopts = strdup(optarg);
+
+					/* pass it for cowbuilder */
+					PASS_TO_PBUILDER_WITH_PARAM
+				} else if (!strcmp(long_options[index_point].name,
+								   "binary-arch")) {
+					pc.binary_arch = 1;
+					pc.binary_indep = 0;
+					PBUILDER_ADD_PARAM(cmdstr);
+				} else if (!strcmp(long_options[index_point].name,
+								   "binary-indep")) {
+					pc.binary_arch = 0;
+					pc.binary_indep = 1;
+					PBUILDER_ADD_PARAM(cmdstr);
+				} else if (!strcmp(long_options[index_point].name,
+								   "allow-untrusted")) {
+					pc.allow_untrusted = 1;
+					PBUILDER_ADD_PARAM(cmdstr);
+				} else if (!strcmp(long_options[index_point].name,
+								   "debootstrapopts")) {
+					/* this is for qemubuilder */
+					DEBOOTSTRAP_ADD_PARAM(strdup(optarg));
+
+					/* pass it for cowbuilder */
+					PASS_TO_PBUILDER_WITH_PARAM
+				} else if (!strcmp(long_options[index_point].name,
+								   "debootstrap")) {
+					/* this is for qemubuilder */
+					free(debootstrap_command_line[0]);
+					debootstrap_command_line[0] = strdup(optarg);
+
+					/* pass it for cowbuilder */
+					PASS_TO_PBUILDER_WITH_PARAM
+				}
+				break;
+			case 'h': /* -h */
+			case 'v': /* -v --version */
+				pc.operation = pbuilder_help;
+				break;
+			default:
+				log_printf(log_error, "Unhandled option");
+				/* Error case. */
+				return 1;
+		}
+	}
 
-      return cpbuilder_login(&pc);
+	if (0 != config_ok) {
+		log_printf(log_error, "Couldn't load any valid config file.");
+		exit(6);
+	}
 
-    case pbuilder_execute:
-      if (cpbuilder_check_config(&pc))
-	return 1;
+	/* set default values */
+	if (!pc.basepath) {
+		asprintf(&(pc.basepath), "/var/cache/pbuilder/base.%s", keyword);
+	}
+	if (!pc.buildplace) {
+		log_printf(log_error, "BUILDPLACE is not set");
+		return 1;
+	} else {
+		char *buildplace_ = pc.buildplace;
+		mkdir(buildplace_, 0777); /* create if it does not exist */
+		int len = strlen(buildplace_);
+		if (len > 0 && buildplace_[len - 1] == '/') {
+			asprintf(&(pc.buildplace),
+					 "%s%s.%i",
+					 buildplace_,
+					 keyword,
+					 (int)getpid());
+		} else {
+			asprintf(&(pc.buildplace),
+					 "%s/%s.%i",
+					 buildplace_,
+					 keyword,
+					 (int)getpid());
+		}
+		free(buildplace_);
+	}
 
-      if (!av[optind])
-	{
-	  /* parameter missing */
-	  log_printf(log_error, "parameter missing for execute operation");
-	  return 1;
+	if (!pc.distribution) {
+		pc.distribution = strdup("sid");
 	}
 
-      return cpbuilder_execute(&pc, &av[optind]);
+	if (!pc.buildresultuid) {
+		const char *sudo_uid = getenv("SUDO_UID");
+		if (sudo_uid) {
+			pc.buildresultuid = atoi(sudo_uid);
+		}
+	}
 
-    case pbuilder_help:
-      return cpbuilder_help();
+	if (!pc.buildresultgid) {
+		const char *sudo_gid = getenv("SUDO_GID");
+		if (sudo_gid) {
+			pc.buildresultgid = atoi(sudo_gid);
+		}
+	}
 
-    case pbuilder_dumpconfig:
-      return cpbuilder_dumpconfig(&pc);
+	if (!pc.memory_megs) {
+		pc.memory_megs = 256;
+	}
 
-    default:
-      log_printf(log_error, "Internal error: Unknown operation (%d)", pc.operation);
-      return 1;
-    }
+	switch (pc.operation) {
+		case pbuilder_build:
+			if (cpbuilder_check_config(&pc)) {
+				return 1;
+			}
+
+			if (!av[optind]) {
+				/* parameter missing */
+				log_printf(log_error, "parameter missing for build operation");
+				return 1;
+			}
+
+			return cpbuilder_build(&pc, av[optind]);
+
+		case pbuilder_create:
+			if (cpbuilder_check_config(&pc)) {
+				return 1;
+			}
+
+			if (av[optind]) {
+				/* extra parameter */
+				log_printf(log_error, "too many parameters for create");
+				return 1;
+			}
+
+			return cpbuilder_create(&pc);
+
+		case pbuilder_update:
+			if (cpbuilder_check_config(&pc)) {
+				return 1;
+			}
+
+			if (av[optind]) {
+				/* extra parameter */
+				log_printf(log_error, "too many parameters for update");
+				return 1;
+			}
+
+			return cpbuilder_update(&pc);
+
+		case pbuilder_login:
+			if (cpbuilder_check_config(&pc)) {
+				return 1;
+			}
+
+			return cpbuilder_login(&pc);
+
+		case pbuilder_execute:
+			if (cpbuilder_check_config(&pc)) {
+				return 1;
+			}
+
+			if (!av[optind]) {
+				/* parameter missing */
+				log_printf(log_error,
+						   "parameter missing for execute operation");
+				return 1;
+			}
+
+			return cpbuilder_execute(&pc, &av[optind]);
+
+		case pbuilder_help:
+			return cpbuilder_help();
+
+		case pbuilder_dumpconfig:
+			return cpbuilder_dumpconfig(&pc);
+
+		default:
+			log_printf(log_error,
+					   "Internal error: Unknown operation (%d)",
+					   pc.operation);
+			return 1;
+	}
 
-  return 0;
+	return 0;
 }
diff --git a/parameter.h b/parameter.h
index 7260e35..164ebe7 100644
--- a/parameter.h
+++ b/parameter.h
@@ -24,78 +24,76 @@
 
 #define MAX_CUSTOM_FILES 32
 
-enum pbuilder_operation
-{
-  pbuilder_do_nothing=0,
-  pbuilder_help,
-  pbuilder_build,
-  pbuilder_create,
-  pbuilder_update,
-  pbuilder_execute,
-  pbuilder_login,
-  pbuilder_dumpconfig
+enum pbuilder_operation {
+	pbuilder_do_nothing = 0,
+	pbuilder_help,
+	pbuilder_build,
+	pbuilder_create,
+	pbuilder_update,
+	pbuilder_execute,
+	pbuilder_login,
+	pbuilder_dumpconfig
 };
 
-typedef struct pbuilderconfig
-{
-  /* if you edit here, please add to parameter.c: dumpconfig */
-  log_level log_level;
-  int use_colors;
-  int mountproc;
-  int mountdev;
-  int mountdevpts;
-  int save_after_login;
-  int debug;
-  char* buildplace;		/* /var/cache/pbuilder/build/XXX.$$ */
-  char* buildresult;		/* /var/cache/pbuilder/result/ */
-  char* basepath;		/* /var/cache/pbuilder/cow */
-  char* mirror;
-  char* distribution;
-  char* components;
-  char* extrapackages;
-  char* othermirror;
-  char* hookdir;
-  char* debbuildopts;
-  int binary_arch;
-  int binary_indep;
-  char* http_proxy;
-  int allow_untrusted;
-
-  /* files to be copied into the chroot,
-     and copied out of the chroot */
-  char* inputfile[MAX_CUSTOM_FILES+1];
-  char* outputfile[MAX_CUSTOM_FILES+1];
-
-  int buildresultuid;
-  int buildresultgid;
-
-  /* cow-specific options */
-  int no_cowdancer_update;		/* --no-cowdancer-update */
-  int debian_etch_workaround;		/* --debian-etch-workaround */
-
-  /* more qemu-isque options */
-  char* kernel_image;
-  char* initrd;
-  char* smp;
-  int memory_megs;		/* megabytes of memory */
-  char* arch;
-  char* arch_diskdevice;
-
-  enum pbuilder_operation operation;
+typedef struct pbuilderconfig {
+	/* if you edit here, please add to parameter.c: dumpconfig */
+	log_level log_level;
+	int use_colors;
+	int mountproc;
+	int mountdev;
+	int mountdevpts;
+	int save_after_login;
+	int debug;
+	char *buildplace;  /* /var/cache/pbuilder/build/XXX.$$ */
+	char *buildresult; /* /var/cache/pbuilder/result/ */
+	char *basepath;	/* /var/cache/pbuilder/cow */
+	char *mirror;
+	char *distribution;
+	char *components;
+	char *extrapackages;
+	char *othermirror;
+	char *hookdir;
+	char *debbuildopts;
+	int binary_arch;
+	int binary_indep;
+	char *http_proxy;
+	int allow_untrusted;
+
+	/* files to be copied into the chroot,
+	 * and copied out of the chroot */
+	char *inputfile[MAX_CUSTOM_FILES + 1];
+	char *outputfile[MAX_CUSTOM_FILES + 1];
+
+	int buildresultuid;
+	int buildresultgid;
+
+	/* cow-specific options */
+	int no_cowdancer_update;	/* --no-cowdancer-update */
+	int debian_etch_workaround; /* --debian-etch-workaround */
+
+	/* more qemu-isque options */
+	char *kernel_image;
+	char *initrd;
+	char *smp;
+	int memory_megs; /* megabytes of memory */
+	char *arch;
+	char *arch_diskdevice;
+
+	enum pbuilder_operation operation;
 } pbuilderconfig;
 
-int load_config_file(const char* config, pbuilderconfig* pc);
-int size_of_ntarray(char ** buf);
-int forkexeclp (const char *path, const char *arg0, ...);
-int forkexecvp (char *const argv[]);
-int parse_parameter(int ac, char** av, const char* keyword);
-int cpbuilder_check_config(const struct pbuilderconfig* pc);
-int cpbuilder_build(const struct pbuilderconfig* pc, const char* dscfile);
-int cpbuilder_login(const struct pbuilderconfig* pc);
-int cpbuilder_execute(const struct pbuilderconfig* pc, char** av);
-int cpbuilder_update(const struct pbuilderconfig* pc);
+int load_config_file(const char *config, pbuilderconfig *pc);
+int size_of_ntarray(char **buf);
+int forkexeclp(const char *path, const char *arg0, ...);
+int forkexecvp(char *const argv[]);
+int parse_parameter(int ac, char **av, const char *keyword);
+int cpbuilder_check_config(const struct pbuilderconfig *pc);
+int cpbuilder_build(const struct pbuilderconfig *pc, const char *dscfile);
+int cpbuilder_login(const struct pbuilderconfig *pc);
+int cpbuilder_execute(const struct pbuilderconfig *pc, char **av);
+int cpbuilder_update(const struct pbuilderconfig *pc);
 int cpbuilder_help(void);
-int cpbuilder_create(const struct pbuilderconfig* pc);
+int cpbuilder_create(const struct pbuilderconfig *pc);
 
 /*
 
@@ -111,11 +109,14 @@ PBUILDER_ADD_PARAM(NULL);
  */
 #define MAXPBUILDERCOMMANDLINE 256
 #define PBUILDER_ADD_PARAM(a) \
- if(offset<(MAXPBUILDERCOMMANDLINE-1)) \
- {pbuildercommandline[offset++]=a;} \
- else \
- {pbuildercommandline[offset]=NULL; log_printf(log_error, "pbuilder-command-line: Max command-line exceeded\n");}
-extern char* pbuildercommandline[MAXPBUILDERCOMMANDLINE];
+	if (offset < (MAXPBUILDERCOMMANDLINE - 1)) { \
+		pbuildercommandline[offset++] = a; \
+	} else { \
+		pbuildercommandline[offset] = NULL; \
+		log_printf(log_error, \
+				   "pbuilder-command-line: Max command-line exceeded\n");      \
+	}
+extern char *pbuildercommandline[MAXPBUILDERCOMMANDLINE];
 extern int offset;
 
 /*
@@ -135,20 +136,18 @@ DEBOOTSTRAP_ADD_PARAM(NULL);
  */
 #define MAX_DEBOOTSTRAP_COMMAND_LINE 256
 #define DEBOOTSTRAP_ADD_PARAM(a) \
-  do \
-    { \
-      if (debootstrap_param_offset < MAX_DEBOOTSTRAP_COMMAND_LINE-1) \
-	debootstrap_command_line[debootstrap_param_offset++] = a; \
-      else \
-	{ \
-	  debootstrap_command_line[debootstrap_param_offset] = NULL; \
-	  log_printf(log_error, "debootstrap_command_line: Max command-line length exceeded"); \
-	} \
-    } \
-  while (0)
-
-extern char* debootstrap_command_line[MAX_DEBOOTSTRAP_COMMAND_LINE];
+	do { \
+		if (debootstrap_param_offset < MAX_DEBOOTSTRAP_COMMAND_LINE - 1)       \
+			debootstrap_command_line[debootstrap_param_offset++] = a;          \
+		else { \
+			debootstrap_command_line[debootstrap_param_offset] = NULL;         \
+			log_printf( \
+				log_error, \
+				"debootstrap_command_line: Max command-line length exceeded"); \
+		} \
+	} while (0)
+
+extern char *debootstrap_command_line[MAX_DEBOOTSTRAP_COMMAND_LINE];
 extern int debootstrap_param_offset;
 
 #endif
-
diff --git a/qemuarch.c b/qemuarch.c
index 3f90b8e..b5bcaaa 100644
--- a/qemuarch.c
+++ b/qemuarch.c
@@ -42,165 +42,156 @@
 /**
  * arch-specific routine; disk device name to use
  */
-const char* qemu_arch_diskdevice(const struct pbuilderconfig* pc)
-{
-  if (pc->arch_diskdevice)
-    return pc->arch_diskdevice;
-  return "sd";
+const char *qemu_arch_diskdevice(const struct pbuilderconfig *pc) {
+	if (pc->arch_diskdevice) {
+		return pc->arch_diskdevice;
+	}
+	return "sd";
 }
 
 /**
  * arch-specific routine; the console device to make
  */
- const int qemu_create_arch_serialdevice(const char* basedir, const char* arch)
-{
-  dev_t consoledev;
-
-  if (!strcmp(arch, "arm") ||
-      !strcmp(arch, "armel") ||
-      !strcmp(arch, "armhf") ||
-      !strcmp(arch, "arm64"))
-    consoledev = makedev(204, 64);
-  else
-    consoledev = makedev(4, 64);
-
-  return mknod_inside_chroot(basedir, "dev/console", S_IFCHR | 0660, consoledev);
+const int qemu_create_arch_serialdevice(const char *basedir, const char *arch) {
+	dev_t consoledev;
+
+	if (!strcmp(arch, "arm") || !strcmp(arch, "armel") ||
+		!strcmp(arch, "armhf") || !strcmp(arch, "arm64")) {
+		consoledev = makedev(204, 64);
+	} else {
+		consoledev = makedev(4, 64);
+	}
+
+	return mknod_inside_chroot(
+		basedir, "dev/console", S_IFCHR | 0660, consoledev);
 }
 
 /**
  * arch-specific routine; make device files inside chroot
  */
-const int qemu_create_arch_devices(const char* basedir, const char* arch)
-{
-  int ret=0;
-  char* s=0;
-
-  asprintf(&s, "%s/%s", basedir, "dev");
-  if (-1==mkdir(s, 0777))
-    {
-      log_perror("mkdir chroot-/dev");
-      ret=1;
-    }
-  free(s);
-
-  ret+=qemu_create_arch_serialdevice(basedir, arch);
-  ret+=mknod_inside_chroot(basedir, "dev/ttyS0", S_IFCHR | 0660, makedev(4, 64));
-  ret+=mknod_inside_chroot(basedir, "dev/ttyAMA0", S_IFCHR | 0660, makedev(204, 64));
-  ret+=mknod_inside_chroot(basedir, "dev/sda", S_IFBLK | 0660, makedev(8, 0));
-  ret+=mknod_inside_chroot(basedir, "dev/sdb", S_IFBLK | 0660, makedev(8, 16));
-  ret+=mknod_inside_chroot(basedir, "dev/hda", S_IFBLK | 0660, makedev(3, 0));
-  ret+=mknod_inside_chroot(basedir, "dev/hdb", S_IFBLK | 0660, makedev(3, 64));
-  return ret;
+const int qemu_create_arch_devices(const char *basedir, const char *arch) {
+	int ret = 0;
+	char *s = 0;
+
+	asprintf(&s, "%s/%s", basedir, "dev");
+	if (-1 == mkdir(s, 0777)) {
+		log_perror("mkdir chroot-/dev");
+		ret = 1;
+	}
+	free(s);
+
+	ret += qemu_create_arch_serialdevice(basedir, arch);
+	ret += mknod_inside_chroot(
+		basedir, "dev/ttyS0", S_IFCHR | 0660, makedev(4, 64));
+	ret += mknod_inside_chroot(
+		basedir, "dev/ttyAMA0", S_IFCHR | 0660, makedev(204, 64));
+	ret +=
+		mknod_inside_chroot(basedir, "dev/sda", S_IFBLK | 0660, makedev(8, 0));
+	ret +=
+		mknod_inside_chroot(basedir, "dev/sdb", S_IFBLK | 0660, makedev(8, 16));
+	ret +=
+		mknod_inside_chroot(basedir, "dev/hda", S_IFBLK | 0660, makedev(3, 0));
+	ret +=
+		mknod_inside_chroot(basedir, "dev/hdb", S_IFBLK | 0660, makedev(3, 64));
+	return ret;
 }
 
 /**
  * get output of dpkg --print-architecture
  * returns a malloc'd string, you need to free it.
  */
-char* get_host_dpkg_arch()
-{
-  FILE*f=popen("dpkg --print-architecture", "r");
-  char*host_arch;
-  fscanf(f, "%ms", &host_arch);
-  pclose(f);
-  return host_arch;
+char *get_host_dpkg_arch() {
+	FILE *f = popen("dpkg --print-architecture", "r");
+	char *host_arch;
+	fscanf(f, "%ms", &host_arch);
+	pclose(f);
+	return host_arch;
 }
 
 /**
  * arch-specific routine; qemu command to use.
  */
-const char* qemu_arch_qemu(const char* arch)
-{
-  if (!strcmp(arch, "arm") ||
-      !strcmp(arch, "armel") ||
-      !strcmp(arch, "armhf"))
-    return "qemu-system-arm";
-  else if (!strcmp(arch, "arm64"))
-    return "qemu-system-aarch64";
-  else if (!strcmp(arch, "mips"))
-    return "qemu-system-mips";
-  else if (!strcmp(arch, "mipsel"))
-    return "qemu-system-mipsel";
-  else if (!strcmp(arch, "i386")
-        || !strcmp(arch, "hurd-i386")
-        || !strcmp(arch, "amd64")
-        || !strcmp(arch, "x32"))
-    {
-      /* we're leaking this memory, but don't care too much */
-      char* host_arch = get_host_dpkg_arch();
-
-      /* special-case
-	 use kvm if possible
-	 use qemu if i386/i386
-	 use qemu-system-x86_64 otherwise
-       */
-      int kvm_exists = !system("which kvm");
-
-      if(!strcmp(host_arch,arch) && kvm_exists)
-	return "kvm";
-      else if(!strcmp(host_arch, "amd64") && kvm_exists)
-        return "kvm";
-      else if((!strcmp(host_arch, "i386")) && (!strcmp(arch, "i386")))
-	return "qemu";
-      else
-	return "qemu-system-x86_64";
-    }
-  else if (!strcmp(arch, "hurd-i386"))
-    return "qemu";
-  else if (!strcmp(arch, "powerpc"))
-    return "qemu-system-ppc";
-  else if (!strcmp(arch, "sparc"))
-    return "qemu-system-sparc";
-  else
-    return NULL;
+const char *qemu_arch_qemu(const char *arch) {
+	if (!strcmp(arch, "arm") || !strcmp(arch, "armel") ||
+		!strcmp(arch, "armhf")) {
+		return "qemu-system-arm";
+	} else if (!strcmp(arch, "arm64")) {
+		return "qemu-system-aarch64";
+	} else if (!strcmp(arch, "mips")) {
+		return "qemu-system-mips";
+	} else if (!strcmp(arch, "mipsel")) {
+		return "qemu-system-mipsel";
+	} else if (!strcmp(arch, "i386") || !strcmp(arch, "hurd-i386") ||
+			   !strcmp(arch, "amd64") || !strcmp(arch, "x32")) {
+		/* we're leaking this memory, but don't care too much */
+		char *host_arch = get_host_dpkg_arch();
+
+		/* special-case
+		 * use kvm if possible
+		 * use qemu if i386/i386
+		 * use qemu-system-x86_64 otherwise
+		 */
+		int kvm_exists = !system("which kvm");
+
+		if (!strcmp(host_arch, arch) && kvm_exists) {
+			return "kvm";
+		} else if (!strcmp(host_arch, "amd64") && kvm_exists) {
+			return "kvm";
+		} else if ((!strcmp(host_arch, "i386")) && (!strcmp(arch, "i386"))) {
+			return "qemu";
+		} else {
+			return "qemu-system-x86_64";
+		}
+	} else if (!strcmp(arch, "hurd-i386")) {
+		return "qemu";
+	} else if (!strcmp(arch, "powerpc")) {
+		return "qemu-system-ppc";
+	} else if (!strcmp(arch, "sparc")) {
+		return "qemu-system-sparc";
+	} else {
+		return NULL;
+	}
 }
 
 /**
  * arch-specific routine; the machine spec for this arch
  */
-const char* qemu_arch_qemumachine(const char* arch)
-{
-  if (!strcmp(arch, "arm") ||
-      !strcmp(arch, "armel"))
-    return "versatilepb";
-  else if (!strcmp(arch, "armhf") ||
-	   !strcmp(arch, "arm64"))
-    return "virt";
-  else if (!strcmp(arch, "i386") ||
-	   !strcmp(arch, "hurd-i386") ||
-	   !strcmp(arch, "amd64") ||
-	   !strcmp(arch, "x32"))
-    return "pc";
-  else if (!strcmp(arch, "mips")||
-	   !strcmp(arch, "mipsel"))
-    return "malta";
-  else if (!strcmp(arch, "powerpc"))
-    return "prep";
-  else if (!strcmp(arch, "sparc"))
-    return "SS-5";
-  return NULL;
+const char *qemu_arch_qemumachine(const char *arch) {
+	if (!strcmp(arch, "arm") || !strcmp(arch, "armel")) {
+		return "versatilepb";
+	} else if (!strcmp(arch, "armhf") || !strcmp(arch, "arm64")) {
+		return "virt";
+	} else if (!strcmp(arch, "i386") || !strcmp(arch, "hurd-i386") ||
+			   !strcmp(arch, "amd64") || !strcmp(arch, "x32")) {
+		return "pc";
+	} else if (!strcmp(arch, "mips") || !strcmp(arch, "mipsel")) {
+		return "malta";
+	} else if (!strcmp(arch, "powerpc")) {
+		return "prep";
+	} else if (!strcmp(arch, "sparc")) {
+		return "SS-5";
+	}
+	return NULL;
 }
 
 /**
  * arch-specific routine; the serial device
  */
-const char* qemu_arch_tty(const char* arch)
-{
-
-  if (!strcmp(arch, "arm")||
-      !strcmp(arch, "armel") ||
-      !strcmp(arch, "armhf") ||
-      !strcmp(arch, "arm64"))
-    return "ttyAMA0,115200n8";
-  return "ttyS0,115200n8";
+const char *qemu_arch_tty(const char *arch) {
+
+	if (!strcmp(arch, "arm") || !strcmp(arch, "armel") ||
+		!strcmp(arch, "armhf") || !strcmp(arch, "arm64")) {
+		return "ttyAMA0,115200n8";
+	}
+	return "ttyS0,115200n8";
 }
 
 /**
  * arch-specific routine; the CPU
  */
-const char* qemu_arch_cpu(const char* arch)
-{
-  if (!strcmp(arch, "arm64"))
-    return "cortex-a57";
-  return NULL;
+const char *qemu_arch_cpu(const char *arch) {
+	if (!strcmp(arch, "arm64")) {
+		return "cortex-a57";
+	}
+	return NULL;
 }
diff --git a/qemuarch.h b/qemuarch.h
index f8eee9c..5440f1c 100644
--- a/qemuarch.h
+++ b/qemuarch.h
@@ -7,13 +7,13 @@
 
 #include "parameter.h"
 
-const char* qemu_arch_diskdevice(const struct pbuilderconfig* pc);
-const int qemu_create_arch_serialdevice(const char* basedir, const char* arch);
-const int qemu_create_arch_devices(const char* basedir, const char* arch);
-char* get_host_dpkg_arch();
-const char* qemu_arch_qemu(const char* arch);
-const char* qemu_arch_qemumachine(const char* arch);
-const char* qemu_arch_tty(const char* arch);
-const char* qemu_arch_cpu(const char* arch);
+const char *qemu_arch_diskdevice(const struct pbuilderconfig *pc);
+const int qemu_create_arch_serialdevice(const char *basedir, const char *arch);
+const int qemu_create_arch_devices(const char *basedir, const char *arch);
+char *get_host_dpkg_arch();
+const char *qemu_arch_qemu(const char *arch);
+const char *qemu_arch_qemumachine(const char *arch);
+const char *qemu_arch_tty(const char *arch);
+const char *qemu_arch_cpu(const char *arch);
 
 #endif
diff --git a/qemubuilder.c b/qemubuilder.c
old mode 100755
new mode 100644
index 952f73e..7c273d0
--- a/qemubuilder.c
+++ b/qemubuilder.c
@@ -85,7 +85,7 @@ indent"fi\n"
  * END OF WORK EXIT CODE=0
  * END OF WORK EXIT CODE=16
  */
-const char* qemu_keyword="END OF WORK EXIT CODE=";
+const char *qemu_keyword = "END OF WORK EXIT CODE=";
 
 /** create a sparse ext3 block device suitable for
     loop-mount.
@@ -94,55 +94,54 @@ const char* qemu_keyword="END OF WORK EXIT CODE=";
 
    @returns -1 on error, 0 on success
  */
-static int create_ext3_block_device(const char* filename,
-				    unsigned long int gigabyte)
-{
-  int ret = 0;
-  char *s = NULL;
-  char *s2 = NULL;
-
-  /* create 10GB sparse data */
-  if (create_sparse_file(filename,
-			 gigabyte*1UL<<30UL))
-    {
-      ret=-1;
-      goto out;
-    }
-
-  if ((ret=forkexeclp("mke2fs", "mke2fs",
-		      "-q",
-		      "-F",
-		      "-j",
-		      "-m1",
-		      "-O", "sparse_super",
-		      filename, NULL)))
-    {
-      ret=-1;
-      goto out;
-    }
-
-  if ((ret=forkexeclp("tune2fs", "tune2fs",
-		      "-c", "0",
-		      "-i", "0",
-		      filename, NULL)))
-    {
-      ret=-1;
-    }
-
- out:
-  if(s) free(s);
-  if(s2) free(s2);
-  return ret;
+static int create_ext3_block_device(const char *filename,
+									unsigned long int gigabyte) {
+	int ret = 0;
+	char *s = NULL;
+	char *s2 = NULL;
+
+	/* create 10GB sparse data */
+	if (create_sparse_file(filename, gigabyte * 1UL << 30UL)) {
+		ret = -1;
+		goto out;
+	}
+
+	if ((ret = forkexeclp("mke2fs",
+						  "mke2fs",
+						  "-q",
+						  "-F",
+						  "-j",
+						  "-m1",
+						  "-O",
+						  "sparse_super",
+						  filename,
+						  NULL))) {
+		ret = -1;
+		goto out;
+	}
+
+	if ((ret = forkexeclp(
+			 "tune2fs", "tune2fs", "-c", "0", "-i", "0", filename, NULL))) {
+		ret = -1;
+	}
+
+out:
+	if (s) {
+		free(s);
+	}
+	if (s2) {
+		free(s2);
+	}
+	return ret;
 }
 
 /** loopback mount file system.
     @returns 0 on success
 */
-static int loop_mount(const char* device, const char* mountpoint)
-{
-  int ret=forkexeclp("mount", "mount", "-o", "loop",
-	     device, mountpoint, NULL);
-  return ret;
+static int loop_mount(const char *device, const char *mountpoint) {
+	int ret =
+		forkexeclp("mount", "mount", "-o", "loop", device, mountpoint, NULL);
+	return ret;
 }
 
 /**
@@ -150,279 +149,246 @@ static int loop_mount(const char* device, const char* mountpoint)
 
    @returns 0 on success
  */
-static int loop_umount(const char* device)
-{
-  int ret=forkexeclp("umount", "umount", device,
-		     NULL);
-  return ret;
+static int loop_umount(const char *device) {
+	int ret = forkexeclp("umount", "umount", device, NULL);
+	return ret;
 }
 
 /** create a script file.
 
 @returns NULL on failure, FILE* on success
 */
-static FILE* create_script(const char* mountpoint, const char* relative_path)
-{
-  char *s = NULL;
-  FILE *f = NULL;
-  FILE *ret = NULL;
-
-  asprintf(&s, "%s/%s", mountpoint, relative_path);
-
-  /* Create directories in relative_path */
-  for (char *c = s + strlen(mountpoint) + 1; *c; ++c)
-    {
-      if (*c != '/') continue;
-      *c = 0;
-      if (mkdir(s, 0777) && errno != EEXIST)
-	{
-	  log_printf(log_error,
-              "Could not create directory '%s': %s",
-              s,
-              strerror(errno));
-	  goto fail;
+static FILE *create_script(const char *mountpoint, const char *relative_path) {
+	char *s = NULL;
+	FILE *f = NULL;
+	FILE *ret = NULL;
+
+	asprintf(&s, "%s/%s", mountpoint, relative_path);
+
+	/* Create directories in relative_path */
+	for (char *c = s + strlen(mountpoint) + 1; *c; ++c) {
+		if (*c != '/') {
+			continue;
+		}
+		*c = 0;
+		if (mkdir(s, 0777) && errno != EEXIST) {
+			log_printf(log_error,
+					   "Could not create directory '%s': %s",
+					   s,
+					   strerror(errno));
+			goto fail;
+		}
+		*c = '/';
+	}
+
+	if (!(f = fopen(s, "w"))) {
+		goto fail;
+	}
+	if (chmod(s, 0700)) {
+		fclose(f);
+		goto fail;
 	}
-      *c = '/';
-    }
-
-  if(!(f=fopen(s, "w")))
-    goto fail;
-  if(chmod(s, 0700))
-    {
-      fclose(f);
-      goto fail;
-    }
-  ret=f;
- fail:
-  free(s);
-  return ret;
+	ret = f;
+fail:
+	free(s);
+	return ret;
 }
 
 static struct termios saved_termios;
 
-static void save_termios(void)
-{
-  if (isatty(1))
-    {
-      tcgetattr(1, &saved_termios);
-    }
+static void save_termios(void) {
+	if (isatty(1)) {
+		tcgetattr(1, &saved_termios);
+	}
 }
 
-static void restore_termios(void)
-{
-  if (isatty(1))
-    {
-      tcsetattr(1, TCSANOW, &saved_termios);
-    }
+static void restore_termios(void) {
+	if (isatty(1)) {
+		tcsetattr(1, TCSANOW, &saved_termios);
+	}
 }
 
-static int copy_file_contents_to_temp(const char* orig,
-				      const char* tempdir,
-				      const char* tempname)
-{
-  char* temppath;
-  int ret;
-  if (tempname == NULL)
-    tempname = basename(orig);
-
-  asprintf(&temppath, "%s/%s", tempdir, tempname);
-  ret=copy_file(orig, temppath);
-  if (ret == -1)
-    {
-      log_printf(log_error, "Copy file error in %s to %s",
-          orig, temppath);
-      goto out;
-    }
+static int copy_file_contents_to_temp(const char *orig,
+									  const char *tempdir,
+									  const char *tempname) {
+	char *temppath;
+	int ret;
+	if (tempname == NULL) {
+		tempname = basename(orig);
+	}
+
+	asprintf(&temppath, "%s/%s", tempdir, tempname);
+	ret = copy_file(orig, temppath);
+	if (ret == -1) {
+		log_printf(log_error, "Copy file error in %s to %s", orig, temppath);
+		goto out;
+	}
 out:
-  free(temppath);
-  return ret;
+	free(temppath);
+	return ret;
 }
 
 static int copy_file_contents_in_temp(FILE *f,
-				      const char* tempname,
-				      const char* targetdir,
-				      const char* targetname)
-{
-  int trailing_slash = targetdir[strlen(targetdir)-1] == '/';
-  const char* sep = trailing_slash ? "" : "/";
-  fprintf(f,
-	  "log.i \"copying %s%s%s from temporary location\"\n"
-	  "mkdir -p %s\n"
-	  "cp $BUILDDIR/%s %s%s%s || log.e \"Copy failed\"\n",
-	  targetdir, sep, targetname,
-	  targetdir,
-	  tempname,
-	  targetdir, sep, targetname);
-  return 0;
+									  const char *tempname,
+									  const char *targetdir,
+									  const char *targetname) {
+	int trailing_slash = targetdir[strlen(targetdir) - 1] == '/';
+	const char *sep = trailing_slash ? "" : "/";
+	fprintf(f,
+			"log.i \"copying %s%s%s from temporary location\"\n"
+			"mkdir -p %s\n"
+			"cp $BUILDDIR/%s %s%s%s || log.e \"Copy failed\"\n",
+			targetdir,
+			sep,
+			targetname,
+			targetdir,
+			tempname,
+			targetdir,
+			sep,
+			targetname);
+	return 0;
 }
 
-static int copy_file_contents_through_temp(FILE* f,
-					   const char* orig,
-					   const char* tempdir,
-					   const char* targetdir)
-{
-  int ret;
-  char* file_basename = basename(orig);
-  char* tempname = NULL;
-  char* tempinput = NULL;
-  if (0>asprintf(&tempinput,
-		 "%s/input",
-		 tempdir))
-    {
-      log_printf(log_error,
-	  "failed to allocate string for '%s/input': %s",
-	  tempdir,
-	  strerror(errno));
-      ret = 1;
-      goto out;
-    }
-
-  if (0>asprintf(&tempname,
-		 "input/%s",
-		 file_basename))
-    {
-      log_printf(log_error,
-	  "failed to allocate string for 'input/%s': %s",
-	  file_basename,
-	  strerror(errno));
-      ret = 1;
-      goto out;
-    }
-
-  if (mkdir(tempinput, 0777) && errno != EEXIST)
-    {
-      log_printf(log_error,
-	  "failed to create directory '%s': %s",
-	  tempinput,
-	  strerror(errno));
-      ret = 1;
-      goto out;
-    }
-
-  ret = copy_file_contents_to_temp(orig, tempinput, file_basename);
-  if (ret != 0)
-    goto out;
-
-  ret = copy_file_contents_in_temp(f, tempname, targetdir, file_basename);
+static int copy_file_contents_through_temp(FILE *f,
+										   const char *orig,
+										   const char *tempdir,
+										   const char *targetdir) {
+	int ret;
+	char *file_basename = basename(orig);
+	char *tempname = NULL;
+	char *tempinput = NULL;
+	if (0 > asprintf(&tempinput, "%s/input", tempdir)) {
+		log_printf(log_error,
+				   "failed to allocate string for '%s/input': %s",
+				   tempdir,
+				   strerror(errno));
+		ret = 1;
+		goto out;
+	}
+
+	if (0 > asprintf(&tempname, "input/%s", file_basename)) {
+		log_printf(log_error,
+				   "failed to allocate string for 'input/%s': %s",
+				   file_basename,
+				   strerror(errno));
+		ret = 1;
+		goto out;
+	}
+
+	if (mkdir(tempinput, 0777) && errno != EEXIST) {
+		log_printf(log_error,
+				   "failed to create directory '%s': %s",
+				   tempinput,
+				   strerror(errno));
+		ret = 1;
+		goto out;
+	}
+
+	ret = copy_file_contents_to_temp(orig, tempinput, file_basename);
+	if (ret != 0) {
+		goto out;
+	}
+
+	ret = copy_file_contents_in_temp(f, tempname, targetdir, file_basename);
 
 out:
-  if (tempname != NULL)
-    {
-      free(tempname);
-    }
-  if (tempinput != NULL)
-    {
-      free(tempinput);
-    }
-  return ret;
+	if (tempname != NULL) {
+		free(tempname);
+	}
+	if (tempinput != NULL) {
+		free(tempinput);
+	}
+	return ret;
 }
 
-static int copy_hookdir(const char *hookdir, const char *tmp)
-{
-  int ret = 0;
-  struct dirent *dirp;
-  DIR *hd = opendir(hookdir);
-  char *hookstmp = NULL;
-  if (0>asprintf(&hookstmp,
-		 "%s/hooks",
-		 tmp))
-    {
-      log_printf(log_error,
-	  "Error allocating string for '%s/hooks': %s",
-	  tmp,
-	  strerror(errno));
-      ret = 1;
-      goto out;
-    }
-
-  if (mkdir(hookstmp,0777))
-    {
-      log_printf(log_error,
-	  "Error creating directory for hooks: %s",
-	  strerror(errno));
-      ret = 1;
-      goto out;
-    }
-
-  if (hd == NULL)
-    {
-      log_printf(log_error,
-	  "Error copying hooks from '%s': %s",
-	  hookdir,
-	  strerror(errno));
-      ret = 1;
-      goto out;
-    }
-
-  while ((dirp = readdir(hd)) != NULL)
-    {
-      struct stat st;
-      char *src = NULL;
-
-      if (0>asprintf(&src,
-		     "%s/%s",
-		     hookdir,
-		     dirp->d_name))
-	{
-	  log_printf(log_error,
-	      "Error allocating string for '%s/%s': %s",
-	      hookdir,
-	      dirp->d_name,
-	      strerror(errno));
-	  ret = 1;
-	  goto out;
+static int copy_hookdir(const char *hookdir, const char *tmp) {
+	int ret = 0;
+	struct dirent *dirp;
+	DIR *hd = opendir(hookdir);
+	char *hookstmp = NULL;
+	if (0 > asprintf(&hookstmp, "%s/hooks", tmp)) {
+		log_printf(log_error,
+				   "Error allocating string for '%s/hooks': %s",
+				   tmp,
+				   strerror(errno));
+		ret = 1;
+		goto out;
 	}
-      if (0>stat(src, &st))
-	{
-	  log_printf(log_error,
-	      "Error calling stat '%s': %s",
-	      src,
-	      strerror(errno));
-	  free(src);
-	  ret = 1;
-	  goto out;
+
+	if (mkdir(hookstmp, 0777)) {
+		log_printf(log_error,
+				   "Error creating directory for hooks: %s",
+				   strerror(errno));
+		ret = 1;
+		goto out;
 	}
 
-      if ((st.st_mode & S_IFMT) != S_IFREG)
-	{
-	  // Not a regular file
-	  free(src);
-	  continue;
+	if (hd == NULL) {
+		log_printf(log_error,
+				   "Error copying hooks from '%s': %s",
+				   hookdir,
+				   strerror(errno));
+		ret = 1;
+		goto out;
 	}
 
-      copy_file_contents_to_temp(src, hookstmp, basename(src));
-      free(src);
-    }
+	while ((dirp = readdir(hd)) != NULL) {
+		struct stat st;
+		char *src = NULL;
+
+		if (0 > asprintf(&src, "%s/%s", hookdir, dirp->d_name)) {
+			log_printf(log_error,
+					   "Error allocating string for '%s/%s': %s",
+					   hookdir,
+					   dirp->d_name,
+					   strerror(errno));
+			ret = 1;
+			goto out;
+		}
+		if (0 > stat(src, &st)) {
+			log_printf(
+				log_error, "Error calling stat '%s': %s", src, strerror(errno));
+			free(src);
+			ret = 1;
+			goto out;
+		}
+
+		if ((st.st_mode & S_IFMT) != S_IFREG) {
+			// Not a regular file
+			free(src);
+			continue;
+		}
+
+		copy_file_contents_to_temp(src, hookstmp, basename(src));
+		free(src);
+	}
 
 out:
-  if (hookstmp != NULL)
-    {
-      free(hookstmp);
-    }
-  if (hd != NULL)
-    {
-      closedir(hd);
-    }
-  return ret;
+	if (hookstmp != NULL) {
+		free(hookstmp);
+	}
+	if (hd != NULL) {
+		closedir(hd);
+	}
+	return ret;
 }
 
-static const char* format_for_image(const char* file)
-{
-  static const char *formats[][2] = {
-    { ".cowdev", "qcow2" },
-    { ".dev", "raw" },
-    { ".qemu", "raw" }
-  };
-  int file_len = strlen(file);
-  for (int i = 0; i < sizeof(formats) / sizeof(formats[0]); ++i)
-    {
-      const char *ext = formats[i][0];
-      const char *format = formats[i][1];
-      int ext_len = strlen(ext);
-      if (file_len >= ext_len && !strcmp(ext, file + file_len - ext_len))
-	return format;
-    }
-  return NULL;
+static const char *format_for_image(const char *file) {
+	static const char *formats[][2] = {
+		{".cowdev", "qcow2"},
+		{".dev", "raw"},
+		{".qemu", "raw"}
+	};
+	int file_len = strlen(file);
+	for (int i = 0; i < sizeof(formats) / sizeof(formats[0]); ++i) {
+		const char *ext = formats[i][0];
+		const char *format = formats[i][1];
+		int ext_len = strlen(ext);
+		if (file_len >= ext_len && !strcmp(ext, file + file_len - ext_len)) {
+			return format;
+		}
+	}
+	return NULL;
 }
 
 /**
@@ -433,415 +399,408 @@ static const char* format_for_image(const char* file)
    -1: error
    0..X: return code from inside qemu
 */
-static int fork_qemu(const char* hda, const char* hdb, const struct pbuilderconfig* pc)
-{
-  pid_t child;
-  int sp[2];
-  fd_set readfds;
-  int exit_code=-1;
-  const int buffer_size=4096;
-  char* buf=malloc(buffer_size);
-  size_t count;
-
-  if (-1==socketpair(AF_UNIX, SOCK_STREAM,0,sp))
-    {
-      /* error handle? */
-      return -1;
-    }
-
-  save_termios();
-
-  fflush(NULL);
-  if ((child=fork()))
-    {
-      /* this is parent process */
-
-      close(sp[1]);
-      close(0);
-
-      FD_ZERO(&readfds);
-      while (1)
-	{
-	  int status;
-	  if (0<waitpid(child, &status, WNOHANG))
-	    {
-	      /* child has exited */
-	      log_printf(log_error, "qemu exited unexpectedly: %d", status);
-	      break;
-	    }
-	  FD_SET(sp[0],&readfds);
-	  if (-1!=(select(sp[0]+1,&readfds, NULL, NULL, NULL)))
-	    {
-	      if (FD_ISSET(sp[0],&readfds))
-		{
-		  void* matchptr;
-
-		  /* data available from qemu */
-
-		  /* sleep a bit to let it buffer-up a bit more. */
-		  usleep(100000);
-
-		  count=read(sp[0],buf,buffer_size);
-
-		  /* this won't work sometimes, but this is a good best-effort thing. */
-		  if ((matchptr=memmem(buf, count,
-				       qemu_keyword, strlen(qemu_keyword)))!=0)
-		    {
-		      exit_code = atoi(matchptr + strlen(qemu_keyword));
-		      log_printf(log_info, "received termination message from inside qemu with exit-code %i, killing child process (qemu:%i)",
-			  exit_code,
-			  child);
-
-		      assert(child != 0);assert(child > 0);
-
-		      if (!kill(child, SIGTERM))
-			log_printf(log_info, "successfully killed qemu");
-		      else
-			log_perror("failed to kill qemu?");
-		      if (-1==waitpid(child, &status, 0))
-			{
-			  log_perror("qemubuilder: waitpid");
+static int
+fork_qemu(const char *hda, const char *hdb, const struct pbuilderconfig *pc) {
+	pid_t child;
+	int sp[2];
+	fd_set readfds;
+	int exit_code = -1;
+	const int buffer_size = 4096;
+	char *buf = malloc(buffer_size);
+	size_t count;
+
+	if (-1 == socketpair(AF_UNIX, SOCK_STREAM, 0, sp)) {
+		/* error handle? */
+		return -1;
+	}
+
+	save_termios();
+
+	fflush(NULL);
+	if ((child = fork())) {
+		/* this is parent process */
+
+		close(sp[1]);
+		close(0);
+
+		FD_ZERO(&readfds);
+		while (1) {
+			int status;
+			if (0 < waitpid(child, &status, WNOHANG)) {
+				/* child has exited */
+				log_printf(log_error, "qemu exited unexpectedly: %d", status);
+				break;
+			}
+			FD_SET(sp[0], &readfds);
+			if (-1 != (select(sp[0] + 1, &readfds, NULL, NULL, NULL))) {
+				if (FD_ISSET(sp[0], &readfds)) {
+					void *matchptr;
+
+					/* data available from qemu */
+
+					/* sleep a bit to let it buffer-up a bit more. */
+					usleep(100000);
+
+					count = read(sp[0], buf, buffer_size);
+
+					/* this won't work sometimes, but this is a good best-effort thing. */
+					if ((matchptr = memmem(
+							 buf, count, qemu_keyword, strlen(qemu_keyword))) !=
+						0) {
+						exit_code = atoi(matchptr + strlen(qemu_keyword));
+						log_printf(
+							log_info,
+							"received termination message from inside qemu with exit-code %i, killing child process (qemu:%i)",
+							exit_code,
+							child);
+
+						assert(child != 0);
+						assert(child > 0);
+
+						if (!kill(child, SIGTERM)) {
+							log_printf(log_info, "successfully killed qemu");
+						} else {
+							log_perror("failed to kill qemu?");
+						}
+						if (-1 == waitpid(child, &status, 0)) {
+							log_perror("qemubuilder: waitpid");
+						}
+						break;
+					}
+					write(1, buf, count);
+				}
+			} else {
+				log_perror("select");
+				break;
 			}
-		      break;
-		    }
-		  write(1,buf,count);
 		}
-	    }
-	  else
-	    {
-	      log_perror("select");
-	      break;
-	    }
-	}
-    }
-  else if(child == 0)
-    {
-      /* this is the child process */
-      const char* qemu = qemu_arch_qemu(pc->arch);
-      const char* machine = qemu_arch_qemumachine(pc->arch);
-      const char* cpu = qemu_arch_cpu(pc->arch);
-      const char* hda_format = format_for_image(hda);
-      const char* hdb_format = format_for_image(hdb);
-      char* hda_command;
-      char* hdb_command;
-      int virt;
-      char* append_command;
-      const char* kernel_image = pc->kernel_image;
-      const char* initrd = pc->initrd;
-      char* mem;
-      int argc = 0;
-      const int MAX_ARGS = 40;
-      char *argv[MAX_ARGS];
-      int i;
-      int is_tty = isatty(1);
-      const char *term;
-      if (is_tty)
-	{
-	  term = getenv("TERM");
-	  if (!term)
-	    term = ""; /* Use whatever getty defaults to */
-	}
-      else
-	term = "dumb";
+	} else if (child == 0) {
+		/* this is the child process */
+		const char *qemu = qemu_arch_qemu(pc->arch);
+		const char *machine = qemu_arch_qemumachine(pc->arch);
+		const char *cpu = qemu_arch_cpu(pc->arch);
+		const char *hda_format = format_for_image(hda);
+		const char *hdb_format = format_for_image(hdb);
+		char *hda_command;
+		char *hdb_command;
+		int virt;
+		char *append_command;
+		const char *kernel_image = pc->kernel_image;
+		const char *initrd = pc->initrd;
+		char *mem;
+		int argc = 0;
+		const int MAX_ARGS = 40;
+		char *argv[MAX_ARGS];
+		int i;
+		int is_tty = isatty(1);
+		const char *term;
+		if (is_tty) {
+			term = getenv("TERM");
+			if (!term) {
+				term = ""; /* Use whatever getty defaults to */
+			}
+		} else {
+			term = "dumb";
+		}
 
-      if (qemu == NULL || machine == NULL) {
-	log_printf(log_error, "Your architecture %s does not seem to be supported", pc->arch);
-	exit(1);
-      }
+		if (qemu == NULL || machine == NULL) {
+			log_printf(log_error,
+					   "Your architecture %s does not seem to be supported",
+					   pc->arch);
+			exit(1);
+		}
 
-      if (kernel_image == NULL || !strcmp(kernel_image, "")) {
-	log_printf(log_error, "No KERNEL_IMAGE defined in pbuilderrc");
-	exit(1);
-      }
+		if (kernel_image == NULL || !strcmp(kernel_image, "")) {
+			log_printf(log_error, "No KERNEL_IMAGE defined in pbuilderrc");
+			exit(1);
+		}
 
-      asprintf(&mem, "%i", pc->memory_megs);
+		asprintf(&mem, "%i", pc->memory_megs);
 
-      if (hda_format == NULL)
-	{
-	  log_printf(log_error, "Unknown format for disk image %s", hda);
-	  exit(1);
-	}
+		if (hda_format == NULL) {
+			log_printf(log_error, "Unknown format for disk image %s", hda);
+			exit(1);
+		}
 
-      if (hdb_format == NULL)
-	{
-	  log_printf(log_error, "Unknown format for disk image %s", hdb);
-	  exit(1);
-	}
+		if (hdb_format == NULL) {
+			log_printf(log_error, "Unknown format for disk image %s", hdb);
+			exit(1);
+		}
 
-      virt = !strcmp(machine, "virt");
-
-      asprintf(&hda_command,
-	       "%sfile=%s,format=%s,index=0,media=disk,cache=writeback,id=hd0",
-	       virt ? "if=none," : "",
-	       hda, hda_format);
-
-      asprintf(&hdb_command,
-	       "%sfile=%s,format=%s,index=1,media=disk,cache=writeback,id=hd1",
-	       virt ? "if=none," : "",
-	       hdb, hdb_format);
-
-      /* panic < 0 means reboot immediately on panic; this will actually
-         halt as -no-reboot is given to qemu */
-      asprintf(&append_command,
-	       "root=/dev/%sa quiet init=/usr/bin/setsid console=%s panic=-1 -- -c -w /sbin/getty -n -l /pbuilder-run -8 -L - %s",
-	       qemu_arch_diskdevice(pc),
-	       qemu_arch_tty(pc->arch),
-	       term);
-
-      dup2(sp[1],1);
-      dup2(sp[1],2);
-      close(sp[0]);
-
-      argv[argc++]=strdupa(qemu);
-      argv[argc++]="-nodefaults";
-      argv[argc++]="-nographic";
-      argv[argc++]="-no-reboot"; /* halt instead of rebooting */
-      argv[argc++]="-M";
-      argv[argc++]=strdupa(machine);
-      if (cpu)
-	{
-	  argv[argc++]="-cpu";
-	  argv[argc++]=strdupa(cpu);
-	}
-      argv[argc++]="-m";
-      argv[argc++]=mem;
-      if (pc->smp) {
-	argv[argc++]="-smp";
-	argv[argc++]=strdupa(pc->smp);
-      }
-      argv[argc++]="-kernel";
-      argv[argc++]=strdupa(kernel_image);
-      if (initrd && strcmp(initrd, ""))
-	{
-	  argv[argc++]="-initrd";
-	  argv[argc++]=strdupa(initrd);
-	}
-      argv[argc++]="-drive";
-      argv[argc++]=hda_command;
-      argv[argc++]="-drive";
-      argv[argc++]=hdb_command;
-      argv[argc++]="-append";
-      argv[argc++]=append_command;
-      argv[argc++]="-serial";
-      if (is_tty)
-	{
-	  argv[argc++]="mon:stdio";
-	}
-      else
-	{
-	  argv[argc++]="stdio";
-	}
-      argv[argc++]="-net";
-      argv[argc++]="user";
-      if (virt)
-	{
-	  argv[argc++]="-device";
-	  argv[argc++]="virtio-scsi-device,id=scsi";
-	  argv[argc++]="-device";
-	  argv[argc++]="virtio-net-device,netdev=net0";
-	  argv[argc++]="-device";
-	  argv[argc++]="scsi-hd,drive=hd0";
-	  argv[argc++]="-device";
-	  argv[argc++]="scsi-hd,drive=hd1";
-	  argv[argc++]="-netdev";
-	  argv[argc++]="user,id=net0";
-	}
-      else
-	{
-	  argv[argc++]="-net";
-	  argv[argc++]="nic";
+		virt = !strcmp(machine, "virt");
+
+		asprintf(
+			&hda_command,
+			"%sfile=%s,format=%s,index=0,media=disk,cache=writeback,id=hd0",
+			virt ? "if=none," : "",
+			hda,
+			hda_format);
+
+		asprintf(
+			&hdb_command,
+			"%sfile=%s,format=%s,index=1,media=disk,cache=writeback,id=hd1",
+			virt ? "if=none," : "",
+			hdb,
+			hdb_format);
+
+		/* panic < 0 means reboot immediately on panic; this will actually
+		 * halt as -no-reboot is given to qemu */
+		asprintf(
+			&append_command,
+			"root=/dev/%sa quiet init=/usr/bin/setsid console=%s panic=-1 -- -c -w /sbin/getty -n -l /pbuilder-run -8 -L - %s",
+			qemu_arch_diskdevice(pc),
+			qemu_arch_tty(pc->arch),
+			term);
+
+		dup2(sp[1], 1);
+		dup2(sp[1], 2);
+		close(sp[0]);
+
+		argv[argc++] = strdupa(qemu);
+		argv[argc++] = "-nodefaults";
+		argv[argc++] = "-nographic";
+		argv[argc++] = "-no-reboot"; /* halt instead of rebooting */
+		argv[argc++] = "-M";
+		argv[argc++] = strdupa(machine);
+		if (cpu) {
+			argv[argc++] = "-cpu";
+			argv[argc++] = strdupa(cpu);
+		}
+		argv[argc++] = "-m";
+		argv[argc++] = mem;
+		if (pc->smp) {
+			argv[argc++] = "-smp";
+			argv[argc++] = strdupa(pc->smp);
+		}
+		argv[argc++] = "-kernel";
+		argv[argc++] = strdupa(kernel_image);
+		if (initrd && strcmp(initrd, "")) {
+			argv[argc++] = "-initrd";
+			argv[argc++] = strdupa(initrd);
+		}
+		argv[argc++] = "-drive";
+		argv[argc++] = hda_command;
+		argv[argc++] = "-drive";
+		argv[argc++] = hdb_command;
+		argv[argc++] = "-append";
+		argv[argc++] = append_command;
+		argv[argc++] = "-serial";
+		if (is_tty) {
+			argv[argc++] = "mon:stdio";
+		} else {
+			argv[argc++] = "stdio";
+		}
+		argv[argc++] = "-net";
+		argv[argc++] = "user";
+		if (virt) {
+			argv[argc++] = "-device";
+			argv[argc++] = "virtio-scsi-device,id=scsi";
+			argv[argc++] = "-device";
+			argv[argc++] = "virtio-net-device,netdev=net0";
+			argv[argc++] = "-device";
+			argv[argc++] = "scsi-hd,drive=hd0";
+			argv[argc++] = "-device";
+			argv[argc++] = "scsi-hd,drive=hd1";
+			argv[argc++] = "-netdev";
+			argv[argc++] = "user,id=net0";
+		} else {
+			argv[argc++] = "-net";
+			argv[argc++] = "nic";
+		}
+		argv[argc] = NULL;
+		assert(argc < MAX_ARGS);
+
+		log_begin(log_info);
+		log_middle(log_info, "forking qemu:");
+		for (i = 0; i < argc; ++i) {
+			if (strchr(argv[i], ' ')) {
+				log_middle(log_info, " '%s'", argv[i]);
+			} else {
+				log_middle(log_info, " %s", argv[i]);
+			}
+		}
+		log_end(log_info);
+
+		execvp(argv[0], argv);
+		log_perror("fork_qemu");
+		exit(1);
+	} else {
+		log_perror("fork");
+		return -1;
 	}
-      argv[argc]=NULL;
-      assert(argc < MAX_ARGS);
 
-      log_begin(log_info);
-      log_middle(log_info, "forking qemu:");
-      for (i=0; i<argc; ++i)
-	{
-	  if (strchr(argv[i], ' '))
-	    log_middle(log_info, " '%s'", argv[i]);
-	  else
-	    log_middle(log_info, " %s", argv[i]);
-	}
-      log_end(log_info);
-
-      execvp(argv[0], argv);
-      log_perror("fork_qemu");
-      exit (1);
-    }
-  else
-    {
-      log_perror("fork");
-      return -1;
-    }
-
-  restore_termios();
-  return exit_code;
+	restore_termios();
+	return exit_code;
 }
 
-static int do_fsck(const char* devfile)
-{
-  /* force-running this fsck isn't a good idea; let it fail.
-     If it's mounted by someone else, I don't want to touch it,
-     and chroots can be re-created any time, right?
-   */
-  return forkexeclp("/sbin/fsck",
-		    "/sbin/fsck",
-		    devfile,
-		    NULL);
+static int do_fsck(const char *devfile) {
+	/* force-running this fsck isn't a good idea; let it fail.
+	 * If it's mounted by someone else, I don't want to touch it,
+	 * and chroots can be re-created any time, right?
+	 */
+	return forkexeclp("/sbin/fsck", "/sbin/fsck", devfile, NULL);
 }
 
 /*
    get the current time string which can be used in date command to
    set time inside the chroot.
  */
-static char* get_current_time_string(void)
-{
-  char* locsave, *timestring;
-  time_t currenttime;
-
-  /* save/set/restore locale settings to get current time in POSIX format */
-  locsave = setlocale(LC_TIME, NULL);
-  (void) setlocale(LC_TIME, "POSIX");
-  currenttime=time(NULL);
-  timestring=asctime(gmtime(&currenttime));
-  (void) setlocale(LC_TIME, locsave);
-  return timestring;
+static char *get_current_time_string(void) {
+	char *locsave, *timestring;
+	time_t currenttime;
+
+	/* save/set/restore locale settings to get current time in POSIX format */
+	locsave = setlocale(LC_TIME, NULL);
+	(void)setlocale(LC_TIME, "POSIX");
+	currenttime = time(NULL);
+	timestring = asctime(gmtime(&currenttime));
+	(void)setlocale(LC_TIME, locsave);
+	return timestring;
 }
 
-static void write_first_stage(FILE *f, const struct pbuilderconfig* pc)
-{
-  fprintf(f,
-	  "#!/bin/bash\n"
-	  "echo \n"
-	  /* Can't use log.i or check LOGLEVEL in first stage, since this lives
-	   * inside the base chroot, and has not yet mounted the input disk. */
-	  "echo 'I: qemu-pbuilder first-stage' \n"
-	  "export PBUILDER_INIT_VERSION="XSTR(PBUILDER_INIT_VERSION)"\n"
-	  "export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'\n"
-	  "stty sane\n"
-	  "[ -d /proc/1 ] || mount -n /proc /proc -t proc\n"
-	  "ln -s /dev/shm /run/shm\n"
-	  "mkdir /run/lock\n"
-	  "chmod 01777 /run/lock\n"
-	  "mount -t tmpfs tmpfs /run/lock\n"
-	  "mount -n -o rw,remount / || mount -v -n -o rw,remount /dev/root \n"
-	  "find /tmp -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf --\n"
-	  "mount -t tmpfs tmpfs /tmp\n"
-	  "mkdir /dev/shm\n"
-	  "chmod 01777 /dev/shm\n"
-	  "mount -t tmpfs tmpfs /dev/shm\n"
-	  "ln -fs /proc/mounts /etc/mtab\n"
-	  "export BUILDDIR="BUILDDIR"\n"
-	  "mkdir -p $BUILDDIR\n"
-	  "ln -s $BUILDDIR /tmp/buildd\n"
-	  "mount -n -t ext3 /dev/%sb $BUILDDIR \n"
-	  "$BUILDDIR/input/pbuilder-run \n",
-	  qemu_arch_diskdevice(pc)
-	  );
+static void write_first_stage(FILE *f, const struct pbuilderconfig *pc) {
+	fprintf(
+		f,
+		"#!/bin/bash\n"
+		"echo \n"
+		/* Can't use log.i or check LOGLEVEL in first stage, since this lives
+		 * inside the base chroot, and has not yet mounted the input disk. */
+		"echo 'I: qemu-pbuilder first-stage' \n"
+		"export PBUILDER_INIT_VERSION=" XSTR(PBUILDER_INIT_VERSION) "\n"
+		"export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'\n"
+		"stty sane\n"
+		"[ -d /proc/1 ] || mount -n /proc /proc -t proc\n"
+		"ln -s /dev/shm /run/shm\n"
+		"mkdir /run/lock\n"
+		"chmod 01777 /run/lock\n"
+		"mount -t tmpfs tmpfs /run/lock\n"
+		"mount -n -o rw,remount / || mount -v -n -o rw,remount /dev/root \n"
+		"find /tmp -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf --\n"
+		"mount -t tmpfs tmpfs /tmp\n"
+		"mkdir /dev/shm\n"
+		"chmod 01777 /dev/shm\n"
+		"mount -t tmpfs tmpfs /dev/shm\n"
+		"ln -fs /proc/mounts /etc/mtab\n"
+		"export BUILDDIR=" BUILDDIR "\n"
+		"mkdir -p $BUILDDIR\n"
+		"ln -s $BUILDDIR /tmp/buildd\n"
+		"mount -n -t ext3 /dev/%sb $BUILDDIR \n"
+		"$BUILDDIR/input/pbuilder-run \n",
+		qemu_arch_diskdevice(pc));
 }
 
 static void write_second_stage_header(FILE *f, int debug_shell) {
-  const char *log_level;
-
-  switch (log_get_filter_level()) {
-    case log_debug: log_level = "D"; break;
-    case log_info:  log_level = "I"; break;
-    case log_warn:  log_level = "W"; break;
-    case log_error: log_level = "E"; break;
-    default:        log_level = "I"; break;
-  }
-
-  fprintf(f,
-	  "#!/bin/bash\n"
-
-	  /* Will not be auto (using log_get_use_colors, not _unresolved) */
-	  "export USECOLORS=\"%s\"\n"
-	  "export LOGLEVEL=\"%s\"\n"
-
-	  /* Bash logging taken from pbuilder */
-	  "# Log a message\n"
-	  "# message is of a format\n"
-	  "#  E: error message\n"
-	  "#  W: warning message\n"
-	  "#  I: informational message\n"
-	  "_log() {\n"
-	  "    set -u\n"
-	  "    local color=\"$1\" ; shift\n"
-	  "    local red='\\033[0;31m'\n"
-	  "    local yellow='\\033[1;33m'\n"
-	  "    local blue='\\033[0;34m'\n"
-	  "    local reset='\\033[0m'\n"
-	  "    case \"$USECOLORS\" in\n"
-	  "        yes)\n"
-	  "            printf \"${!color}${*}${reset}\\n\"\n"
-	  "            ;;\n"
-	  "        no)\n"
-	  "            printf \"${*}\\n\"\n"
-	  "            ;;\n"
-	  "        *)\n"
-	  "            printf \"malformed value of USECOLORS: [%%s]\\n\" \"$USECOLORS\" >&2\n"
-	  "            exit 1\n"
-	  "            ;;\n"
-	  "    esac\n"
-	  "    set +u\n"
-	  "}\n"
-	  "function log() {\n"
-	  "    case \"$*\" in\n"
-	  "        \"E: \"*)\n"
-	  "            _log 'red' \"$*\" >&2\n"
-	  "            ;;\n"
-	  "        \"W: \"*)\n"
-	  "            _log 'yellow' \"$*\" >&2\n"
-	  "            ;;\n"
-	  "        \"I: \"*)\n"
-	  "            _log 'reset' \"$*\"\n"
-	  "            ;;\n"
-	  "        \"D: \"*)\n"
-	  "            _log 'blue' \"$*\"\n"
-	  "            ;;\n"
-	  "        *)\n"
-	  "            echo \"malformed log message: $*\" >&2\n"
-	  "            exit 1\n"
-	  "            ;;\n"
-	  "    esac\n"
-	  "}\n"
-
-	  "log.e() {\n"
-	  "    case \"$LOGLEVEL\" in\n"
-	  "        D|I|W|E) log \"E: $*\" ;;\n"
-	  "    esac\n"
-	  "}\n"
-	  "log.w() {\n"
-	  "    case \"$LOGLEVEL\" in\n"
-	  "        D|I|W) log \"W: $*\" ;;\n"
-	  "    esac\n"
-	  "}\n"
-	  "log.i() {\n"
-	  "    case \"$LOGLEVEL\" in\n"
-	  "        D|I) log \"I: $*\" ;;\n"
-	  "    esac\n"
-	  "}\n"
-	  "log.d() {\n"
-	  "    case \"$LOGLEVEL\" in\n"
-	  "        D) log \"D: $*\" ;;\n"
-	  "    esac\n"
-	  "}\n"
-
-	  /* define function to terminate qemu */
-	  "function exit_from_qemu() {\n"
-	  "    %s\n"
-	  "    sync\n"
-	  "    sync\n"
-	  "    sleep 1s\n"		/* sleep before sending dying message */
-	  "    log.i 'qemu-pbuilder %s'\"$1\"\n"
-	  "    sleep 1s\n"
-	  "    halt -f -p\n"		/* just halt myself if possible */
-	  "}\n",
-	  log_get_use_colors() == log_use_colors_yes ? "yes" : "no",
-	  log_level,
-	  debug_shell?"log.i \"Debug shell\"; /bin/bash":"",
-	  qemu_keyword);
+	const char *log_level;
+
+	switch (log_get_filter_level()) {
+		case log_debug:
+			log_level = "D";
+			break;
+		case log_info:
+			log_level = "I";
+			break;
+		case log_warn:
+			log_level = "W";
+			break;
+		case log_error:
+			log_level = "E";
+			break;
+		default:
+			log_level = "I";
+			break;
+	}
+
+	fprintf(
+		f,
+		"#!/bin/bash\n"
+
+		/* Will not be auto (using log_get_use_colors, not _unresolved) */
+		"export USECOLORS=\"%s\"\n"
+		"export LOGLEVEL=\"%s\"\n"
+
+		/* Bash logging taken from pbuilder */
+		"# Log a message\n"
+		"# message is of a format\n"
+		"#  E: error message\n"
+		"#  W: warning message\n"
+		"#  I: informational message\n"
+		"_log() {\n"
+		"    set -u\n"
+		"    local color=\"$1\" ; shift\n"
+		"    local red='\\033[0;31m'\n"
+		"    local yellow='\\033[1;33m'\n"
+		"    local blue='\\033[0;34m'\n"
+		"    local reset='\\033[0m'\n"
+		"    case \"$USECOLORS\" in\n"
+		"        yes)\n"
+		"            printf \"${!color}${*}${reset}\\n\"\n"
+		"            ;;\n"
+		"        no)\n"
+		"            printf \"${*}\\n\"\n"
+		"            ;;\n"
+		"        *)\n"
+		"            printf \"malformed value of USECOLORS: [%%s]\\n\" \"$USECOLORS\" >&2\n"
+		"            exit 1\n"
+		"            ;;\n"
+		"    esac\n"
+		"    set +u\n"
+		"}\n"
+		"function log() {\n"
+		"    case \"$*\" in\n"
+		"        \"E: \"*)\n"
+		"            _log 'red' \"$*\" >&2\n"
+		"            ;;\n"
+		"        \"W: \"*)\n"
+		"            _log 'yellow' \"$*\" >&2\n"
+		"            ;;\n"
+		"        \"I: \"*)\n"
+		"            _log 'reset' \"$*\"\n"
+		"            ;;\n"
+		"        \"D: \"*)\n"
+		"            _log 'blue' \"$*\"\n"
+		"            ;;\n"
+		"        *)\n"
+		"            echo \"malformed log message: $*\" >&2\n"
+		"            exit 1\n"
+		"            ;;\n"
+		"    esac\n"
+		"}\n"
+
+		"log.e() {\n"
+		"    case \"$LOGLEVEL\" in\n"
+		"        D|I|W|E) log \"E: $*\" ;;\n"
+		"    esac\n"
+		"}\n"
+		"log.w() {\n"
+		"    case \"$LOGLEVEL\" in\n"
+		"        D|I|W) log \"W: $*\" ;;\n"
+		"    esac\n"
+		"}\n"
+		"log.i() {\n"
+		"    case \"$LOGLEVEL\" in\n"
+		"        D|I) log \"I: $*\" ;;\n"
+		"    esac\n"
+		"}\n"
+		"log.d() {\n"
+		"    case \"$LOGLEVEL\" in\n"
+		"        D) log \"D: $*\" ;;\n"
+		"    esac\n"
+		"}\n"
+
+		/* define function to terminate qemu */
+		"function exit_from_qemu() {\n"
+		"    %s\n"
+		"    sync\n"
+		"    sync\n"
+		"    sleep 1s\n" /* sleep before sending dying message */
+		"    log.i 'qemu-pbuilder %s'\"$1\"\n"
+		"    sleep 1s\n"
+		"    halt -f -p\n" /* just halt myself if possible */
+		"}\n",
+		log_get_use_colors() == log_use_colors_yes ? "yes" : "no",
+		log_level,
+		debug_shell ? "log.i \"Debug shell\"; /bin/bash" : "",
+		qemu_keyword);
 }
 
 /**
@@ -849,242 +808,232 @@ static void write_second_stage_header(FILE *f, int debug_shell) {
  *
  * hostcommand1 is used from build and login and exeute
  */
-static int run_second_stage_script
-(
- /** save the result of this command*/
- int save_result,
- /** the command-line to invoke within QEMU */
- const char* commandline,
- const struct pbuilderconfig* pc,
- /** the commands to invoke in the host OS */
- const char* hostcommand1,
- /** the commands to invoke in the guest OS */
- const char* hostcommand2)
-{
-  char* script=NULL;
-  char* workblockdevicepath=NULL;
-  char* cowdevpath=NULL;
-  char* timestring;
-  int ret=1;
-  FILE* f;
-  int i;
-
-  if (mkdir(pc->buildplace,0777))
-    {
-      /* could not create the buildplace here. */
-      log_perror("mkdir");
-      goto out;
-    }
-
-  do_fsck(pc->basepath);
-
-  timestring=get_current_time_string();
-
-  asprintf(&workblockdevicepath, "%s.dev", pc->buildplace);
-  ret=create_ext3_block_device(workblockdevicepath, 1);
-  loop_mount(workblockdevicepath, pc->buildplace);
-
-  f = create_script(pc->buildplace, "input/pbuilder-run");
-  write_second_stage_header(f, 0);
-  fprintf(f,
-	  /* main code */
-	  "echo \n"
-	  "log.i 'qemu-pbuilder second-stage' \n"
-	  // Remove compatibility symlink
-	  "rm \"$BUILDDIR\"/pbuilder-run\n"
-	  //"mount -n /proc /proc -t proc\n" // this is done in first stage.
-	  "if [ \"${PBUILDER_INIT_VERSION:-0}\" -lt "XSTR(PBUILDER_INIT_VERSION)" ]; then\n"
-	  "    log.e \"qemubuilder init script is out of date (${PBUILDER_INIT_VERSION:-0} < "XSTR(PBUILDER_INIT_VERSION)")\"\n"
-	  "    log.e \"Please run qemubuilder --update\"\n"
-	  "    exit_from_qemu 1\n"
-	  "elif [ \"${PBUILDER_INIT_VERSION:-0}\" -gt "XSTR(PBUILDER_INIT_VERSION)" ]; then\n"
-	  "    log.e \"qemubuilder init script is newer than expected (${PBUILDER_INIT_VERSION:-0} < "XSTR(PBUILDER_INIT_VERSION)")\"\n"
-	  "    exit_from_qemu 1\n"
-	  "fi\n"
-	  "log.i 'setting time to %s' \n"
-	  "date --set=\"%s\"\n"
-	  "log.i 'configuring network' \n"
-	  "ifconfig -a\n"
-	  "export IFNAME=`/sbin/ifconfig -a | grep eth | head -n1 | awk '{print $1}'`\n"
-	  "dhclient $IFNAME\n"
-	  "mkdir -p \""BUILDDIR"\"\n"
-	  "%s\n"
-	  "$BUILDDIR/input/run-copyfiles\n"
-	  "hostname pbuilder-$(cat /etc/hostname)\n"
-	  "%s\n"
-	  //TODO: I can mount /var/cache/apt/archives from some scratch space to not need this:
-	  "apt-get clean || true\n"
-	  "exit_from_qemu 0\n",
-	  timestring,
-	  timestring,
-	  pc->hookdir && pc->hookdir[0] ? "mkdir -p \""CHROOT_HOOKDIR"\"" : "",
-	  commandline);
-  fclose(f);
-  {
-    char *compat_symlink;
-    if (0>asprintf(&compat_symlink,
-		   "%s/pbuilder-run",
-		   pc->buildplace))
-      {
-	log_printf(log_error,
-	    "Failed to allocate string for compatibility symlink path '%s/pbuilder-run': %s",
-	    pc->buildplace,
-	    strerror(errno));
-	goto out;
-      }
-    if (symlink("input/pbuilder-run", compat_symlink))
-      {
-	log_printf(log_error,
-	    "Failed to create compatibility symlink: %s",
-	    strerror(errno));
-	free(compat_symlink);
-	goto out;
-      }
-    free(compat_symlink);
-  }
-
-  /* copy files script */
-  f = create_script(pc->buildplace, "input/run-copyfiles");
-  copy_file_contents_through_temp(f, "/etc/hosts", pc->buildplace, "/etc");
-  copy_file_contents_through_temp(f, "/etc/hostname", pc->buildplace, "/etc");
-  /* copy inputfile */
-  for (i=0; pc->inputfile[i]; ++i)
-    {
-      copy_file_contents_to_temp(pc->inputfile[i], pc->buildplace, NULL);
-    }
-  if (pc->hookdir != NULL && pc->hookdir[0])
-    {
-      copy_hookdir(pc->hookdir, pc->buildplace);
-    }
-  fclose(f);
-
-  /* do I not need to copy /etc/pbuilderrc, and ~/.pbuilderrc to inside chroot? */
-  /* TODO: recover aptcache */
-
-  if(hostcommand1)
-    {
-      log_printf(log_info, "running host command: %s", hostcommand1);
-      system(hostcommand1);
-    }
-
-  loop_umount(pc->buildplace);
-
-  asprintf(&cowdevpath, "%s.cowdev", pc->buildplace);
-  ret=forkexeclp("qemu-img", "qemu-img",
-		 "create",
-		 "-f",
-		 "qcow2",
-		 "-b",
-		 pc->basepath,
-		 cowdevpath,
-		 NULL);
-
-  fork_qemu(cowdevpath, workblockdevicepath, pc);
-  /* this will always return 0. */
-
-  /* commit the change here */
-  if (save_result)
-    {
-      log_printf(log_info, "committing changes to qemu image");
-      ret=forkexeclp("qemu-img", "qemu-img",
-		     "commit",
-		     cowdevpath,
-		     NULL);
-    }
-
-  /* after-run */
-  loop_mount(workblockdevicepath, pc->buildplace);
-  log_printf(log_info, "running post-run process");
-  if(hostcommand2)
-    {
-      log_printf(log_info, "running host command: %s", hostcommand2);
-      system(hostcommand2);
-    }
-  loop_umount(pc->buildplace);
-  rmdir(pc->buildplace);
-  log_printf(log_info, "clean up COW device files");
-  unlink(workblockdevicepath);
-  unlink(cowdevpath);
-  ret=0;
-
- out:
-  if(workblockdevicepath) free(workblockdevicepath);
-  if(cowdevpath) free(cowdevpath);
-  if(script) free(script);
-  return ret;
+static int run_second_stage_script(
+	/** save the result of this command*/
+	int save_result,
+	/** the command-line to invoke within QEMU */
+	const char *commandline,
+	const struct pbuilderconfig *pc,
+	/** the commands to invoke in the host OS */
+	const char *hostcommand1,
+	/** the commands to invoke in the guest OS */
+	const char *hostcommand2) {
+	char *script = NULL;
+	char *workblockdevicepath = NULL;
+	char *cowdevpath = NULL;
+	char *timestring;
+	int ret = 1;
+	FILE *f;
+	int i;
+
+	if (mkdir(pc->buildplace, 0777)) {
+		/* could not create the buildplace here. */
+		log_perror("mkdir");
+		goto out;
+	}
+
+	do_fsck(pc->basepath);
+
+	timestring = get_current_time_string();
+
+	asprintf(&workblockdevicepath, "%s.dev", pc->buildplace);
+	ret = create_ext3_block_device(workblockdevicepath, 1);
+	loop_mount(workblockdevicepath, pc->buildplace);
+
+	f = create_script(pc->buildplace, "input/pbuilder-run");
+	write_second_stage_header(f, 0);
+	fprintf(
+		f,
+		/* main code */
+		"echo \n"
+		"log.i 'qemu-pbuilder second-stage' \n"
+		// Remove compatibility symlink
+		"rm \"$BUILDDIR\"/pbuilder-run\n"
+		//"mount -n /proc /proc -t proc\n" // this is done in first stage.
+		"if [ \"${PBUILDER_INIT_VERSION:-0}\" -lt " XSTR(PBUILDER_INIT_VERSION) " ]; then\n"
+		"    log.e \"qemubuilder init script is out of date (${PBUILDER_INIT_VERSION:-0} < " XSTR(PBUILDER_INIT_VERSION) ")\"\n"
+		"    log.e \"Please run qemubuilder --update\"\n"
+		"    exit_from_qemu 1\n"
+		"elif [ \"${PBUILDER_INIT_VERSION:-0}\" -gt " XSTR(PBUILDER_INIT_VERSION) " ]; then\n"
+		"    log.e \"qemubuilder init script is newer than expected (${PBUILDER_INIT_VERSION:-0} < " XSTR(PBUILDER_INIT_VERSION) ")\"\n"
+		"    exit_from_qemu 1\n"
+		"fi\n"
+		"log.i 'setting time to %s' \n"
+		"date --set=\"%s\"\n"
+		"log.i 'configuring network' \n"
+		"ifconfig -a\n"
+		"export IFNAME=`/sbin/ifconfig -a | grep eth | head -n1 | awk '{print $1}'`\n"
+		"dhclient $IFNAME\n"
+		"mkdir -p \"" BUILDDIR
+		"\"\n"
+		"%s\n"
+		"$BUILDDIR/input/run-copyfiles\n"
+		"hostname pbuilder-$(cat /etc/hostname)\n"
+		"%s\n"
+		//TODO: I can mount /var/cache/apt/archives from some scratch space to not need this:
+		"apt-get clean || true\n"
+		"exit_from_qemu 0\n",
+		timestring,
+		timestring,
+		pc->hookdir && pc->hookdir[0] ? "mkdir -p \"" CHROOT_HOOKDIR "\"" : "",
+		commandline);
+	fclose(f);
+	{
+		char *compat_symlink;
+		if (0 > asprintf(&compat_symlink, "%s/pbuilder-run", pc->buildplace)) {
+			log_printf(
+				log_error,
+				"Failed to allocate string for compatibility symlink path '%s/pbuilder-run': %s",
+				pc->buildplace,
+				strerror(errno));
+			goto out;
+		}
+		if (symlink("input/pbuilder-run", compat_symlink)) {
+			log_printf(log_error,
+					   "Failed to create compatibility symlink: %s",
+					   strerror(errno));
+			free(compat_symlink);
+			goto out;
+		}
+		free(compat_symlink);
+	}
+
+	/* copy files script */
+	f = create_script(pc->buildplace, "input/run-copyfiles");
+	copy_file_contents_through_temp(f, "/etc/hosts", pc->buildplace, "/etc");
+	copy_file_contents_through_temp(f, "/etc/hostname", pc->buildplace, "/etc");
+	/* copy inputfile */
+	for (i = 0; pc->inputfile[i]; ++i) {
+		copy_file_contents_to_temp(pc->inputfile[i], pc->buildplace, NULL);
+	}
+	if (pc->hookdir != NULL && pc->hookdir[0]) {
+		copy_hookdir(pc->hookdir, pc->buildplace);
+	}
+	fclose(f);
+
+	/* do I not need to copy /etc/pbuilderrc, and ~/.pbuilderrc to inside chroot? */
+	/* TODO: recover aptcache */
+
+	if (hostcommand1) {
+		log_printf(log_info, "running host command: %s", hostcommand1);
+		system(hostcommand1);
+	}
+
+	loop_umount(pc->buildplace);
+
+	asprintf(&cowdevpath, "%s.cowdev", pc->buildplace);
+	ret = forkexeclp("qemu-img",
+					 "qemu-img",
+					 "create",
+					 "-f",
+					 "qcow2",
+					 "-b",
+					 pc->basepath,
+					 cowdevpath,
+					 NULL);
+
+	fork_qemu(cowdevpath, workblockdevicepath, pc);
+	/* this will always return 0. */
+
+	/* commit the change here */
+	if (save_result) {
+		log_printf(log_info, "committing changes to qemu image");
+		ret = forkexeclp("qemu-img", "qemu-img", "commit", cowdevpath, NULL);
+	}
+
+	/* after-run */
+	loop_mount(workblockdevicepath, pc->buildplace);
+	log_printf(log_info, "running post-run process");
+	if (hostcommand2) {
+		log_printf(log_info, "running host command: %s", hostcommand2);
+		system(hostcommand2);
+	}
+	loop_umount(pc->buildplace);
+	rmdir(pc->buildplace);
+	log_printf(log_info, "clean up COW device files");
+	unlink(workblockdevicepath);
+	unlink(cowdevpath);
+	ret = 0;
+
+out:
+	if (workblockdevicepath) {
+		free(workblockdevicepath);
+	}
+	if (cowdevpath) {
+		free(cowdevpath);
+	}
+	if (script) {
+		free(script);
+	}
+	return ret;
 }
 
 /*
    @return shell command to copy the dsc file.
  */
-static char* copy_dscfile(const char* dscfile_, const char* destdir)
-{
-  int ret=1;
-  size_t bufsiz=0;
-  char* buf=NULL;
-  char* filename=NULL;
-  char* origdir=NULL;
-  char* dscfile=canonicalize_file_name(dscfile_);
-  FILE* f=fopen(dscfile,"r");
-
-  char* memstr=0;
-  size_t len=0;
-  FILE* fmem=open_memstream(&memstr, &len);
-  int filelist=0;
-
-  origdir=strdup(dscfile);
-
-  assert(strrchr(origdir,'/') != 0);
-  (*(strrchr(origdir,'/')))=0;
-
-  fprintf(fmem, "cp %s %s/\n",
-	  dscfile, destdir);
-
-  while (getline(&buf,&bufsiz,f)>0)
-    {
-      if (strrchr(buf,'\n'))
-	{
-	  *(strrchr(buf,'\n'))=0;
+static char *copy_dscfile(const char *dscfile_, const char *destdir) {
+	int ret = 1;
+	size_t bufsiz = 0;
+	char *buf = NULL;
+	char *filename = NULL;
+	char *origdir = NULL;
+	char *dscfile = canonicalize_file_name(dscfile_);
+	FILE *f = fopen(dscfile, "r");
+
+	char *memstr = 0;
+	size_t len = 0;
+	FILE *fmem = open_memstream(&memstr, &len);
+	int filelist = 0;
+
+	origdir = strdup(dscfile);
+
+	assert(strrchr(origdir, '/') != 0);
+	(*(strrchr(origdir, '/'))) = 0;
+
+	fprintf(fmem, "cp %s %s/\n", dscfile, destdir);
+
+	while (getline(&buf, &bufsiz, f) > 0) {
+		if (strrchr(buf, '\n')) {
+			*(strrchr(buf, '\n')) = 0;
+		}
+		if (filelist) {
+			if (sscanf(buf, " %*s %*s %ms", &filename) != 1) {
+				filelist = 0;
+			} else {
+				fprintf(fmem, "cp %s/%s %s/\n", origdir, filename, destdir);
+				assert(filename);
+				free(filename);
+			}
+		}
+		if (!(buf[0] == ' ') && !strncmp(buf, "Files:", 6)) {
+			filelist = 1;
+		}
 	}
-      if(filelist)
-	{
-	  if(sscanf(buf, " %*s %*s %ms", &filename)!=1)
-	    filelist=0;
-	  else
-	    {
-	      fprintf(fmem, "cp %s/%s %s/\n",
-		      origdir, filename, destdir);
-	      assert(filename);
-	      free(filename);
-	    }
+
+	ret = 0;
+	assert(fmem);
+	assert(f);
+	fclose(fmem);
+	fclose(f);
+
+	if (buf) {
+		free(buf);
 	}
-      if (!(buf[0]==' ')&&
-	  !strncmp(buf,"Files:",6))
-	{
-	  filelist=1;
+	if (origdir) {
+		free(origdir);
+	}
+	if (dscfile) {
+		free(dscfile);
 	}
-    }
-
-  ret=0;
-  assert(fmem);
-  assert(f);
-  fclose(fmem);
-  fclose(f);
-
-  if(buf) free(buf);
-  if(origdir) free(origdir);
-  if(dscfile) free(dscfile);
-  return ret?NULL:memstr;
+	return ret ? NULL : memstr;
 }
 
-int cpbuilder_check_config(const struct pbuilderconfig* pc)
-{
-  if (!pc->arch || !*pc->arch)
-    {
-      log_printf(log_error, "No architecture specified");
-      return 1;
-    }
-  return 0;
+int cpbuilder_check_config(const struct pbuilderconfig *pc) {
+	if (!pc->arch || !*pc->arch) {
+		log_printf(log_error, "No architecture specified");
+		return 1;
+	}
+	return 0;
 }
 
 /*
@@ -1092,291 +1041,298 @@ int cpbuilder_check_config(const struct pbuilderconfig* pc)
 
    variable ret holds the state.
  */
-int cpbuilder_create(const struct pbuilderconfig* pc)
-{
-  int ret=0;
-  char* s=NULL;  		/* generic asprintf buffer */
-  char* workblockdevicepath=NULL;
-  FILE* f;			/* generic FILE pointer which is reused. */
-  char* t;
-  char* timestring;
-
-  /* remove existing file; it can be old qemu image, or a directory if
-     it didn't exist before. */
-  unlink(pc->basepath);
-  rmdir(pc->basepath);
-
-  /* 3GB should be enough to install any Debian system; hopefully */
-  ret=create_ext3_block_device(pc->basepath, 3);
-
-  if (ret)
-    {
-      goto out;
-    }
-
-  if (mkdir(pc->buildplace,0777))
-    {
-      /* could not create the buildplace here. */
-      ret=1;
-      log_perror("mkdir");
-      goto out;
-    }
-
-  ret=loop_mount(pc->basepath, pc->buildplace);
-  if (ret)
-    {
-      goto out;
-    }
-
-  debootstrap_command_line[1] = "--arch";
-  debootstrap_command_line[2] = pc->arch;
-  debootstrap_command_line[3] = "--foreign";
-  DEBOOTSTRAP_ADD_PARAM(pc->distribution);
-  DEBOOTSTRAP_ADD_PARAM(pc->buildplace);
-  DEBOOTSTRAP_ADD_PARAM(pc->mirror);
-  DEBOOTSTRAP_ADD_PARAM(NULL);
-
-  log_printf(log_info, "Invoking debootstrap");
-  ret=forkexecvp(debootstrap_command_line);
-  if (ret)
-    {
-      log_printf(log_error, "debootstrap failed with %i", ret);
-      goto umount_out;
-    }
-
-  /* arch-dependent code here.
-     create required device files.
-
-     ttyAMA0 is probably ARM-specific
-     others are probably linux-portable as documented in linux/Documentation/devices.txt
-     other OSes will require different, but hey, they probably don't even boot from ext3,
-     we'll need think of other ways to work with them.
-
-   */
-  log_printf(log_info, "Doing architecture-specific /dev population");
-
-  qemu_create_arch_devices(pc->buildplace, pc->arch);
-
-  f = create_script(pc->buildplace, "pbuilder-run");
-  write_first_stage(f, pc);
-  fclose(f);
-  f = NULL;
-
-  if (pc->http_proxy != NULL)
-    {
-	f = create_script(pc->buildplace, "etc/apt/apt.conf.d/20pbuilder-proxy");
-	fprintf(f,
-		"Acquire\n"
-		"{\n"
-			"http \n"
-			"{\n"
+int cpbuilder_create(const struct pbuilderconfig *pc) {
+	int ret = 0;
+	char *s = NULL; /* generic asprintf buffer */
+	char *workblockdevicepath = NULL;
+	FILE *f; /* generic FILE pointer which is reused. */
+	char *t;
+	char *timestring;
+
+	/* remove existing file; it can be old qemu image, or a directory if
+	 * it didn't exist before. */
+	unlink(pc->basepath);
+	rmdir(pc->basepath);
+
+	/* 3GB should be enough to install any Debian system; hopefully */
+	ret = create_ext3_block_device(pc->basepath, 3);
+
+	if (ret) {
+		goto out;
+	}
+
+	if (mkdir(pc->buildplace, 0777)) {
+		/* could not create the buildplace here. */
+		ret = 1;
+		log_perror("mkdir");
+		goto out;
+	}
+
+	ret = loop_mount(pc->basepath, pc->buildplace);
+	if (ret) {
+		goto out;
+	}
+
+	debootstrap_command_line[1] = "--arch";
+	debootstrap_command_line[2] = pc->arch;
+	debootstrap_command_line[3] = "--foreign";
+	DEBOOTSTRAP_ADD_PARAM(pc->distribution);
+	DEBOOTSTRAP_ADD_PARAM(pc->buildplace);
+	DEBOOTSTRAP_ADD_PARAM(pc->mirror);
+	DEBOOTSTRAP_ADD_PARAM(NULL);
+
+	log_printf(log_info, "Invoking debootstrap");
+	ret = forkexecvp(debootstrap_command_line);
+	if (ret) {
+		log_printf(log_error, "debootstrap failed with %i", ret);
+		goto umount_out;
+	}
+
+	/* arch-dependent code here.
+	 * create required device files.
+
+	 * ttyAMA0 is probably ARM-specific
+	 * others are probably linux-portable as documented in
+	 * linux/Documentation/devices.txt
+	 * other OSes will require different, but hey, they probably don't
+	 * even boot from ext3,
+	 * we'll need think of other ways to work with them.
+	 */
+	log_printf(log_info, "Doing architecture-specific /dev population");
+
+	qemu_create_arch_devices(pc->buildplace, pc->arch);
+
+	f = create_script(pc->buildplace, "pbuilder-run");
+	write_first_stage(f, pc);
+	fclose(f);
+	f = NULL;
+
+	if (pc->http_proxy != NULL) {
+		f = create_script(pc->buildplace,
+						  "etc/apt/apt.conf.d/20pbuilder-proxy");
+		fprintf(f,
+				"Acquire\n"
+				"{\n"
+				"http \n"
+				"{\n"
 				"Proxy \"%s\";\n"
-			"};\n"
-		"};\n",
-		pc->http_proxy
-	);
+				"};\n"
+				"};\n",
+				pc->http_proxy);
+		fclose(f);
+		f = NULL;
+	}
+
+	free(s);
+	s = 0;
+
+	ret = loop_umount(pc->buildplace);
+
+	/* create the temporary device for command-execution */
+	asprintf(&workblockdevicepath, "%s.dev", pc->buildplace);
+	ret = create_ext3_block_device(workblockdevicepath, 1);
+
+	loop_mount(workblockdevicepath, pc->buildplace);
+
+	timestring = get_current_time_string();
+
+	f = create_script(pc->buildplace, "input/pbuilder-run");
+	write_second_stage_header(f, pc->debug);
+	fprintf(
+		f,
+		/* start of main code */
+		"export RET=0\n"
+		"echo \n"
+		"log.i 'qemu-pbuilder second-stage' \n"
+		"log.i 'setting time to %s' \n"
+		"date --set=\"%s\"\n"
+		"log.i 'Running debootstrap second-stage script' \n"
+		"touch /etc/udev/disabled\n" // work-around for #520742
+		"/debootstrap/debootstrap --second-stage || ( "
+		"  log.i \"dumping debootstrap log\"\n"
+		"  cat /debootstrap/debootstrap.log\n"
+		"  exit_from_qemu\n"
+		"\n )\n"
+		"rm /etc/udev/disabled\n" // work-around for #520742
+		"echo deb %s %s %s > /etc/apt/sources.list \n"
+		"echo 'APT::Install-Recommends \"false\"; ' > /etc/apt/apt.conf.d/15pbuilder\n"
+		"mount -n proc /proc -t proc\n"
+		"mount -n sysfs /sys -t sysfs\n"
+		"mkdir /dev/pts\n"
+		"mount -n devpts /dev/pts -t devpts\n"
+		"dhclient eth0\n"
+		"%s\n"
+		"$BUILDDIR/input/run-copyfiles\n"
+		"hostname pbuilder-$(cat /etc/hostname)\n"
+		//TODO: installaptlines
+		"echo '%s' > /etc/apt/sources.list.d/other.list\n"
+		EXECUTE_HOOKS("G")
+		"apt-get update || exit_from_qemu 1\n"
+		//TODO: "dpkg --purge $REMOVEPACKAGES\n"
+		//recover aptcache
+		"apt-get -y %s -o DPkg::Options::=--force-confnew dist-upgrade || exit_from_qemu 1\n"
+		"apt-get install %s -y build-essential dpkg-dev apt aptitude pbuilder %s || exit_from_qemu 1\n"
+		//TODO: save aptcache
+		//optionally autoclean aptcache
+		EXECUTE_HOOKS("E")
+		//TODO: I can mount /var/cache/apt/archives from some scratch space to not need this:
+		"apt-get clean || true\n"
+		"exit_from_qemu $RET\n"
+		"bash\n",
+		timestring,
+		timestring,
+		t = sanitize_mirror(pc->mirror),
+		pc->distribution,
+		pc->components,
+		pc->hookdir && pc->hookdir[0] ? "mkdir -p \"" CHROOT_HOOKDIR "\"" : "",
+		pc->othermirror ? pc->othermirror : "",
+		pc->allow_untrusted ? "--force-yes" : "",
+		pc->allow_untrusted ? "--force-yes" : "",
+		pc->extrapackages ? pc->extrapackages : "");
 	fclose(f);
 	f = NULL;
-    }
-
-  free(s); s=0;
-
-  ret=loop_umount(pc->buildplace);
-
-  /* create the temporary device for command-execution */
-  asprintf(&workblockdevicepath, "%s.dev", pc->buildplace);
-  ret=create_ext3_block_device(workblockdevicepath, 1);
-
-  loop_mount(workblockdevicepath, pc->buildplace);
-
-  timestring=get_current_time_string();
-
-  f = create_script(pc->buildplace, "input/pbuilder-run");
-  write_second_stage_header(f, pc->debug);
-  fprintf(f,
-	  /* start of main code */
-	  "export RET=0\n"
-	  "echo \n"
-	  "log.i 'qemu-pbuilder second-stage' \n"
-	  "log.i 'setting time to %s' \n"
-	  "date --set=\"%s\"\n"
-	  "log.i 'Running debootstrap second-stage script' \n"
-	  "touch /etc/udev/disabled\n" // work-around for #520742
-	  "/debootstrap/debootstrap --second-stage || ( "
-	  "  log.i \"dumping debootstrap log\"\n"
-	  "  cat /debootstrap/debootstrap.log\n"
-	  "  exit_from_qemu\n"
-	  "\n )\n"
-	  "rm /etc/udev/disabled\n" // work-around for #520742
-	  "echo deb %s %s %s > /etc/apt/sources.list \n"
-	  "echo 'APT::Install-Recommends \"false\"; ' > /etc/apt/apt.conf.d/15pbuilder\n"
-	  "mount -n proc /proc -t proc\n"
-	  "mount -n sysfs /sys -t sysfs\n"
-	  "mkdir /dev/pts\n"
-	  "mount -n devpts /dev/pts -t devpts\n"
-	  "dhclient eth0\n"
-	  "%s\n"
-	  "$BUILDDIR/input/run-copyfiles\n"
-	  "hostname pbuilder-$(cat /etc/hostname)\n"
-	  //TODO: installaptlines
-	  "echo '%s' > /etc/apt/sources.list.d/other.list\n"
-	  EXECUTE_HOOKS("G")
-	  "apt-get update || exit_from_qemu 1\n"
-	  //TODO: "dpkg --purge $REMOVEPACKAGES\n"
-	  //recover aptcache
-	  "apt-get -y %s -o DPkg::Options::=--force-confnew dist-upgrade || exit_from_qemu 1\n"
-	  "apt-get install %s -y build-essential dpkg-dev apt aptitude pbuilder %s || exit_from_qemu 1\n"
-	  //TODO: save aptcache
-	  //optionally autoclean aptcache
-	  EXECUTE_HOOKS("E")
-	  //TODO: I can mount /var/cache/apt/archives from some scratch space to not need this:
-	  "apt-get clean || true\n"
-	  "exit_from_qemu $RET\n"
-	  "bash\n",
-	  timestring,
-	  timestring,
-	  t=sanitize_mirror(pc->mirror), pc->distribution, pc->components,
-	  pc->hookdir && pc->hookdir[0] ? "mkdir -p \""CHROOT_HOOKDIR"\"" : "",
-	  pc->othermirror?pc->othermirror:"",
-	  pc->allow_untrusted?"--force-yes":"",
-	  pc->allow_untrusted?"--force-yes":"",
-	  pc->extrapackages?pc->extrapackages:"");
-  fclose(f);
-  f = NULL;
-
-  free(t);
-
-  /* TODO: can I do 'date --set' from output of 'LC_ALL=C date' */
-
-  /* copy files script */
-  f = create_script(pc->buildplace, "input/run-copyfiles");
-  copy_file_contents_through_temp(f, "/etc/hosts", pc->buildplace, "/etc");
-  copy_file_contents_through_temp(f, "/etc/hostname", pc->buildplace, "/etc");
-  if (pc->hookdir != NULL && pc->hookdir[0])
-    {
-      copy_hookdir(pc->hookdir, pc->buildplace);
-    }
-  fclose(f);
-
-  /* do I not need to copy /etc/pbuilderrc, and ~/.pbuilderrc to inside chroot? */
-  /* TODO: recover aptcache */
-
-  loop_umount(pc->buildplace);
-  rmdir(pc->buildplace);
-
-  // this will have wrong time. how to workaround?
-  ret=fork_qemu(pc->basepath, workblockdevicepath, pc);
-
-  unlink(workblockdevicepath);
-
- out:
-  if(workblockdevicepath)
-    {
-      free(workblockdevicepath);
-    }
-  if(s) free(s);
-  return ret;
-
- umount_out:
-  loop_umount(pc->buildplace);
-  if(s) free(s);
-  return ret;
+
+	free(t);
+
+	/* TODO: can I do 'date --set' from output of 'LC_ALL=C date' */
+
+	/* copy files script */
+	f = create_script(pc->buildplace, "input/run-copyfiles");
+	copy_file_contents_through_temp(f, "/etc/hosts", pc->buildplace, "/etc");
+	copy_file_contents_through_temp(f, "/etc/hostname", pc->buildplace, "/etc");
+	if (pc->hookdir != NULL && pc->hookdir[0]) {
+		copy_hookdir(pc->hookdir, pc->buildplace);
+	}
+	fclose(f);
+
+	/* do I not need to copy /etc/pbuilderrc, and ~/.pbuilderrc to inside chroot? */
+	/* TODO: recover aptcache */
+
+	loop_umount(pc->buildplace);
+	rmdir(pc->buildplace);
+
+	// this will have wrong time. how to workaround?
+	ret = fork_qemu(pc->basepath, workblockdevicepath, pc);
+
+	unlink(workblockdevicepath);
+
+out:
+	if (workblockdevicepath) {
+		free(workblockdevicepath);
+	}
+	if (s) {
+		free(s);
+	}
+	return ret;
+
+umount_out:
+	loop_umount(pc->buildplace);
+	if (s) {
+		free(s);
+	}
+	return ret;
 }
 
 /*
  * @return: return code of pbuilder, or <0 on failure
  */
-int cpbuilder_build(const struct pbuilderconfig* pc, const char* dscfile)
-{
-  int ret;
-  char* hoststr=NULL;
-  char* hoststr2=NULL;
-  char* commandline=NULL;
-  const char* buildopt=NULL;
-  const char* debbuildopts=NULL;
-  char* debbuildopts_work=NULL;
-
-  if (pc->binary_arch) {
-    asprintf(&debbuildopts_work, "%s -B", pc->debbuildopts);
-    debbuildopts=debbuildopts_work;
-    buildopt="--binary-arch";
-  } else if (pc->binary_indep) {
-    asprintf(&debbuildopts_work, "%s -A", pc->debbuildopts);
-    debbuildopts=debbuildopts_work;
-    buildopt="--binary-indep";
-  } else {
-    debbuildopts=pc->debbuildopts;
-    buildopt="--binary-all";
-  }
-
-  hoststr=copy_dscfile(dscfile, pc->buildplace);
-
-  asprintf(&commandline,
-	   EXECUTE_HOOKS("D")
-	   "ALLOWUNTRUSTED=%s /usr/lib/pbuilder/pbuilder-satisfydepends --control $BUILDDIR/*.dsc --internal-chrootexec 'chroot . ' %s \n"
-	   "apt-get install %s -y %s\n"
-	   "cd $BUILDDIR; /usr/bin/dpkg-source -x $(basename %s) \n"
-	   "log.i 'Building the package'\n"
-	   EXECUTE_HOOKS("A")
-	   "if ! (\n"
-	   "    cd $BUILDDIR/*-*/\n"
-	   "    dpkg-buildpackage -us -uc %s\n"
-	   "); then\n"
-	   EXECUTE_HOOKS_INDENT("    ", "C")
-	   "    exit_from_qemu 1\n"
-	   "fi\n"
-	   EXECUTE_HOOKS("B"),
-	   pc->allow_untrusted?"yes":"no",
-	   buildopt,
-	   pc->allow_untrusted?"--force-yes":"",
-	   pc->extrapackages?pc->extrapackages:"",
-	   dscfile,
-	   debbuildopts);
-
-  /* Obscure assumption!: assume _ is significant for package name and
-     no other file will have _. */
-
-  asprintf(&hoststr2,
-	   "BUILDPLACE='%s'\n"
-	   "BUILDRESULT='%s'\n"
-	   "BUILDRESULTUID=%d\n"
-	   "BUILDRESULTGID=%d\n"
-	   "if [ -d \"${BUILDRESULT}\" ]; then\n"
-	   "    chown \"${BUILDRESULTUID}:${BUILDRESULTGID}\" \"${BUILDPLACE}$BUILDDIR/\"*\n"
-	   "    chgrp \"${BUILDRESULTGID}\" \"${BUILDPLACE}$BUILDDIR/\"*\n"
-	   "    for FILE in \"${BUILDPLACE}$BUILDDIR\"/*; do\n"
-	   "        if [ -f \"${FILE}\" ]; then\n"
-	   "            cp -p \"${FILE}\" \"${BUILDRESULT}\" || true\n"
-	   "        fi\n"
-	   "    done\n"
-	   "else\n"
-	   "    log.e \"BUILDRESULT=[$BUILDRESULT] is not a directory.\"\n"
-	   "fi\n",
-	   pc->buildplace, pc->buildresult,
-	   pc->buildresultuid, pc->buildresultgid);
-
-  ret=run_second_stage_script
-    (0,
-     commandline, pc,
-     hoststr,
-     hoststr2);
-
-  if(debbuildopts_work) free(debbuildopts_work);
-  if(hoststr2) free(hoststr2);
-  if(hoststr) free(hoststr);
-  if(commandline) free(commandline);
-  return ret;
+int cpbuilder_build(const struct pbuilderconfig *pc, const char *dscfile) {
+	int ret;
+	char *hoststr = NULL;
+	char *hoststr2 = NULL;
+	char *commandline = NULL;
+	const char *buildopt = NULL;
+	const char *debbuildopts = NULL;
+	char *debbuildopts_work = NULL;
+
+	if (pc->binary_arch) {
+		asprintf(&debbuildopts_work, "%s -B", pc->debbuildopts);
+		debbuildopts = debbuildopts_work;
+		buildopt = "--binary-arch";
+	} else if (pc->binary_indep) {
+		asprintf(&debbuildopts_work, "%s -A", pc->debbuildopts);
+		debbuildopts = debbuildopts_work;
+		buildopt = "--binary-indep";
+	} else {
+		debbuildopts = pc->debbuildopts;
+		buildopt = "--binary-all";
+	}
+
+	hoststr = copy_dscfile(dscfile, pc->buildplace);
+
+	asprintf(
+		&commandline,
+		EXECUTE_HOOKS("D")
+		"ALLOWUNTRUSTED=%s /usr/lib/pbuilder/pbuilder-satisfydepends --control $BUILDDIR/*.dsc --internal-chrootexec 'chroot . ' %s \n"
+		"apt-get install %s -y %s\n"
+		"cd $BUILDDIR; /usr/bin/dpkg-source -x $(basename %s) \n"
+		"log.i 'Building the package'\n"
+		EXECUTE_HOOKS("A")
+		"if ! (\n"
+		"    cd $BUILDDIR/*-*/\n"
+		"    dpkg-buildpackage -us -uc %s\n"
+		"); then\n"
+		EXECUTE_HOOKS_INDENT("    ", "C")
+		"    exit_from_qemu 1\n"
+		"fi\n"
+		EXECUTE_HOOKS("B"),
+		pc->allow_untrusted ? "yes" : "no",
+		buildopt,
+		pc->allow_untrusted ? "--force-yes" : "",
+		pc->extrapackages ? pc->extrapackages : "",
+		dscfile,
+		debbuildopts);
+
+	/* Obscure assumption!: assume _ is significant for package name
+	 * and no other file will have _. */
+
+	asprintf(
+		&hoststr2,
+		"BUILDPLACE='%s'\n"
+		"BUILDRESULT='%s'\n"
+		"BUILDRESULTUID=%d\n"
+		"BUILDRESULTGID=%d\n"
+		"if [ -d \"${BUILDRESULT}\" ]; then\n"
+		"    chown \"${BUILDRESULTUID}:${BUILDRESULTGID}\" \"${BUILDPLACE}$BUILDDIR/\"*\n"
+		"    chgrp \"${BUILDRESULTGID}\" \"${BUILDPLACE}$BUILDDIR/\"*\n"
+		"    for FILE in \"${BUILDPLACE}$BUILDDIR\"/*; do\n"
+		"        if [ -f \"${FILE}\" ]; then\n"
+		"            cp -p \"${FILE}\" \"${BUILDRESULT}\" || true\n"
+		"        fi\n"
+		"    done\n"
+		"else\n"
+		"    log.e \"BUILDRESULT=[$BUILDRESULT] is not a directory.\"\n"
+		"fi\n",
+		pc->buildplace,
+		pc->buildresult,
+		pc->buildresultuid,
+		pc->buildresultgid);
+
+	ret = run_second_stage_script(0, commandline, pc, hoststr, hoststr2);
+
+	if (debbuildopts_work) {
+		free(debbuildopts_work);
+	}
+	if (hoststr2) {
+		free(hoststr2);
+	}
+	if (hoststr) {
+		free(hoststr);
+	}
+	if (commandline) {
+		free(commandline);
+	}
+	return ret;
 }
 
-int cpbuilder_login(const struct pbuilderconfig* pc)
-{
-  return run_second_stage_script(pc->save_after_login,
-				 EXECUTE_HOOKS("H")
-				 EXECUTE_HOOKS("F")
-				 "bash",
-				 pc,
-				 NULL,
-				 NULL);
+int cpbuilder_login(const struct pbuilderconfig *pc) {
+	return run_second_stage_script(pc->save_after_login,
+								   EXECUTE_HOOKS("H")
+								   EXECUTE_HOOKS("F")
+								   "bash",
+								   pc,
+								   NULL,
+								   NULL);
 }
 
 /*
@@ -1384,30 +1340,30 @@ int cpbuilder_login(const struct pbuilderconfig* pc)
 Mostly a copy of pbuilder login, executes a script.
 
  */
-int cpbuilder_execute(const struct pbuilderconfig* pc, char** av)
-{
-  char* hostcommand;
-  char* runcommandline;
-  int ret;
-
-  asprintf(&hostcommand,
-	   "[ -d %s/input ] || mkdir %s/input\n || log.e \"Failed to create directory '%s/input'\"\n"
-	   "cp %s %s/input/runscript\n",
-	   pc->buildplace, pc->buildplace, pc->buildplace,
-	   av[0], pc->buildplace);
-  /* TODO: add options too */
-  asprintf(&runcommandline,
-	   EXECUTE_HOOKS("H")
-	   EXECUTE_HOOKS("F")
-	   "sh $BUILDDIR/input/runscript");
-  ret=run_second_stage_script(pc->save_after_login,
-			      runcommandline,
-			      pc,
-			      hostcommand,
-			      NULL);
-  free(hostcommand);
-  free(runcommandline);
-  return ret;
+int cpbuilder_execute(const struct pbuilderconfig *pc, char **av) {
+	char *hostcommand;
+	char *runcommandline;
+	int ret;
+
+	asprintf(
+		&hostcommand,
+		"[ -d %s/input ] || mkdir %s/input\n || log.e \"Failed to create directory '%s/input'\"\n"
+		"cp %s %s/input/runscript\n",
+		pc->buildplace,
+		pc->buildplace,
+		pc->buildplace,
+		av[0],
+		pc->buildplace);
+	/* TODO: add options too */
+	asprintf(&runcommandline,
+			 EXECUTE_HOOKS("H")
+			 EXECUTE_HOOKS("F")
+			 "sh $BUILDDIR/input/runscript");
+	ret = run_second_stage_script(
+		pc->save_after_login, runcommandline, pc, hostcommand, NULL);
+	free(hostcommand);
+	free(runcommandline);
+	return ret;
 }
 
 /**
@@ -1415,103 +1371,91 @@ int cpbuilder_execute(const struct pbuilderconfig* pc, char** av)
 
    @return 0 on success, other values on failure.
  */
-int cpbuilder_update(const struct pbuilderconfig* pc)
-{
-  int ret;
-
-  ret = do_fsck(pc->basepath);
-  if (ret)
-    {
-      log_printf(log_error, "Failed fsck '%s'", pc->basepath);
-      return ret;
-    }
-
-  if (mkdir(pc->buildplace,0777))
-    {
-      log_printf(log_error,
-	  "Could not create directory '%s': %s",
-	  pc->buildplace,
-	  strerror(errno));
-      return 1;
-    }
-
-  ret = loop_mount(pc->basepath, pc->buildplace);
-  if (ret)
-    {
-      log_printf(log_error,
-	  "Could not mount '%s' on '%s'",
-	  pc->basepath,
-	  pc->buildplace);
-      return ret;
-    }
-  FILE *g = create_script(pc->buildplace, "pbuilder-run");
-  write_first_stage(g, pc);
-  fclose(g);
-  ret = loop_umount(pc->buildplace);
-  if (ret)
-    {
-      log_printf(log_error,
-	  "Could not unmount '%s'",
-	  pc->buildplace);
-      return ret;
-    }
-  ret = rmdir(pc->buildplace);
-  if (ret)
-    {
-      log_printf(log_error,
-	  "Could not rmdir '%s'",
-	  pc->buildplace);
-      return ret;
-    }
-
-  /* TODO: --override-config support, --othermirror support etc.
-     There is no way to change distribution in this code-path...
-   */
-  char *script;
-  if (0>asprintf(&script,
-		 EXECUTE_HOOKS("H")
-		 //TODO: installaptlines if required.
-		 //TODO: "dpkg --purge $REMOVEPACKAGES\n"
-		 //TODO: add error code handling.
-		 "apt-get update -o Acquire::PDiffs=false\n"
-		 "apt-get -y %s -o DPkg::Options::=--force-confnew dist-upgrade\n"
-		 "apt-get install %s -y build-essential dpkg-dev apt aptitude pbuilder %s\n"
-		 //TODO: optionally autoclean aptcache
-		 EXECUTE_HOOKS("E")
-		 , pc->allow_untrusted?"--force-yes":""
-		 , pc->allow_untrusted?"--force-yes":""
-		 , pc->extrapackages?pc->extrapackages:""))
-    {
-      log_printf(log_error, "qemubuilder: out of memory.");
-      return 1;
-    }
-
-  ret = run_second_stage_script(1, script, pc, NULL, NULL);
-  free(script);
-  return ret;
+int cpbuilder_update(const struct pbuilderconfig *pc) {
+	int ret;
+
+	ret = do_fsck(pc->basepath);
+	if (ret) {
+		log_printf(log_error, "Failed fsck '%s'", pc->basepath);
+		return ret;
+	}
+
+	if (mkdir(pc->buildplace, 0777)) {
+		log_printf(log_error,
+				   "Could not create directory '%s': %s",
+				   pc->buildplace,
+				   strerror(errno));
+		return 1;
+	}
+
+	ret = loop_mount(pc->basepath, pc->buildplace);
+	if (ret) {
+		log_printf(log_error,
+				   "Could not mount '%s' on '%s'",
+				   pc->basepath,
+				   pc->buildplace);
+		return ret;
+	}
+	FILE *g = create_script(pc->buildplace, "pbuilder-run");
+	write_first_stage(g, pc);
+	fclose(g);
+	ret = loop_umount(pc->buildplace);
+	if (ret) {
+		log_printf(log_error, "Could not unmount '%s'", pc->buildplace);
+		return ret;
+	}
+	ret = rmdir(pc->buildplace);
+	if (ret) {
+		log_printf(log_error, "Could not rmdir '%s'", pc->buildplace);
+		return ret;
+	}
+
+	/* TODO: --override-config support, --othermirror support etc.
+	 * There is no way to change distribution in this code-path...
+	 */
+	char *script;
+	if (0 >
+		asprintf(
+			&script,
+			EXECUTE_HOOKS("H")
+			//TODO: installaptlines if required.
+			//TODO: "dpkg --purge $REMOVEPACKAGES\n"
+			//TODO: add error code handling.
+			"apt-get update -o Acquire::PDiffs=false\n"
+			"apt-get -y %s -o DPkg::Options::=--force-confnew dist-upgrade\n"
+			"apt-get install %s -y build-essential dpkg-dev apt aptitude pbuilder %s\n"
+			//TODO: optionally autoclean aptcache
+			EXECUTE_HOOKS("E"),
+			pc->allow_untrusted ? "--force-yes" : "",
+			pc->allow_untrusted ? "--force-yes" : "",
+			pc->extrapackages ? pc->extrapackages : "")) {
+		log_printf(log_error, "qemubuilder: out of memory.");
+		return 1;
+	}
+
+	ret = run_second_stage_script(1, script, pc, NULL, NULL);
+	free(script);
+	return ret;
 }
 
-int cpbuilder_help(void)
-{
-  printf("qemubuilder [operation] [options]\n"
-	 "operation:\n"
-	 " --build\n"
-	 " --create\n"
-	 " --update\n"
-	 " --login\n"
-	 " --execute\n"
-	 " --help\n"
-	 " --dumpconfig\n"
-	 "options:\n"
-	 " --basepath:\n"
-	 " --buildplace:\n"
-	 " --distribution:\n"
-	 " ... and other pbuilder options \n"
-	 );
-  return 0;
+int cpbuilder_help(void) {
+	printf("qemubuilder [operation] [options]\n"
+		   "operation:\n"
+		   " --build\n"
+		   " --create\n"
+		   " --update\n"
+		   " --login\n"
+		   " --execute\n"
+		   " --help\n"
+		   " --dumpconfig\n"
+		   "options:\n"
+		   " --basepath:\n"
+		   " --buildplace:\n"
+		   " --distribution:\n"
+		   " ... and other pbuilder options \n");
+	return 0;
 }
 
-int app_main(int ac, char** av)
-{
-  return parse_parameter(ac, av, "qemu");
+int app_main(int ac, char **av) {
+	return parse_parameter(ac, av, "qemu");
 }
diff --git a/qemuipsanitize.c b/qemuipsanitize.c
index 951ef67..65f6401 100644
--- a/qemuipsanitize.c
+++ b/qemuipsanitize.c
@@ -10,66 +10,60 @@
 #include "qemuipsanitize.h"
 #include "log.h"
 
-const char* sanitize_ipaddress(const char*addr)
-{
-  /* return 10.0.2.2 (qemu host OS address) if localhost */
-  const char* local_host="10.0.2.2";
-  struct hostent* h;
-  h=gethostbyname(addr);
-  if(h)
-    {
-      if (h->h_addr[0]==127)
-	{
-	  return local_host;
+const char *sanitize_ipaddress(const char *addr) {
+	/* return 10.0.2.2 (qemu host OS address) if localhost */
+	const char *local_host = "10.0.2.2";
+	struct hostent *h;
+	h = gethostbyname(addr);
+	if (h) {
+		if (h->h_addr[0] == 127) {
+			return local_host;
+		}
 	}
-    }
-  return addr;
+	return addr;
 }
 
-static char* r_offstr(regmatch_t m, const char*s)
-{
-  char*r;
-  if(m.rm_so!=-1)
-    {
-      r=strdup(s+m.rm_so);
-      r[m.rm_eo-m.rm_so]=0;
-      return r;
-    }
-  else return strdup("");
+static char *r_offstr(regmatch_t m, const char *s) {
+	char *r;
+	if (m.rm_so != -1) {
+		r = strdup(s + m.rm_so);
+		r[m.rm_eo - m.rm_so] = 0;
+		return r;
+	} else {
+		return strdup("");
+	}
 }
 
-char* sanitize_mirror(const char*addr)
-{
-  /* parse IP address string */
-  regex_t r;
-  int e;
-  regmatch_t m[5];
-  char*buf=NULL;
-  char* a;
-  char* b;
-  char* c;
-  char* d;
-  
-  if((e=regcomp(&r, "^([^:]*://)([^:/]*)(:[0-9]+)?(.*)$", REG_EXTENDED)))
-    {
-      /* error */
-      log_printf(log_error, "failed compiling regexp: %i", e);
-      return strdup(addr);
-    }
-  if((e=regexec(&r, addr, 5, m, 0)))
-    {
-      log_printf(log_error, "failed regexp match: %i", e);
-      return strdup(addr);
-    }
-  asprintf(&buf,"%s%s%s%s",
-	   a=r_offstr(m[1],addr),
-	   sanitize_ipaddress(b=r_offstr(m[2],addr)),
-	   c=r_offstr(m[3],addr),
-	   d=r_offstr(m[4],addr));
-  free(a);
-  free(b);
-  free(c);
-  free(d);
-  regfree(&r);
-  return buf;
+char *sanitize_mirror(const char *addr) {
+	/* parse IP address string */
+	regex_t r;
+	int e;
+	regmatch_t m[5];
+	char *buf = NULL;
+	char *a;
+	char *b;
+	char *c;
+	char *d;
+
+	if ((e = regcomp(&r, "^([^:]*://)([^:/]*)(:[0-9]+)?(.*)$", REG_EXTENDED))) {
+		/* error */
+		log_printf(log_error, "failed compiling regexp: %i", e);
+		return strdup(addr);
+	}
+	if ((e = regexec(&r, addr, 5, m, 0))) {
+		log_printf(log_error, "failed regexp match: %i", e);
+		return strdup(addr);
+	}
+	asprintf(&buf,
+			 "%s%s%s%s",
+			 a = r_offstr(m[1], addr),
+			 sanitize_ipaddress(b = r_offstr(m[2], addr)),
+			 c = r_offstr(m[3], addr),
+			 d = r_offstr(m[4], addr));
+	free(a);
+	free(b);
+	free(c);
+	free(d);
+	regfree(&r);
+	return buf;
 }
diff --git a/qemuipsanitize.h b/qemuipsanitize.h
index ebe7999..c449469 100644
--- a/qemuipsanitize.h
+++ b/qemuipsanitize.h
@@ -5,11 +5,10 @@
 
  */
 
-
 #ifndef __QEMUIPSANITIZE_H__
 #define __QEMUIPSANITIZE_H__
 
-const char* sanitize_ipaddress(const char*addr);
-char* sanitize_mirror(const char*addr);
+const char *sanitize_ipaddress(const char *addr);
+char *sanitize_mirror(const char *addr);
 
 #endif
diff --git a/test_cowbuilder.c b/test_cowbuilder.c
old mode 100755
new mode 100644
index f9a03cf..c7f9434
--- a/test_cowbuilder.c
+++ b/test_cowbuilder.c
@@ -9,34 +9,31 @@
 #include "parameter.h"
 
 // utility to check hardlink count of file.
-static int check_hardlink_count(const char* filename)
-{
-  struct stat buf;
-  stat(filename, &buf);
-  return buf.st_nlink;
+static int check_hardlink_count(const char *filename) {
+	struct stat buf;
+	stat(filename, &buf);
+	return buf.st_nlink;
 }
 
-int break_cowlink(const char* s);
+int break_cowlink(const char *s);
 
-void test_break_cowlink()
-{
-  char *temp = strdupa("/tmp/cowtestXXXXXX");
-  char *temp2 = strdupa("/tmp/cowtestXXXXXX");
-  close(mkstemp(temp));
-  close(mkstemp(temp2));
-  assert(check_hardlink_count(temp2) == 1);
-  assert(check_hardlink_count(temp) == 1);
-  assert(-1!=unlink(temp2));
-  assert(-1!=link(temp, temp2));
-  assert(check_hardlink_count(temp2) == 2);
-  assert(check_hardlink_count(temp) == 2);
-  break_cowlink(temp2);
-  assert(check_hardlink_count(temp2) == 1);
-  assert(check_hardlink_count(temp) == 1);
+void test_break_cowlink() {
+	char *temp = strdupa("/tmp/cowtestXXXXXX");
+	char *temp2 = strdupa("/tmp/cowtestXXXXXX");
+	close(mkstemp(temp));
+	close(mkstemp(temp2));
+	assert(check_hardlink_count(temp2) == 1);
+	assert(check_hardlink_count(temp) == 1);
+	assert(-1 != unlink(temp2));
+	assert(-1 != link(temp, temp2));
+	assert(check_hardlink_count(temp2) == 2);
+	assert(check_hardlink_count(temp) == 2);
+	break_cowlink(temp2);
+	assert(check_hardlink_count(temp2) == 1);
+	assert(check_hardlink_count(temp) == 1);
 }
 
-int main()
-{
-  test_break_cowlink();
-  return 0;
+int main() {
+	test_break_cowlink();
+	return 0;
 }
diff --git a/test_cowbuilder_util.c b/test_cowbuilder_util.c
old mode 100755
new mode 100644
index 5c3ec9b..e96fec8
--- a/test_cowbuilder_util.c
+++ b/test_cowbuilder_util.c
@@ -4,60 +4,59 @@
 #include <assert.h>
 #include <string.h>
 
-
 void test_check_mountpoint() {
-  // something is usually mounted under /.
-  if(0 == check_mountpoint("/")) {
-    fprintf(stderr, 
-	    "*******************************************************************************\n"
-	    "* '/' is not mounted, something is wrong with the system or the code\n"
-	    "*******************************************************************************\n");
-  }
-  // something is usually mounted under /run, but can't be sure.
-  // assert(1 == check_mountpoint("/run")); // commented out so that I don't break automatic builds.
-  // usually nothing is mounted under /tmp/nothing-is-mounted
-  fprintf(stderr, "The following message is expected:\n");
-  assert(0 == check_mountpoint("/tmp/nothing-is-mounted"));
+	// something is usually mounted under /.
+	if (0 == check_mountpoint("/")) {
+		fprintf(
+			stderr,
+			"*******************************************************************************\n"
+			"* '/' is not mounted, something is wrong with the system or the code\n"
+			"*******************************************************************************\n");
+	}
+	// something is usually mounted under /run, but can't be sure.
+	// assert(1 == check_mountpoint("/run")); // commented out so that I don't break automatic builds.
+	// usually nothing is mounted under /tmp/nothing-is-mounted
+	fprintf(stderr, "The following message is expected:\n");
+	assert(0 == check_mountpoint("/tmp/nothing-is-mounted"));
 }
 
 /** 
  * make sure strings are equal, and return true when they are. Just to
  * save myself from strcmp being a macro.
  */
-int verify_string_equal(const char* a, const char* b) {
-  return !strcmp(a, b);
+int verify_string_equal(const char *a, const char *b) {
+	return !strcmp(a, b);
 }
 
 void test_canonicalize_doubleslash() {
-  char dest[256];
-  canonicalize_doubleslash("/no/double/slash", dest);
-  assert(verify_string_equal(dest, "/no/double/slash"));
-  canonicalize_doubleslash("/trailing/slash/", dest);
-  assert(verify_string_equal(dest, "/trailing/slash/"));
-  canonicalize_doubleslash("//starting/double/slash/", dest);
-  assert(verify_string_equal(dest, "/starting/double/slash/"));
-  canonicalize_doubleslash("/double//slash", dest);
-  assert(verify_string_equal(dest, "/double/slash"));
-  canonicalize_doubleslash("/more//double//slash", dest);
-  assert(verify_string_equal(dest, "/more/double/slash"));
-  canonicalize_doubleslash("no/starting/slash//", dest);
-  assert(verify_string_equal(dest, "no/starting/slash/"));
-  canonicalize_doubleslash("///", dest);
-  assert(verify_string_equal(dest, "/"));
-
-  const char* test_buffer_overrun = "/some/string";
-  strcpy(dest,                      "-some-string+g");
-  canonicalize_doubleslash(test_buffer_overrun, dest);
-  assert(verify_string_equal(dest, "/some/string"));
-  assert(strlen(dest) == 12);
-  assert(dest[12] == 0);
-  assert(dest[13] == 'g');
+	char dest[256];
+	canonicalize_doubleslash("/no/double/slash", dest);
+	assert(verify_string_equal(dest, "/no/double/slash"));
+	canonicalize_doubleslash("/trailing/slash/", dest);
+	assert(verify_string_equal(dest, "/trailing/slash/"));
+	canonicalize_doubleslash("//starting/double/slash/", dest);
+	assert(verify_string_equal(dest, "/starting/double/slash/"));
+	canonicalize_doubleslash("/double//slash", dest);
+	assert(verify_string_equal(dest, "/double/slash"));
+	canonicalize_doubleslash("/more//double//slash", dest);
+	assert(verify_string_equal(dest, "/more/double/slash"));
+	canonicalize_doubleslash("no/starting/slash//", dest);
+	assert(verify_string_equal(dest, "no/starting/slash/"));
+	canonicalize_doubleslash("///", dest);
+	assert(verify_string_equal(dest, "/"));
+
+	const char *test_buffer_overrun = "/some/string";
+	strcpy(dest, "-some-string+g");
+	canonicalize_doubleslash(test_buffer_overrun, dest);
+	assert(verify_string_equal(dest, "/some/string"));
+	assert(strlen(dest) == 12);
+	assert(dest[12] == 0);
+	assert(dest[13] == 'g');
 }
 
-int main()
-{
-  test_check_mountpoint();
-  test_canonicalize_doubleslash();
+int main() {
+	test_check_mountpoint();
+	test_canonicalize_doubleslash();
 
-  return 0;
+	return 0;
 }
diff --git a/test_file.c b/test_file.c
old mode 100755
new mode 100644
index e60971a..fe59dea
--- a/test_file.c
+++ b/test_file.c
@@ -8,63 +8,50 @@
 #include "file.h"
 #include "parameter.h"
 
-void test_copy_file()
-{
-  char* temp=strdupa("/tmp/testfileXXXXXX");
-  mkstemp(temp);
-  assert(copy_file("/proc/mounts", temp)==0);
-  assert(forkexeclp("diff", "diff", "-u", "/proc/mounts", 
-		    temp, NULL)==0);
-  assert(copy_file("/proc/mounts", "/dev/path/does/not/exist")==-1);
+void test_copy_file() {
+	char *temp = strdupa("/tmp/testfileXXXXXX");
+	mkstemp(temp);
+	assert(copy_file("/proc/mounts", temp) == 0);
+	assert(forkexeclp("diff", "diff", "-u", "/proc/mounts", temp, NULL) == 0);
+	assert(copy_file("/proc/mounts", "/dev/path/does/not/exist") == -1);
 }
 
-void test_create_sparse_file()
-{
-  char* temp=strdupa("/tmp/sparseXXXXXX");
-  mkstemp(temp);
-  assert(create_sparse_file(temp,18UL*1UL<<30UL)==0);
+void test_create_sparse_file() {
+	char *temp = strdupa("/tmp/sparseXXXXXX");
+	mkstemp(temp);
+	assert(create_sparse_file(temp, 18UL * 1UL << 30UL) == 0);
 }
 
-void test_fail_create_sparse_file()
-{
-  assert(create_sparse_file("/tmp/nonexisting/file/path/here",18UL*1UL<<30UL)==1);
+void test_fail_create_sparse_file() {
+	assert(create_sparse_file("/tmp/nonexisting/file/path/here",
+							  18UL * 1UL << 30UL) == 1);
 }
 
-int test_mknod_inside_chroot()
-{
-  /* if you are running this in normal user, or running through 
-     fakeroot, you would (probably) get this */
-  if (getuid()!=0 || 
-      (getenv("FAKEROOTKEY") && strcmp(getenv("FAKEROOTKEY"),"")))
-    {
-      assert(mknod_inside_chroot("/root", "/dev", 
-				 S_IFCHR, makedev(204, 64))
-	     == -1);
-    }
-  else 
-    {
-      /* if you are running this as root, 
-	 this would be the tested codepath.
-      */
-      struct stat s;
-      umask(S_IWOTH);
-      unlink("/root/dev5");
-      assert(mknod_inside_chroot("/root", 
-				 "/dev5", 
-				 S_IFCHR | 0660, 
-				 makedev(204, 64))
-	     == 0);
-      assert(stat("/root/dev5", &s)==0);
-      assert(S_ISCHR(s.st_mode));
-    }
-  return 0;
+int test_mknod_inside_chroot() {
+	/* if you are running this in normal user, or running through
+	 * fakeroot, you would (probably) get this */
+	if (getuid() != 0 ||
+		(getenv("FAKEROOTKEY") && strcmp(getenv("FAKEROOTKEY"), ""))) {
+		assert(mknod_inside_chroot(
+				   "/root", "/dev", S_IFCHR, makedev(204, 64)) == -1);
+	} else {
+		/* if you are running this as root,
+		 * this would be the tested codepath. */
+		struct stat s;
+		umask(S_IWOTH);
+		unlink("/root/dev5");
+		assert(mknod_inside_chroot(
+				   "/root", "/dev5", S_IFCHR | 0660, makedev(204, 64)) == 0);
+		assert(stat("/root/dev5", &s) == 0);
+		assert(S_ISCHR(s.st_mode));
+	}
+	return 0;
 }
 
-int main() 
-{
-  test_mknod_inside_chroot();
-  test_copy_file();
-  test_create_sparse_file();
-  test_fail_create_sparse_file();
-  return 0;
+int main() {
+	test_mknod_inside_chroot();
+	test_copy_file();
+	test_create_sparse_file();
+	test_fail_create_sparse_file();
+	return 0;
 }
diff --git a/test_forkexec.c b/test_forkexec.c
old mode 100755
new mode 100644
index 0aec386..2dd8050
--- a/test_forkexec.c
+++ b/test_forkexec.c
@@ -5,41 +5,18 @@
 #include <assert.h>
 #include "parameter.h"
 
-int main()
-{
-  char *const successvp[] = 
-    {
-      "/bin/true", 
-      NULL
-    };
-  char *const failurevp[] = 
-    {
-      "/bin/false", 
-      NULL
-    };
-  char *const echovp[] = 
-    {
-      "/bin/echo", 
-      "Hello world",
-      NULL
-    };
-  
-  assert(forkexecvp(successvp) == 0);
-  assert(forkexecvp(failurevp) == 1);
-  assert(forkexecvp(echovp) == 0);
+int main() {
+	char *const successvp[] = {"/bin/true", NULL};
+	char *const failurevp[] = {"/bin/false", NULL};
+	char *const echovp[] = {"/bin/echo", "Hello world", NULL};
 
-  assert(forkexeclp("/bin/true",
-		    "/bin/true",
-		    NULL) == 0);
-  assert(forkexeclp("/bin/false",
-		    "/bin/false",
-		    NULL) == 1);
-  assert(forkexeclp("/bin/echo",
-		    "/bin/echo",
-		    "Hello World",
-		    NULL) == 0);
-  
-  return 0;
-}
+	assert(forkexecvp(successvp) == 0);
+	assert(forkexecvp(failurevp) == 1);
+	assert(forkexecvp(echovp) == 0);
 
+	assert(forkexeclp("/bin/true", "/bin/true", NULL) == 0);
+	assert(forkexeclp("/bin/false", "/bin/false", NULL) == 1);
+	assert(forkexeclp("/bin/echo", "/bin/echo", "Hello World", NULL) == 0);
 
+	return 0;
+}
diff --git a/test_ilistcreate.c b/test_ilistcreate.c
old mode 100755
new mode 100644
index 3c86ac5..91cde5e
--- a/test_ilistcreate.c
+++ b/test_ilistcreate.c
@@ -8,10 +8,9 @@
 #include <assert.h>
 #include "ilist.h"
 
-const char* ilist_PRGNAME="testcode";
+const char *ilist_PRGNAME = "testcode";
 
-int main()
-{
-  ilist_outofmemory("hello world\n");
-  return 0;
+int main() {
+	ilist_outofmemory("hello world\n");
+	return 0;
 }
diff --git a/test_parameter.c b/test_parameter.c
old mode 100755
new mode 100644
index dded519..a8cb75b
--- a/test_parameter.c
+++ b/test_parameter.c
@@ -6,39 +6,32 @@
 /*
    Mock functions
  */
-int cpbuilder_check_config(const struct pbuilderconfig* pc)
-{
-  return 0;
+int cpbuilder_check_config(const struct pbuilderconfig *pc) {
+	return 0;
 }
 
-int cpbuilder_build(const struct pbuilderconfig* pc, const char* dscfile)
-{
-  return 0;
+int cpbuilder_build(const struct pbuilderconfig *pc, const char *dscfile) {
+	return 0;
 }
 
-int cpbuilder_login(const struct pbuilderconfig* pc)
-{
-  return 0;
+int cpbuilder_login(const struct pbuilderconfig *pc) {
+	return 0;
 }
 
-int cpbuilder_execute(const struct pbuilderconfig* pc, char** av)
-{
-  return 0;
+int cpbuilder_execute(const struct pbuilderconfig *pc, char **av) {
+	return 0;
 }
 
-int cpbuilder_update(const struct pbuilderconfig* pc)
-{
-  return 0;
+int cpbuilder_update(const struct pbuilderconfig *pc) {
+	return 0;
 }
 
-int cpbuilder_help(void)
-{
-  return 0;
+int cpbuilder_help(void) {
+	return 0;
 }
 
-int cpbuilder_create(const struct pbuilderconfig* pc)
-{
-  return 0;
+int cpbuilder_create(const struct pbuilderconfig *pc) {
+	return 0;
 }
 /*
    end of mock functions
@@ -47,29 +40,27 @@ int cpbuilder_create(const struct pbuilderconfig* pc)
 /*
   Test size of Null Terminated String Array handling.
  */
-void test_size_of_ntarray()
-{
-  char* test[32];
-  test[0]="test1";
-  test[1]="test2";
-  test[2]=NULL;
-  assert(size_of_ntarray(test)==2);
+void test_size_of_ntarray() {
+	char *test[32];
+	test[0] = "test1";
+	test[1] = "test2";
+	test[2] = NULL;
+	assert(size_of_ntarray(test) == 2);
 }
 
 /*
   Test handling of quoted parameter string.
  */
-void test_load_quoted_config()
-{
-  pbuilderconfig pc;
-  assert(0 == load_config_file("tests/102_test_cowbuilder_debbuildopts.config", &pc));
-  assert(!strcmp("-j2 -I", pc.debbuildopts));
-  assert(!strcmp("/boot/vmlinuz-x.y.z", pc.kernel_image));
+void test_load_quoted_config() {
+	pbuilderconfig pc;
+	assert(0 == load_config_file(
+					"tests/102_test_cowbuilder_debbuildopts.config", &pc));
+	assert(!strcmp("-j2 -I", pc.debbuildopts));
+	assert(!strcmp("/boot/vmlinuz-x.y.z", pc.kernel_image));
 }
 
-int main()
-{
-  test_size_of_ntarray();
-  test_load_quoted_config();
-  return 0;
+int main() {
+	test_size_of_ntarray();
+	test_load_quoted_config();
+	return 0;
 }
diff --git a/test_qemuarch.c b/test_qemuarch.c
old mode 100755
new mode 100644
index 3a4d846..b230852
--- a/test_qemuarch.c
+++ b/test_qemuarch.c
@@ -13,57 +13,49 @@
 #include <unistd.h>
 #include "qemuarch.h"
 
-int test_get_host_dpkg_arch()
-{
-  /* just try to test x86_64 case */
+int test_get_host_dpkg_arch() {
+/* just try to test x86_64 case */
 #if defined(__x86_64__)
-# if defined(__ILP32__)
-  assert (!strcmp(get_host_dpkg_arch(), "x32"));
-# else
-  assert (!strcmp(get_host_dpkg_arch(), "amd64"));
-# endif
+#if defined(__ILP32__)
+	assert(!strcmp(get_host_dpkg_arch(), "x32"));
+#else
+	assert(!strcmp(get_host_dpkg_arch(), "amd64"));
+#endif
 #elif defined(__i386__)
-  assert ((!strcmp(get_host_dpkg_arch(), "i386")) || (!strcmp(get_host_dpkg_arch(), "lpia")));
+	assert((!strcmp(get_host_dpkg_arch(), "i386")) ||
+		   (!strcmp(get_host_dpkg_arch(), "lpia")));
 #else
-  printf("W: no check for this architecture\n");
+	printf("W: no check for this architecture\n");
 #endif
-  return 0;
+	return 0;
 }
 
-int test_qemu_create_arch_devices()
-{
-  char* temp=strdupa("/tmp/dancerXXXXXX");
-  temp=mkdtemp(temp);
-  printf("%s\n", temp);
+int test_qemu_create_arch_devices() {
+	char *temp = strdupa("/tmp/dancerXXXXXX");
+	temp = mkdtemp(temp);
+	printf("%s\n", temp);
 
-  /* if you are running this in normal user, or running through
-     fakeroot, you would (probably) get this */
-  if (getuid()!=0 ||
-      (getenv("FAKEROOTKEY") && strcmp(getenv("FAKEROOTKEY"),"")))
-    {
-      assert(qemu_create_arch_devices(temp, "x86_64")
-	     < 0);
-    }
-  else
-    {
-      /* if you are running this as root,
-	 this would be the tested codepath.
-      */
-      struct stat s;
-      umask(S_IWOTH);
-      assert(qemu_create_arch_devices(temp, "x86_64")
-	     == 0);
-      chdir(temp);
-      assert(stat("./dev/ttyAMA0", &s)==0);
-      assert(S_ISCHR(s.st_mode));
-    }
-  return 0;
+	/* if you are running this in normal user, or running through
+	 * fakeroot, you would (probably) get this */
+	if (getuid() != 0 ||
+		(getenv("FAKEROOTKEY") && strcmp(getenv("FAKEROOTKEY"), ""))) {
+		assert(qemu_create_arch_devices(temp, "x86_64") < 0);
+	} else {
+		/* if you are running this as root,
+		 * this would be the tested codepath. */
+		struct stat s;
+		umask(S_IWOTH);
+		assert(qemu_create_arch_devices(temp, "x86_64") == 0);
+		chdir(temp);
+		assert(stat("./dev/ttyAMA0", &s) == 0);
+		assert(S_ISCHR(s.st_mode));
+	}
+	return 0;
 }
 
-int main()
-{
-  int val=0;
-  val+=test_get_host_dpkg_arch();
-  val+=test_qemu_create_arch_devices();
-  return val;
+int main() {
+	int val = 0;
+	val += test_get_host_dpkg_arch();
+	val += test_qemu_create_arch_devices();
+	return val;
 }
diff --git a/test_qemuipsanitize.c b/test_qemuipsanitize.c
old mode 100755
new mode 100644
index 878a3c4..ea7880a
--- a/test_qemuipsanitize.c
+++ b/test_qemuipsanitize.c
@@ -8,42 +8,39 @@
 #include <string.h>
 #include "qemuipsanitize.h"
 
-
-#define assert_streq(a,b) \
-  assert_streq_f(__FILE__, __LINE__, a, b)
-
-void assert_streq_f(const char*f, int l, const char* a, const char* b)
-{
-  if(!strcmp(a,b))
-    return;
-  printf("%s:%i: [%s] and [%s] are different\n",
-	 f, l, a, b);
-  exit(1);
+#define assert_streq(a, b) assert_streq_f(__FILE__, __LINE__, a, b)
+
+void assert_streq_f(const char *f, int l, const char *a, const char *b) {
+	if (!strcmp(a, b)) {
+		return;
+	}
+	printf("%s:%i: [%s] and [%s] are different\n", f, l, a, b);
+	exit(1);
 }
 
-int test_sanitize_ipaddress()
-{
-  assert_streq("10.0.2.2", sanitize_ipaddress("localhost"));
-  assert_streq("10.0.2.2", sanitize_ipaddress("127.0.0.1"));
-  assert_streq("10.0.2.2", sanitize_ipaddress("127.0.0.2"));
-  assert_streq("www.netfort.gr.jp", sanitize_ipaddress("www.netfort.gr.jp"));
-  return 0;
+int test_sanitize_ipaddress() {
+	assert_streq("10.0.2.2", sanitize_ipaddress("localhost"));
+	assert_streq("10.0.2.2", sanitize_ipaddress("127.0.0.1"));
+	assert_streq("10.0.2.2", sanitize_ipaddress("127.0.0.2"));
+	assert_streq("www.netfort.gr.jp", sanitize_ipaddress("www.netfort.gr.jp"));
+	return 0;
 }
 
-int test_sanitize_mirror()
-{
-  assert_streq("http://www.netfort.gr.jp/debian", sanitize_mirror("http://www.netfort.gr.jp/debian"));
-  assert_streq("http://www.netfort.gr.jp:9999/debian", sanitize_mirror("http://www.netfort.gr.jp:9999/debian"));
-  assert_streq("http://10.0.2.2:9999/debian", sanitize_mirror("http://localhost:9999/debian"));
-  assert_streq("http://10.0.2.2/debian", sanitize_mirror("http://localhost/debian"));
-  return 0;
+int test_sanitize_mirror() {
+	assert_streq("http://www.netfort.gr.jp/debian",
+				 sanitize_mirror("http://www.netfort.gr.jp/debian"));
+	assert_streq("http://www.netfort.gr.jp:9999/debian",
+				 sanitize_mirror("http://www.netfort.gr.jp:9999/debian"));
+	assert_streq("http://10.0.2.2:9999/debian",
+				 sanitize_mirror("http://localhost:9999/debian"));
+	assert_streq("http://10.0.2.2/debian",
+				 sanitize_mirror("http://localhost/debian"));
+	return 0;
 }
 
-int main()
-{
-  int val=0;
-  val+=test_sanitize_ipaddress();
-  val+=test_sanitize_mirror();
-  return val;
+int main() {
+	int val = 0;
+	val += test_sanitize_ipaddress();
+	val += test_sanitize_mirror();
+	return val;
 }
-
diff --git a/tests/002_test_open.c b/tests/002_test_open.c
old mode 100755
new mode 100644
index d8c5289..aba3fdd
--- a/tests/002_test_open.c
+++ b/tests/002_test_open.c
@@ -4,26 +4,25 @@ open test */
 #include <unistd.h>
 #include <fcntl.h>
 
-void writeandclose(int a)
-{
-  write(a,"abc",3);
-  close(a);
+void writeandclose(int a) {
+	write(a, "abc", 3);
+	close(a);
 }
 
-int main(int argc, char** argv)
-{
-  /* test that the three args work. */
-  int a,b,c;
-  
-  if(argc < 4)
-    exit(1);
-  
-  a=open(argv[1], O_RDONLY);
-  b=open(argv[2], O_WRONLY);
-  c=open(argv[3], O_RDWR);
-  writeandclose(a);
-  writeandclose(b);
-  writeandclose(c);
+int main(int argc, char **argv) {
+	/* test that the three args work. */
+	int a, b, c;
 
-  return 0;
+	if (argc < 4) {
+		exit(1);
+	}
+
+	a = open(argv[1], O_RDONLY);
+	b = open(argv[2], O_WRONLY);
+	c = open(argv[3], O_RDWR);
+	writeandclose(a);
+	writeandclose(b);
+	writeandclose(c);
+
+	return 0;
 }
diff --git a/tests/003_test_fopen.c b/tests/003_test_fopen.c
old mode 100755
new mode 100644
index 08386a1..9f4dd30
--- a/tests/003_test_fopen.c
+++ b/tests/003_test_fopen.c
@@ -3,20 +3,19 @@ fopen test */
 #include <stdio.h>
 #include <stdlib.h>
 
-void writeandclose(FILE* a)
-{
-  fprintf(a,"abc\n");
-  fclose(a);
+void writeandclose(FILE *a) {
+	fprintf(a, "abc\n");
+	fclose(a);
 }
 
-int main(int argc, char** argv)
-{
-  /* test that the three args work. */
-  if(argc < 4)
-    exit(1);
-  
-  writeandclose(fopen(argv[1], "r"));
-  writeandclose(fopen(argv[2], "w"));
-  writeandclose(fopen(argv[3], "a"));
-  return 0;
+int main(int argc, char **argv) {
+	/* test that the three args work. */
+	if (argc < 4) {
+		exit(1);
+	}
+
+	writeandclose(fopen(argv[1], "r"));
+	writeandclose(fopen(argv[2], "w"));
+	writeandclose(fopen(argv[3], "a"));
+	return 0;
 }
diff --git a/tests/004_test_fopen64.c b/tests/004_test_fopen64.c
old mode 100755
new mode 100644
index 08386a1..9f4dd30
--- a/tests/004_test_fopen64.c
+++ b/tests/004_test_fopen64.c
@@ -3,20 +3,19 @@ fopen test */
 #include <stdio.h>
 #include <stdlib.h>
 
-void writeandclose(FILE* a)
-{
-  fprintf(a,"abc\n");
-  fclose(a);
+void writeandclose(FILE *a) {
+	fprintf(a, "abc\n");
+	fclose(a);
 }
 
-int main(int argc, char** argv)
-{
-  /* test that the three args work. */
-  if(argc < 4)
-    exit(1);
-  
-  writeandclose(fopen(argv[1], "r"));
-  writeandclose(fopen(argv[2], "w"));
-  writeandclose(fopen(argv[3], "a"));
-  return 0;
+int main(int argc, char **argv) {
+	/* test that the three args work. */
+	if (argc < 4) {
+		exit(1);
+	}
+
+	writeandclose(fopen(argv[1], "r"));
+	writeandclose(fopen(argv[2], "w"));
+	writeandclose(fopen(argv[3], "a"));
+	return 0;
 }
diff --git a/tests/012_test_chown.c b/tests/012_test_chown.c
old mode 100755
new mode 100644
index 3678d38..9489430
--- a/tests/012_test_chown.c
+++ b/tests/012_test_chown.c
@@ -13,28 +13,28 @@ Used by 012 and 020 tests.
 //#include <sys/stat.h>
 //#include <fcntl.h>
 
-int main(int argc, char** argv)
-{
-  uid_t uid=getuid();
-  gid_t gid;
-  //int fid;
-  
-  /* test that four args are given. */
-  if(argc < 5)
-    exit(1);
-  
-  gid=atoi(argv[1]);		/* get the gid to change to */
-  
-  printf("chown %s\n", argv[2]);
-  chown(argv[2], uid, gid);
-  
-  //fid=open(argv[3], O_RDONLY);
-  //if (fchown(fid, uid, gid)!=-1)	/* this func will fail */
-  //  return 1;
-  //close(fid);
-
-  printf("lchown %s\n", argv[4]);
-  lchown(argv[4], uid, gid);
-
-  return 0;
+int main(int argc, char **argv) {
+	uid_t uid = getuid();
+	gid_t gid;
+	//int fid;
+
+	/* test that four args are given. */
+	if (argc < 5) {
+		exit(1);
+	}
+
+	gid = atoi(argv[1]); /* get the gid to change to */
+
+	printf("chown %s\n", argv[2]);
+	chown(argv[2], uid, gid);
+
+	//fid=open(argv[3], O_RDONLY);
+	//if (fchown(fid, uid, gid)!=-1)	/* this func will fail */
+	//  return 1;
+	//close(fid);
+
+	printf("lchown %s\n", argv[4]);
+	lchown(argv[4], uid, gid);
+
+	return 0;
 }
diff --git a/tests/013_test_chmod.c b/tests/013_test_chmod.c
old mode 100755
new mode 100644
index 04e5cdc..c2f0511
--- a/tests/013_test_chmod.c
+++ b/tests/013_test_chmod.c
@@ -8,19 +8,19 @@
 #include <fcntl.h>
 
 /* chmod to 0400 */
-int main(int argc, char** argv)
-{
-  int fid;
-  
-  /* test that the two args work. */
-  if(argc < 3)
-    exit(1);
-  
-  chmod(argv[1], 0400);
-  fid=open(argv[2], O_RDONLY);
-  //if (fchmod(fid, 0400)!=-1)
-  //  return 1;			/* this func will fail */
-  close(fid);
-	
-  return 0;
+int main(int argc, char **argv) {
+	int fid;
+
+	/* test that the two args work. */
+	if (argc < 3) {
+		exit(1);
+	}
+
+	chmod(argv[1], 0400);
+	fid = open(argv[2], O_RDONLY);
+	//if (fchmod(fid, 0400)!=-1)
+	//  return 1;			/* this func will fail */
+	close(fid);
+
+	return 0;
 }
diff --git a/tests/015_test_ilistdelete.c b/tests/015_test_ilistdelete.c
old mode 100755
new mode 100644
index 567c983..cf37c27
--- a/tests/015_test_ilistdelete.c
+++ b/tests/015_test_ilistdelete.c
@@ -25,57 +25,46 @@
 
    The first open should fail, since .ilist doesn't exist.
 */
-static void* openclosetest(void*p)
-{
-  int fd;
-  if (-1==(fd=open("a", O_WRONLY)))
-    {
-      perror("open");
-      return "success";
-    }
-  
-  if (5 !=write(fd, "test\n", 5))
-    {
-      perror("write");
-      return NULL;
-    }
-  if (-1==close(fd))
-    {
-      perror("close");
-      return NULL;
-    }
-  return NULL;
+static void *openclosetest(void *p) {
+	int fd;
+	if (-1 == (fd = open("a", O_WRONLY))) {
+		perror("open");
+		return "success";
+	}
+
+	if (5 != write(fd, "test\n", 5)) {
+		perror("write");
+		return NULL;
+	}
+	if (-1 == close(fd)) {
+		perror("close");
+		return NULL;
+	}
+	return NULL;
 }
 
-int main(int argc, char** argv)
-{
-  /* remove ilist file */
-  void *ret;
-  pthread_t pth;
-  
-  unlink(".ilist");
+int main(int argc, char **argv) {
+	/* remove ilist file */
+	void *ret;
+	pthread_t pth;
 
+	unlink(".ilist");
 
-  /* test behavior when threads exist */
+	/* test behavior when threads exist */
 
-  pthread_create(&pth, NULL, openclosetest, NULL);
-  if (!openclosetest(NULL))
-    {
-      fprintf(stderr, "parent thread failure\n");
-      return 1;
-    }
-  if (!pthread_join(pth, &ret))
-    {
-      if (!ret)
-	{
-	  fprintf(stderr, "child thread failure\n");
-	  return 1;
+	pthread_create(&pth, NULL, openclosetest, NULL);
+	if (!openclosetest(NULL)) {
+		fprintf(stderr, "parent thread failure\n");
+		return 1;
+	}
+	if (!pthread_join(pth, &ret)) {
+		if (!ret) {
+			fprintf(stderr, "child thread failure\n");
+			return 1;
+		}
+	} else {
+		perror("pthread_join");
+		return 1;
 	}
-    }
-  else
-    {
-      perror("pthread_join");
-      return 1;
-    }
-  return 0;
+	return 0;
 }
diff --git a/tests/016_memleakcheck.c b/tests/016_memleakcheck.c
old mode 100755
new mode 100644
index 0fc37e1..e141a41
--- a/tests/016_memleakcheck.c
+++ b/tests/016_memleakcheck.c
@@ -20,93 +20,80 @@
 #include <sys/mman.h>
 #include <mcheck.h>
 
-int dump_procmap()
-{
-  FILE*f;
-  int c;
-  char *p;
+int dump_procmap() {
+	FILE *f;
+	int c;
+	char *p;
 
-  if (0>asprintf(&p, "/proc/%jd/maps", (intmax_t) getpid()))
-    {
-      perror("asprintf");
-      return 1;
-    }
+	if (0 > asprintf(&p, "/proc/%jd/maps", (intmax_t)getpid())) {
+		perror("asprintf");
+		return 1;
+	}
 
-  if (!(f=fopen(p, "r")))
-    {
-      perror("fopen");
-      free(p);
-      return 1;
-    }
-  while (EOF!=(c=fgetc(f)))
-    fputc(c,stdout);
-  fclose(f);
-  free(p);
-  return 0;
+	if (!(f = fopen(p, "r"))) {
+		perror("fopen");
+		free(p);
+		return 1;
+	}
+	while (EOF != (c = fgetc(f))) {
+		fputc(c, stdout);
+	}
+	fclose(f);
+	free(p);
+	return 0;
 }
 
-int main(int argc, char** argv)
-{
-  int fd;
-  int i;
-  FILE* f;
-
-  /* Initialize */
-  if (-1==(fd=open("1/a", O_WRONLY)))
-    {
-      perror("open");
-      return 1;
-    }
-
-  if (5 !=write(fd, "test\n", 5))
-    {
-      perror("write");
-      return 1;
-    }
-  if (-1==close(fd))
-    {
-      perror("close");
-      return 1;
-    }
-
-  /* try open/close 100 times. */
-  mtrace();
+int main(int argc, char **argv) {
+	int fd;
+	int i;
+	FILE *f;
 
-  for (i=0; i<100; ++i)
-    {
-      if (-1==(fd=open("1/b", O_WRONLY)))
-	{
-	  perror("open");
-	  return 1;
+	/* Initialize */
+	if (-1 == (fd = open("1/a", O_WRONLY))) {
+		perror("open");
+		return 1;
 	}
 
-      if (5 !=write(fd, "test\n", 5))
-	{
-	  perror("write");
-	  return 1;
+	if (5 != write(fd, "test\n", 5)) {
+		perror("write");
+		return 1;
 	}
-      if (-1==close(fd))
-	{
-	  perror("close");
-	  return 1;
+	if (-1 == close(fd)) {
+		perror("close");
+		return 1;
 	}
 
-      if (!(f=fopen("1/c", "w")))
-	{
-	  return 1;
-	}
+	/* try open/close 100 times. */
+	mtrace();
 
-      if (5 !=fwrite("test\n", 1, 5, f))
-	{
-	  return 1;
-	}
-      if (EOF==fclose(f))
-	{
-	  return 1;
+	for (i = 0; i < 100; ++i) {
+		if (-1 == (fd = open("1/b", O_WRONLY))) {
+			perror("open");
+			return 1;
+		}
+
+		if (5 != write(fd, "test\n", 5)) {
+			perror("write");
+			return 1;
+		}
+		if (-1 == close(fd)) {
+			perror("close");
+			return 1;
+		}
+
+		if (!(f = fopen("1/c", "w"))) {
+			return 1;
+		}
+
+		if (5 != fwrite("test\n", 1, 5, f)) {
+			return 1;
+		}
+		if (EOF == fclose(f)) {
+			return 1;
+		}
 	}
-    }
 
-  muntrace();
+	muntrace();
 
-  return dump_procmap();
+	return dump_procmap();
 }
diff --git a/tests/018_testcxx.cc b/tests/018_testcxx.cc
old mode 100755
new mode 100644
index 44e3e93..b4bd55f
--- a/tests/018_testcxx.cc
+++ b/tests/018_testcxx.cc
@@ -1,7 +1,6 @@
 #include <fstream>
 
-int main(int argc, char** argv)
-{
-  std::ofstream ofs("1/a");
-  ofs << "Hello world\n";
+int main(int argc, char **argv) {
+	std::ofstream ofs("1/a");
+	ofs << "Hello world\n";
 }
diff --git a/tests/021_test_open.c b/tests/021_test_open.c
old mode 100755
new mode 100644
index 43dc032..655b32d
--- a/tests/021_test_open.c
+++ b/tests/021_test_open.c
@@ -13,15 +13,14 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 
-int main(int ac, const char** av)
-{
-  int fd1, fd2;
-  close(0);
-  fd1=open(av[1], O_RDONLY);
-  close(0);
-  fd2=open(av[1], O_RDONLY);
+int main(int ac, const char **av) {
+	int fd1, fd2;
+	close(0);
+	fd1 = open(av[1], O_RDONLY);
+	close(0);
+	fd2 = open(av[1], O_RDONLY);
+
+	printf("close(0)open(): try1: %i, try2: %i\n", fd1, fd2);
 
-  printf("close(0)open(): try1: %i, try2: %i\n", fd1, fd2);
-  
-  return fd1;
+	return fd1;
 }
diff --git a/tests/022_kernel_waitpid.c b/tests/022_kernel_waitpid.c
old mode 100755
new mode 100644
index 83a24cf..b15e6ed
--- a/tests/022_kernel_waitpid.c
+++ b/tests/022_kernel_waitpid.c
@@ -6,29 +6,26 @@
 #include <stdio.h>
 #include <unistd.h>
 
-int main()
-{
-  pid_t pid;
-  int status;
+int main() {
+	pid_t pid;
+	int status;
 
-  switch(pid=fork())
-    {
-    case 0:
-      execl("/bin/cp", "/bin/cp", "-a", "/tmp/test", "/tmp/test2", NULL);
-      exit (0);
+	switch (pid = fork()) {
+		case 0:
+			execl("/bin/cp", "/bin/cp", "-a", "/tmp/test", "/tmp/test2", NULL);
+			exit(0);
 
-    case -1:
-      perror("fork()");
-      exit (1);
+		case -1:
+			perror("fork()");
+			exit(1);
 
-    default:
-      sleep(1);
-      if(-1==waitpid(pid, &status, 0))
-	{
-	  perror("waitpid:cp");
-	  exit(2);
+		default:
+			sleep(1);
+			if (-1 == waitpid(pid, &status, 0)) {
+				perror("waitpid:cp");
+				exit(2);
+			}
+			printf("waitpid: %x\n", status);
+			exit(0);
 	}
-      printf("waitpid: %x\n", status);
-      exit (0);
-    }
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pbuilder/cowdancer.git



More information about the Pbuilder-maint mailing list