mirror of
https://github.com/elliotnunn/libhfs.git
synced 2024-09-29 06:54:35 +00:00
file routines
This commit is contained in:
parent
a8344ada4f
commit
e46b7c4215
129
main.c
129
main.c
@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
static const char NAME_HFSVOL[] = "hfsvol";
|
static const char NAME_HFSVOL[] = "hfsvol";
|
||||||
static const char NAME_HFSDIR[] = "hfsdir";
|
static const char NAME_HFSDIR[] = "hfsdir";
|
||||||
|
static const char NAME_HFSFILE[] = "hfsfile";
|
||||||
|
|
||||||
static PyObject *wrap_mount(PyObject *self, PyObject *args)
|
static PyObject *wrap_mount(PyObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
@ -167,6 +168,102 @@ static PyObject *wrap_closedir(PyObject *self, PyObject *args)
|
|||||||
return Py_None;
|
return Py_None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PyObject *wrap_create(PyObject *self, PyObject *args)
|
||||||
|
{
|
||||||
|
hfsvol *arg_vol; PyObject *arg_vol_c; char *arg_path;
|
||||||
|
char *arg_type; Py_ssize_t arg_type_len;
|
||||||
|
char *arg_creator; Py_ssize_t arg_creator_len;
|
||||||
|
if(!PyArg_ParseTuple(args, "Oyy#y#", &arg_vol_c, &arg_path, &arg_type, &arg_type_len, &arg_creator, &arg_creator_len)) return NULL;
|
||||||
|
if(arg_type_len != 4 || arg_creator_len != 4) return NULL;
|
||||||
|
if(arg_vol_c == Py_None) arg_vol = NULL;
|
||||||
|
else if(!(arg_vol = PyCapsule_GetPointer(arg_vol_c, NAME_HFSVOL))) return NULL;
|
||||||
|
return PyCapsule_New((void *)hfs_create(arg_vol, arg_path, arg_type, arg_creator), NAME_HFSFILE, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyObject *wrap_open(PyObject *self, PyObject *args)
|
||||||
|
{
|
||||||
|
hfsvol *arg_vol; PyObject *arg_vol_c; char *arg_path;
|
||||||
|
if(!PyArg_ParseTuple(args, "Oy", &arg_vol_c, &arg_path)) return NULL;
|
||||||
|
if(arg_vol_c == Py_None) arg_vol = NULL;
|
||||||
|
else if(!(arg_vol = PyCapsule_GetPointer(arg_vol_c, NAME_HFSVOL))) return NULL;
|
||||||
|
return PyCapsule_New((void *)hfs_open(arg_vol, arg_path), NAME_HFSFILE, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyObject *wrap_setfork(PyObject *self, PyObject *args)
|
||||||
|
{
|
||||||
|
hfsvol *arg_file; PyObject *arg_file_c; int arg_fork;
|
||||||
|
if(!PyArg_ParseTuple(args, "Oi", &arg_file_c, &arg_fork)) return NULL;
|
||||||
|
if(arg_file_c == Py_None) arg_file = NULL;
|
||||||
|
else if(!(arg_file = PyCapsule_GetPointer(arg_file_c, NAME_HFSFILE))) return NULL;
|
||||||
|
if(hfs_setfork(arg_file, arg_fork)) return NULL;
|
||||||
|
return Py_None;
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyObject *wrap_getfork(PyObject *self, PyObject *args)
|
||||||
|
{
|
||||||
|
hfsvol *arg_file; PyObject *arg_file_c;
|
||||||
|
if(!PyArg_ParseTuple(args, "O", &arg_file_c, &arg_fork)) return NULL;
|
||||||
|
if(arg_file_c == Py_None) arg_file = NULL;
|
||||||
|
else if(!(arg_file = PyCapsule_GetPointer(arg_file_c, NAME_HFSFILE))) return NULL;
|
||||||
|
return Py_BuildValue("i", hfs_getfork(arg_file));
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyObject *wrap_read(PyObject *self, PyObject *args) // pass in a bytearray and get it shrunk!
|
||||||
|
{
|
||||||
|
hfsvol *arg_file; PyObject *arg_file_c; PyObject *arg_bytearray;
|
||||||
|
if(!PyArg_ParseTuple(args, "OY", &arg_file_c, &arg_bytearray)) return NULL;
|
||||||
|
if(arg_file_c == Py_None) arg_file = NULL;
|
||||||
|
else if(!(arg_file = PyCapsule_GetPointer(arg_file_c, NAME_HFSFILE))) return NULL;
|
||||||
|
long bytesread = hfs_read(arg_file, PyByteArray_AsString(arg_bytearray), PyByteArray_Size(arg_bytearray));
|
||||||
|
if(bytesread == -1) return NULL;
|
||||||
|
PyByteArray_Resize(arg_bytearray, bytesread);
|
||||||
|
return Py_None;
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyObject *wrap_write(PyObject *self, PyObject *args) // pass in a bytearray and get it shrunk!
|
||||||
|
{
|
||||||
|
hfsvol *arg_file; PyObject *arg_file_c; PyObject *arg_bytes; Py_ssize_t arg_bytes_len;
|
||||||
|
if(!PyArg_ParseTuple(args, "Oy#", &arg_file_c, &arg_bytes, &arg_bytes_len)) return NULL;
|
||||||
|
if(arg_file_c == Py_None) arg_file = NULL;
|
||||||
|
else if(!(arg_file = PyCapsule_GetPointer(arg_file_c, NAME_HFSFILE))) return NULL;
|
||||||
|
long byteswritten = hfs_write(arg_file, arg_bytes, arg_bytes_len);
|
||||||
|
if(byteswritten == -1) return NULL;
|
||||||
|
return Py_BuildValue("l", byteswritten);
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyObject *wrap_truncate(PyObject *self, PyObject *args) // pass in a bytearray and get it shrunk!
|
||||||
|
{
|
||||||
|
hfsvol *arg_file; PyObject *arg_file_c; unsigned long *arg_len;
|
||||||
|
if(!PyArg_ParseTuple(args, "Ok", &arg_file_c, &arg_len)) return NULL;
|
||||||
|
if(arg_file_c == Py_None) arg_file = NULL;
|
||||||
|
else if(!(arg_file = PyCapsule_GetPointer(arg_file_c, NAME_HFSFILE))) return NULL;
|
||||||
|
if(hfs_truncate(arg_file, arg_len)) return NULL;
|
||||||
|
return Py_None;
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyObject *wrap_seek(PyObject *self, PyObject *args) // pass in a bytearray and get it shrunk!
|
||||||
|
{
|
||||||
|
hfsvol *arg_file; PyObject *arg_file_c; long *arg_offset; int arg_from;
|
||||||
|
if(!PyArg_ParseTuple(args, "Oli", &arg_file_c, &arg_offset, &arg_from)) return NULL;
|
||||||
|
if(arg_file_c == Py_None) arg_file = NULL;
|
||||||
|
else if(!(arg_file = PyCapsule_GetPointer(arg_file_c, NAME_HFSFILE))) return NULL;
|
||||||
|
long absloc = hfs_seek(arg_file, arg_offset, arg_from);
|
||||||
|
if(absloc == -1) return NULL;
|
||||||
|
return Py_BuildValue("l", absloc);
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyObject *wrap_close(PyObject *self, PyObject *args) // pass in a bytearray and get it shrunk!
|
||||||
|
{
|
||||||
|
hfsvol *arg_file; PyObject *arg_file_c;
|
||||||
|
if(!PyArg_ParseTuple(args, "O", &arg_file_c, &arg_offset, &arg_from)) return NULL;
|
||||||
|
if(arg_file_c == Py_None) arg_file = NULL;
|
||||||
|
else if(!(arg_file = PyCapsule_GetPointer(arg_file_c, NAME_HFSFILE))) return NULL;
|
||||||
|
if(hfs_close(arg_file, arg_offset, arg_from)) return NULL;
|
||||||
|
return Py_None;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static PyMethodDef module_methods[] = {
|
static PyMethodDef module_methods[] = {
|
||||||
// Volume routines
|
// Volume routines
|
||||||
{"mount", wrap_mount, METH_VARARGS, ""},
|
{"mount", wrap_mount, METH_VARARGS, ""},
|
||||||
@ -179,23 +276,23 @@ static PyMethodDef module_methods[] = {
|
|||||||
{"vstat", wrap_vstat, METH_VARARGS, ""},
|
{"vstat", wrap_vstat, METH_VARARGS, ""},
|
||||||
{"vsetattr", wrap_vsetattr, METH_VARARGS, ""},
|
{"vsetattr", wrap_vsetattr, METH_VARARGS, ""},
|
||||||
// Directory routines
|
// Directory routines
|
||||||
// {"chdir", wrap_chdir, METH_VARARGS, ""},
|
{"chdir", wrap_chdir, METH_VARARGS, ""},
|
||||||
// {"getcwd", wrap_getcwd, METH_VARARGS, ""},
|
{"getcwd", wrap_getcwd, METH_VARARGS, ""},
|
||||||
// {"setcwd", wrap_setcwd, METH_VARARGS, ""},
|
{"setcwd", wrap_setcwd, METH_VARARGS, ""},
|
||||||
// {"dirinfo", wrap_dirinfo, METH_VARARGS, ""},
|
{"dirinfo", wrap_dirinfo, METH_VARARGS, ""},
|
||||||
// {"opendir", wrap_opendir, METH_VARARGS, ""},
|
{"opendir", wrap_opendir, METH_VARARGS, ""},
|
||||||
// {"readdir", wrap_readdir, METH_VARARGS, ""},
|
{"readdir", wrap_readdir, METH_VARARGS, ""},
|
||||||
// {"closedir", wrap_closedir, METH_VARARGS, ""},
|
{"closedir", wrap_closedir, METH_VARARGS, ""},
|
||||||
// File routines
|
// File routines
|
||||||
// {"create", wrap_create, METH_VARARGS, ""},
|
{"create", wrap_create, METH_VARARGS, ""},
|
||||||
// {"open", wrap_open, METH_VARARGS, ""},
|
{"open", wrap_open, METH_VARARGS, ""},
|
||||||
// {"setfork", wrap_setfork, METH_VARARGS, ""},
|
{"setfork", wrap_setfork, METH_VARARGS, ""},
|
||||||
// {"getfork", wrap_getfork, METH_VARARGS, ""},
|
{"getfork", wrap_getfork, METH_VARARGS, ""},
|
||||||
// {"read", wrap_read, METH_VARARGS, ""},
|
{"read", wrap_read, METH_VARARGS, ""},
|
||||||
// {"write", wrap_write, METH_VARARGS, ""},
|
{"write", wrap_write, METH_VARARGS, ""},
|
||||||
// {"truncate", wrap_truncate, METH_VARARGS, ""},
|
{"truncate", wrap_truncate, METH_VARARGS, ""},
|
||||||
// {"seek", wrap_seek, METH_VARARGS, ""},
|
{"seek", wrap_seek, METH_VARARGS, ""},
|
||||||
// {"close", wrap_close, METH_VARARGS, ""},
|
{"close", wrap_close, METH_VARARGS, ""},
|
||||||
// Catalog routines
|
// Catalog routines
|
||||||
// {"stat", wrap_stat, METH_VARARGS, ""},
|
// {"stat", wrap_stat, METH_VARARGS, ""},
|
||||||
// {"fstat", wrap_fstat, METH_VARARGS, ""},
|
// {"fstat", wrap_fstat, METH_VARARGS, ""},
|
||||||
|
Loading…
Reference in New Issue
Block a user