mirror of
https://github.com/elliotnunn/libhfs.git
synced 2025-02-14 11:31:33 +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_HFSDIR[] = "hfsdir";
|
||||
static const char NAME_HFSFILE[] = "hfsfile";
|
||||
|
||||
static PyObject *wrap_mount(PyObject *self, PyObject *args)
|
||||
{
|
||||
@ -167,6 +168,102 @@ static PyObject *wrap_closedir(PyObject *self, PyObject *args)
|
||||
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[] = {
|
||||
// Volume routines
|
||||
{"mount", wrap_mount, METH_VARARGS, ""},
|
||||
@ -179,23 +276,23 @@ static PyMethodDef module_methods[] = {
|
||||
{"vstat", wrap_vstat, METH_VARARGS, ""},
|
||||
{"vsetattr", wrap_vsetattr, METH_VARARGS, ""},
|
||||
// Directory routines
|
||||
// {"chdir", wrap_chdir, METH_VARARGS, ""},
|
||||
// {"getcwd", wrap_getcwd, METH_VARARGS, ""},
|
||||
// {"setcwd", wrap_setcwd, METH_VARARGS, ""},
|
||||
// {"dirinfo", wrap_dirinfo, METH_VARARGS, ""},
|
||||
// {"opendir", wrap_opendir, METH_VARARGS, ""},
|
||||
// {"readdir", wrap_readdir, METH_VARARGS, ""},
|
||||
// {"closedir", wrap_closedir, METH_VARARGS, ""},
|
||||
{"chdir", wrap_chdir, METH_VARARGS, ""},
|
||||
{"getcwd", wrap_getcwd, METH_VARARGS, ""},
|
||||
{"setcwd", wrap_setcwd, METH_VARARGS, ""},
|
||||
{"dirinfo", wrap_dirinfo, METH_VARARGS, ""},
|
||||
{"opendir", wrap_opendir, METH_VARARGS, ""},
|
||||
{"readdir", wrap_readdir, METH_VARARGS, ""},
|
||||
{"closedir", wrap_closedir, METH_VARARGS, ""},
|
||||
// File routines
|
||||
// {"create", wrap_create, METH_VARARGS, ""},
|
||||
// {"open", wrap_open, METH_VARARGS, ""},
|
||||
// {"setfork", wrap_setfork, METH_VARARGS, ""},
|
||||
// {"getfork", wrap_getfork, METH_VARARGS, ""},
|
||||
// {"read", wrap_read, METH_VARARGS, ""},
|
||||
// {"write", wrap_write, METH_VARARGS, ""},
|
||||
// {"truncate", wrap_truncate, METH_VARARGS, ""},
|
||||
// {"seek", wrap_seek, METH_VARARGS, ""},
|
||||
// {"close", wrap_close, METH_VARARGS, ""},
|
||||
{"create", wrap_create, METH_VARARGS, ""},
|
||||
{"open", wrap_open, METH_VARARGS, ""},
|
||||
{"setfork", wrap_setfork, METH_VARARGS, ""},
|
||||
{"getfork", wrap_getfork, METH_VARARGS, ""},
|
||||
{"read", wrap_read, METH_VARARGS, ""},
|
||||
{"write", wrap_write, METH_VARARGS, ""},
|
||||
{"truncate", wrap_truncate, METH_VARARGS, ""},
|
||||
{"seek", wrap_seek, METH_VARARGS, ""},
|
||||
{"close", wrap_close, METH_VARARGS, ""},
|
||||
// Catalog routines
|
||||
// {"stat", wrap_stat, METH_VARARGS, ""},
|
||||
// {"fstat", wrap_fstat, METH_VARARGS, ""},
|
||||
|
Loading…
x
Reference in New Issue
Block a user