#include <mntent.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "cowbuilder_util.h"
#include "log.h"

/**
 * @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;
}

/**
 * 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;
	}
      prev = dest[j++] = buildplace[i];
    }
  dest[j] = '\0';
}

