Subscribe to our RSS news feed
AAPL 275.62 (0.56)

ReiserFS Support (Read-only for now)
*
  • Group: Members
  • Posts: 35
  • Joined: 24-February 06
  • Member No.: 25,092
I'm just looking at what BSD are doing to port ReiserFS support to BSD. The source is extremely small so I'm hoping that it can be ported to OS X. I for one have a few Linux drives which I cannot read from within OSx86 so this is something I'm desparate for.

I'll have a stab at the myself but I'm not a C developer, although I can do little bits so it may take me a long time and be scrappy/wrong.

I have the docs from developer.apple about porting *UNIX* apps to OS X (yes, yes I know) so I'm hoping most of the principles still apply to BSD.

The required source (unless I'm wrong), is:

mount_reiserfs.c
CODE
/*-
* Copyright (c) 2005 Jean-S?bastien P?dron
* All rights reserved.
*
* 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.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
*
* $FreeBSD: src/sbin/mount_reiserfs/mount_reiserfs.c,v 1.3 2005/06/10 09:51:42 delphij Exp $
*/

#include <sys/param.h>
#include <sys/mount.h>
#include <sys/uio.h>

#include <err.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sysexits.h>
#include <unistd.h>

#include "mntopts.h"

struct mntopt mopts[] = {
        MOPT_STDOPTS,
        MOPT_END
};

void    usage(void);

int
main(int argc, char *argv[])
{
        struct iovec *iov;
        int ch, mntflags, iovlen;
        char *dev, *dir, mntpath[MAXPATHLEN];

        mntflags = 0;
        while ((ch = getopt(argc, argv, "o:")) != -1) {
                switch(ch) {
                case 'o':
                        getmntopts(optarg, mopts, &mntflags, 0);
                        break;
                case '?':
                default:
                        usage();
                }
        }
        argc -= optind;
        argv += optind;

        if (argc != 2)
                usage();

        dev = argv[0];
        dir = argv[1];

        /*
         * Resolve the mountpoint with realpath(3) and remove unnecessary
         * slashes from the devicename if there are any.
         */
        (void)checkpath(dir, mntpath);
        (void)rmslashes(dev, dev);

        /* Read-only support for now */
        mntflags |= MNT_RDONLY;

        /* Prepare the options vector for nmount(). build_iovec() is declared
         * in mntopts.h. */
        iov = NULL;
        iovlen = 0;
        build_iovec(&iov, &iovlen, "fstype", "reiserfs", -1);
        build_iovec(&iov, &iovlen, "fspath", mntpath, -1);
        build_iovec(&iov, &iovlen, "from", dev, -1);

        if (nmount(iov, iovlen, mntflags) < 0)
                err(EX_OSERR, "%s", dev);

        exit(0);
}

void
usage(void)
{
        fprintf(stderr,
            "usage: mount_reiserfs [-o options] special node\n");
        exit(EX_USAGE);
}


mntopts.h
CODE
/*      $NetBSD: mntopts.h,v 1.7 2006/02/12 01:32:06 chs Exp $  */

/*-
* Copyright (c) 1994
*      The Regents of the University of California.  All rights reserved.
*
* 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.
*
*      @(#)mntopts.h   8.7 (Berkeley) 3/29/95
*/
#ifndef _MNTOPTS_H_
#define _MNTOPTS_H_

struct mntopt {
        const char *m_option;   /* option name */
        int m_inverse;          /* if a negative option, eg "dev" */
        int m_flag;             /* bit to set, eg. MNT_RDONLY */
        int m_altloc;           /* 1 => set bit in altflags */
};

/* User-visible MNT_ flags. */
#define MOPT_ASYNC              { "async",      0, MNT_ASYNC, 0 }
#define MOPT_NOCOREDUMP         { "coredump",   1, MNT_NOCOREDUMP, 0 }
#define MOPT_NODEV              { "dev",        1, MNT_NODEV, 0 }
#define MOPT_NODEVMTIME         { "devmtime",   1, MNT_NODEVMTIME, 0 }
#define MOPT_NOEXEC             { "exec",       1, MNT_NOEXEC, 0 }
#define MOPT_NOSUID             { "suid",       1, MNT_NOSUID, 0 }
#define MOPT_RDONLY             { "rdonly",     0, MNT_RDONLY, 0 }
#define MOPT_SYNC               { "sync",       0, MNT_SYNCHRONOUS, 0 }
#define MOPT_UNION              { "union",      0, MNT_UNION, 0 }
#define MOPT_USERQUOTA          { "userquota",  0, 0, 0 }
#define MOPT_GROUPQUOTA         { "groupquota", 0, 0, 0 }
#define MOPT_NOATIME            { "atime",      1, MNT_NOATIME, 0 }
#define MOPT_SYMPERM            { "symperm",    0, MNT_SYMPERM, 0 }
#define MOPT_SOFTDEP            { "softdep",    0, MNT_SOFTDEP, 0 }
#define MOPT_IGNORE             { "hidden",     0, MNT_IGNORE, 0 }

/* Control flags. */
#define MOPT_FORCE              { "force",      0, MNT_FORCE, 0 }
#define MOPT_UPDATE             { "update",     0, MNT_UPDATE, 0 }
#define MOPT_RELOAD             { "reload",     0, MNT_RELOAD, 0 }
#define MOPT_GETARGS            { "getargs",    0, MNT_GETARGS, 0 }

/* Support for old-style "ro", "rw" flags. */
#define MOPT_RO                 { "ro",         0, MNT_RDONLY, 0 }
#define MOPT_RW                 { "rw",         1, MNT_RDONLY, 0 }

/* This is parsed by mount(8), but is ignored by specific mount_*(8)s. */
#define MOPT_AUTO               { "auto",       0, 0, 0 }

#define MOPT_FSTAB_COMPAT                                               \
        MOPT_RO,                                                        \
        MOPT_RW,                                                        \
        MOPT_AUTO

/* Standard options which all mounts can understand. */
#define MOPT_STDOPTS                                                    \
        MOPT_USERQUOTA,                                                 \
        MOPT_GROUPQUOTA,                                                \
        MOPT_FSTAB_COMPAT,                                              \
        MOPT_NOCOREDUMP,                                                \
        MOPT_NODEV,                                                     \
        MOPT_NOEXEC,                                                    \
        MOPT_NOSUID,                                                    \
        MOPT_RDONLY,                                                    \
        MOPT_UNION,                                                     \
        MOPT_IGNORE,                                                    \
        MOPT_SYMPERM

__BEGIN_DECLS
typedef struct mntoptparse *mntoptparse_t;
mntoptparse_t getmntopts(const char *, const struct mntopt *, int *, int *);
const char *getmntoptstr(mntoptparse_t, const char *);
long getmntoptnum(mntoptparse_t, const char *);
void freemntopts(mntoptparse_t);

extern int getmnt_silent;
__END_DECLS

#endif /* _MNTOPTS_H_ */


If anyone wants to help me out, or wants to tell me I'm going about this all wrong do so please smile.gif

Thanks,

d11
PM Profile Card
Go to the top of the page
+ Quote Post


Reply to this topic Start new topic

1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 

RSS Lo-Fi Version Time is now: 9th September 2010 - 07:34 AM