remove Utility.Mounts et al; moved to mountpoints package

This commit is contained in:
Joey Hess 2016-02-15 11:13:26 -04:00
parent 7aab9a0b23
commit 46fe686ba0
Failed to extract signature
6 changed files with 23 additions and 286 deletions

21
Utility/Mounts.hs Normal file
View file

@ -0,0 +1,21 @@
{- portability shim for System.MountPoints
-
- Copyright 2016 Joey Hess <id@joeyh.name>
-
- License: BSD-2-clause
-}
{-# LANGUAGE CPP #-}
{-# OPTIONS_GHC -fno-warn-tabs #-}
module Utility.Mounts (getMounts, Mntent(..)) where
import qualified System.MountPoints
import System.MountPoints (Mntent(..))
getMounts :: IO [Mntent]
#ifndef __ANDROID__
getMounts = System.MountPoints.getMounts
#else
getMounts = System.MountPoints.getProcMounts
#endif

View file

@ -1,97 +0,0 @@
{- Interface to mtab (and fstab)
-
- Deprecated; moving to mountpoints library on hackage.
-
- Derived from hsshellscript, originally written by
- Volker Wysk <hsss@volker-wysk.de>
-
- Modified to support BSD, Mac OS X, and Android by
- Joey Hess <id@joeyh.name>
-
- Licensed under the GNU LGPL version 2.1 or higher.
-
-}
{-# LANGUAGE ForeignFunctionInterface #-}
module Utility.Mounts (
Mntent(..),
getMounts
) where
#ifndef __ANDROID__
import Control.Monad
import Foreign
import Foreign.C
#include "libmounts.h"
#else
import Utility.Exception
import Data.Maybe
import Control.Applicative
#endif
import Prelude
{- This is a stripped down mntent, containing only
- fields available everywhere. -}
data Mntent = Mntent
{ mnt_fsname :: String
, mnt_dir :: FilePath
, mnt_type :: String
} deriving (Show, Eq, Ord)
#ifndef __ANDROID__
getMounts :: IO [Mntent]
getMounts = do
h <- c_mounts_start
when (h == nullPtr) $
throwErrno "getMounts"
mntent <- getmntent h []
_ <- c_mounts_end h
return mntent
where
getmntent h c = do
ptr <- c_mounts_next h
if (ptr == nullPtr)
then return $ reverse c
else do
mnt_fsname_str <- #{peek struct mntent, mnt_fsname} ptr >>= peekCString
mnt_dir_str <- #{peek struct mntent, mnt_dir} ptr >>= peekCString
mnt_type_str <- #{peek struct mntent, mnt_type} ptr >>= peekCString
let ent = Mntent
{ mnt_fsname = mnt_fsname_str
, mnt_dir = mnt_dir_str
, mnt_type = mnt_type_str
}
getmntent h (ent:c)
{- Using unsafe imports because the C functions are belived to never block.
- Note that getmntinfo is called with MNT_NOWAIT to avoid possibly blocking;
- while getmntent only accesses a file in /etc (or /proc) that should not
- block. -}
foreign import ccall unsafe "libmounts.h mounts_start" c_mounts_start
:: IO (Ptr ())
foreign import ccall unsafe "libmounts.h mounts_next" c_mounts_next
:: Ptr () -> IO (Ptr ())
foreign import ccall unsafe "libmounts.h mounts_end" c_mounts_end
:: Ptr () -> IO CInt
#else
{- Android does not support getmntent (well, it's a no-op stub in Bionic).
-
- But, the linux kernel's /proc/mounts is available to be parsed.
-}
getMounts :: IO [Mntent]
getMounts = catchDefaultIO [] $
mapMaybe (parse . words) . lines <$> readFile "/proc/mounts"
where
parse (device:mountpoint:fstype:_rest) = Just $ Mntent
{ mnt_fsname = device
, mnt_dir = mountpoint
, mnt_type = fstype
}
parse _ = Nothing
#endif

View file

@ -1,103 +0,0 @@
/* mounted filesystems, C mini-library
*
* Copyright (c) 1980, 1989, 1993, 1994
* The Regents of the University of California. All rights reserved.
* Copyright (c) 2001
* David Rufino <daverufino@btinternet.com>
* Copyright 2012
* Joey Hess <id@joeyh.name>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include "libmounts.h"
#ifdef GETMNTENT
/* direct passthrough the getmntent */
FILE *mounts_start (void) {
return setmntent("/etc/mtab", "r");
}
int mounts_end (FILE *fp) {
return endmntent(fp);
}
struct mntent *mounts_next (FILE *fp) {
return getmntent(fp);
}
#endif
#ifdef GETMNTINFO
/* getmntent emulation using getmntinfo */
FILE *mounts_start (void) {
return ((FILE *)0x1); /* dummy non-NULL FILE pointer, not used */
}
int mounts_end (FILE *fp) {
return 1;
}
static struct mntent _mntent;
static struct mntent *statfs_to_mntent (struct statfs *mntbuf) {
_mntent.mnt_fsname = mntbuf->f_mntfromname;
_mntent.mnt_dir = mntbuf->f_mntonname;
_mntent.mnt_type = mntbuf->f_fstypename;
_mntent.mnt_opts = NULL;
_mntent.mnt_freq = 0;
_mntent.mnt_passno = 0;
return (&_mntent);
}
static int pos = -1;
static int mntsize = -1;
struct statfs *mntbuf = NULL;
struct mntent *mounts_next (FILE *fp) {
if (pos == -1 || mntsize == -1)
mntsize = getmntinfo(&mntbuf, MNT_NOWAIT);
++pos;
if (pos == mntsize) {
pos = mntsize = -1;
mntbuf = NULL;
return NULL;
}
return (statfs_to_mntent(&mntbuf[pos]));
}
#endif
#ifdef UNKNOWN
/* dummy, do-nothing version */
FILE *mounts_start (void) {
return ((FILE *)0x1);
}
int mounts_end (FILE *fp) {
return 1;
}
struct mntent *mounts_next (FILE *fp) {
return NULL;
}
#endif

View file

@ -1,38 +0,0 @@
/* Include appropriate headers for the OS, and define what will be used. */
#if defined (__FreeBSD__) || defined (__APPLE__)
# include <sys/param.h>
# include <sys/ucred.h>
# include <sys/mount.h>
# define GETMNTINFO
#else
#if defined __ANDROID__
/* Android is handled by the Haskell code, not here. */
# define UNKNOWN
#else
#if defined (__linux__) || defined (__FreeBSD_kernel__)
/* Linux or Debian kFreeBSD */
#include <mntent.h>
# define GETMNTENT
#else
# warning mounts listing code not available for this OS
# define UNKNOWN
#endif
#endif
#endif
#include <stdio.h>
#ifndef GETMNTENT
struct mntent {
char *mnt_fsname;
char *mnt_dir;
char *mnt_type;
char *mnt_opts; /* not filled in */
int mnt_freq; /* not filled in */
int mnt_passno; /* not filled in */
};
#endif
FILE *mounts_start (void);
int mounts_end (FILE *fp);
struct mntent *mounts_next (FILE *fp);

45
debian/copyright vendored
View file

@ -35,51 +35,11 @@ Copyright: 2007 Henrik Nyh <http://henrik.nyh.se/>
License: other License: other
Free to modify and redistribute with due credit, and obviously free to use. Free to modify and redistribute with due credit, and obviously free to use.
Files: Utility/Mounts.hsc
Copyright: Volker Wysk <hsss@volker-wysk.de>
License: LGPL-2.1+
Files: Annex/DirHashes.hs Files: Annex/DirHashes.hs
Copyright: 2001 Ian Lynagh Copyright: 2001 Ian Lynagh
2010-2015 Joey Hess <id@joeyh.name> 2010-2015 Joey Hess <id@joeyh.name>
License: GPL-3+ License: GPL-3+
Files: Utility/libmounts.c
Copyright: 1980, 1989, 1993, 1994 The Regents of the University of California
2001 David Rufino <daverufino@btinternet.com>
2012 Joey Hess <id@joeyh.name>
License: BSD-3-clause
* Copyright (c) 1980, 1989, 1993, 1994
* The Regents of the University of California. All rights reserved.
* Copyright (c) 2001
* David Rufino <daverufino@btinternet.com>
* Copyright 2012
* Joey Hess <id@joeyh.name>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
Files: static/jquery* Files: static/jquery*
Copyright: © 2005-2011 by John Resig, Branden Aaron & Jörn Zaefferer Copyright: © 2005-2011 by John Resig, Branden Aaron & Jörn Zaefferer
© 2011 The Dojo Foundation © 2011 The Dojo Foundation
@ -135,11 +95,6 @@ License: GPL-3+
this package's source, or in /usr/share/common-licenses/GPL-3 on this package's source, or in /usr/share/common-licenses/GPL-3 on
Debian systems. Debian systems.
License: LGPL-2.1+
The full text of version 2.1 of the LGPL is distributed as doc/license/LGPL
in this package's source, or in /usr/share/common-licenses/LGPL-2.1
on Debian systems.
License: BSD-2-clause License: BSD-2-clause
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions modification, are permitted provided that the following conditions

View file

@ -144,9 +144,8 @@ Executable git-annex
else else
Build-Depends: unix Build-Depends: unix
-- Need to list these because they're generated from .hsc files. -- Need to list these because they're generated from .hsc files.
Other-Modules: Utility.Touch Utility.Mounts Other-Modules: Utility.Touch
Include-Dirs: Utility Include-Dirs: Utility
C-Sources: Utility/libdiskfree.c Utility/libmounts.c
CPP-Options: -DWITH_CLIBS CPP-Options: -DWITH_CLIBS
if flag(TestSuite) if flag(TestSuite)
@ -163,7 +162,7 @@ Executable git-annex
CPP-Options: -DWITH_WEBDAV CPP-Options: -DWITH_WEBDAV
if flag(Assistant) && ! os(solaris) if flag(Assistant) && ! os(solaris)
Build-Depends: dns Build-Depends: dns, mountpoints
CPP-Options: -DWITH_ASSISTANT CPP-Options: -DWITH_ASSISTANT
if flag(Assistant) if flag(Assistant)