Initial checkin. Currently does nothing particularly useful.
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@3114 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
70eaa1f5b5
commit
29008bcfd8
68
src/add-ons/kernel/file_systems/udf/Volume.cpp
Normal file
68
src/add-ons/kernel/file_systems/udf/Volume.cpp
Normal file
@ -0,0 +1,68 @@
|
||||
//----------------------------------------------------------------------
|
||||
// This software is part of the OpenBeOS distribution and is covered
|
||||
// by the OpenBeOS license.
|
||||
//
|
||||
// Copyright (c) 2003 Tyler Dauwalder, tyler@dauwalder.net
|
||||
// Mad props to Axel Dörfler and his BFS implementation, from which
|
||||
// this UDF implementation draws much influence (and a little code :-P).
|
||||
//----------------------------------------------------------------------
|
||||
#include "Volume.h"
|
||||
|
||||
#include "Block.h"
|
||||
#include "Debug.h"
|
||||
|
||||
using namespace UDF;
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// Volume
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
/*! \brief Creates an unmounted volume with the given id.
|
||||
*/
|
||||
Volume::Volume(nspace_id id)
|
||||
: fID(id)
|
||||
, fDevice(0)
|
||||
, fReadOnly(false)
|
||||
{
|
||||
}
|
||||
|
||||
status_t
|
||||
Volume::Identify(int device, off_t base)
|
||||
{
|
||||
return B_ERROR;
|
||||
}
|
||||
|
||||
/*! \brief Attempts to mount the given device.
|
||||
*/
|
||||
status_t
|
||||
Volume::Mount(const char *deviceName, uint32 flags)
|
||||
{
|
||||
if (!deviceName)
|
||||
RETURN_ERROR(B_BAD_VALUE);
|
||||
|
||||
fReadOnly = flags & B_READ_ONLY;
|
||||
|
||||
// Open the device, trying read only if readwrite fails
|
||||
fDevice = open(deviceName, fReadOnly ? O_RDONLY : O_RDWR);
|
||||
if (fDevice < B_OK && !fReadOnly) {
|
||||
fReadOnly = true;
|
||||
fDevice = open(deviceName, O_RDONLY);
|
||||
}
|
||||
if (fDevice < B_OK)
|
||||
RETURN_ERROR(fDevice);
|
||||
|
||||
// If the device is actually a normal file, try to disable the cache
|
||||
// for the file in the parent filesystem
|
||||
struct stat stat;
|
||||
status_t err = fstat(fDevice, &stat) < 0 ? B_OK : B_ERROR;
|
||||
if (!err) {
|
||||
if (stat.st_mode & S_IFREG && ioctl(fDevice, IOCTL_FILE_UNCACHED_IO, NULL) < 0) {
|
||||
// Probably should die some sort of painful death here.
|
||||
}
|
||||
}
|
||||
|
||||
// Now identify the volume
|
||||
|
||||
return B_ERROR;
|
||||
}
|
||||
|
55
src/add-ons/kernel/file_systems/udf/Volume.h
Normal file
55
src/add-ons/kernel/file_systems/udf/Volume.h
Normal file
@ -0,0 +1,55 @@
|
||||
//----------------------------------------------------------------------
|
||||
// This software is part of the OpenBeOS distribution and is covered
|
||||
// by the OpenBeOS license.
|
||||
//
|
||||
// Copyright (c) 2003 Tyler Dauwalder, tyler@dauwalder.net
|
||||
// Mad props to Axel Dörfler and his BFS implementation, from which
|
||||
// this UDF implementation draws much influence (and a little code :-P).
|
||||
//---------------------------------------------------------------------
|
||||
#ifndef _UDF_VOLUME_H
|
||||
#define _UDF_VOLUME_H
|
||||
|
||||
/*! \file Volume.h
|
||||
*/
|
||||
|
||||
#include <KernelExport.h>
|
||||
extern "C" {
|
||||
#ifndef _IMPEXP_KERNEL
|
||||
# define _IMPEXP_KERNEL
|
||||
#endif
|
||||
|
||||
#include <fsproto.h>
|
||||
}
|
||||
|
||||
#include "cpp.h"
|
||||
|
||||
namespace UDF {
|
||||
|
||||
class Volume {
|
||||
public:
|
||||
Volume(nspace_id id);
|
||||
|
||||
static status_t Identify(int device) { return Identify(device, 0); }
|
||||
static status_t Identify(int device, off_t base);
|
||||
|
||||
status_t Mount(const char *deviceName, uint32 flags);
|
||||
status_t Unmount();
|
||||
|
||||
nspace_id GetID() { return fID; }
|
||||
|
||||
const char *Name() const;
|
||||
int Device() const { return fDevice; }
|
||||
|
||||
bool IsReadOnly() const { return fReadOnly; }
|
||||
|
||||
vnode_id ToVnodeID(off_t block) const { return (vnode_id)block; }
|
||||
|
||||
private:
|
||||
nspace_id fID;
|
||||
int fDevice;
|
||||
bool fReadOnly;
|
||||
};
|
||||
|
||||
}; // namespace UDF
|
||||
|
||||
#endif // _UDF_VOLUME_H
|
Loading…
Reference in New Issue
Block a user