diff options
author | René 'Necoro' Neumann <necoro@necoro.net> | 2009-07-24 21:30:40 +0200 |
---|---|---|
committer | René 'Necoro' Neumann <necoro@necoro.net> | 2009-07-24 21:30:40 +0200 |
commit | b8f45f026ace3df864efac5d49a62be4a0fc9eae (patch) | |
tree | b7c198c8014f91b9d0a458beda281ab81c5fdeac /portato/eix/eix_utils.pyx | |
parent | 452bf1e7237e6cb1d8a697179eaee9ed3a430d52 (diff) | |
download | portato-b8f45f026ace3df864efac5d49a62be4a0fc9eae.tar.gz portato-b8f45f026ace3df864efac5d49a62be4a0fc9eae.tar.bz2 portato-b8f45f026ace3df864efac5d49a62be4a0fc9eae.zip |
First eix stuff
Diffstat (limited to '')
-rw-r--r-- | portato/eix/eix_utils.pyx | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/portato/eix/eix_utils.pyx b/portato/eix/eix_utils.pyx new file mode 100644 index 0000000..57fa5d7 --- /dev/null +++ b/portato/eix/eix_utils.pyx @@ -0,0 +1,72 @@ +class EndOfFileError (IOError): + + def __init__ (self, filename = None): + self.message = "End of file reached while not expecting it" + self.filename = filename + + def __str__ (self): + if self.filename is not None: + return "%s: %s" % (self.message, self.filename) + else: + return self.message + +cdef char* strdup (char * other) except NULL: + cdef size_t len + cdef char* new + + if other is NULL: + return NULL + + len = strlen(other) + new = <char*>PyMem_Malloc(len+1) + + if new is NULL: + raise MemoryError, "Malloc of new string copy" + return NULL + + return strcpy(new, other) + + +cdef File* fopen (char* path, char* mode) except NULL: + cdef File* f + + f = <File*> PyMem_Malloc(sizeof(File)) + + if f is NULL: + raise MemoryError, "Malloc of File" + return NULL + + f.file = c_fopen(path, mode) + + if f.file is NULL: + raise IOError, (errno, strerror(errno), path) + return NULL + + f.name = strdup(path) + + if f.name is NULL: + return NULL + + return f + +cdef void fclose (File* f): + c_fclose(f.file) + ffree(f.name) + PyMem_Free(f) + +cdef void ffree (void* p): + PyMem_Free(p) + +cdef char* fget (File* f, size_t n) except NULL: + cdef char* buf + buf = <char*> PyMem_Malloc(n) + + if buf is NULL: + raise MemoryError, "Malloc" + return NULL + + if (fread(buf, 1, n, f.file) != n): + PyMem_Free(buf) + raise EndOfFileError, f.name + + return buf |