- if(!filename) {
- PyErr_SetString(PyExc_Exception, setError("Couldn't open file %s", filename));
- return 0;
- }
- swf->filename = strdup(filename);
- fi = open(filename,O_RDONLY|O_BINARY);
- if (fi<0) {
- PyErr_SetString(PyExc_Exception, setError("Couldn't open file %s", filename));
- return 0;
- }
- if(swf_ReadSWF(fi,&swf->swf)<0) {
- close(fi);
- PyErr_SetString(PyExc_Exception, setError("%s is not a valid SWF file or contains errors",filename));
- return 0;
+ if(filename) {
+ if(!filename) {
+ PyErr_SetString(PyExc_Exception, setError("Couldn't open file %s", filename));
+ return 0;
+ }
+ swf->filename = strdup(filename);
+ fi = open(filename,O_RDONLY|O_BINARY);
+ if (fi<0) {
+ return PY_ERROR("Couldn't open file %s", filename);
+ }
+ if(swf_ReadSWF(fi,&swf->swf)<0) {
+ close(fi);
+ return PY_ERROR("%s is not a valid SWF file or contains errors",filename);
+ }
+ close(fi);
+ } else {
+ reader_t r;
+ reader_init_memreader(&r, data, len);
+ swf->filename = 0;
+ if(swf_ReadSWF2(&r, &swf->swf)<0) {
+ return PY_ERROR("<data> is not a valid SWF file or contains errors");
+ }
+ r.dealloc(&r);