@@ -83,7 +83,7 @@ void SourceFile::Save(const char* file_path)
83
83
BOOST_RAISE_EXCEPTION (PyExc_IOError, " Failed to open file: %s" , file_path)
84
84
85
85
int size = Size ();
86
- void * buffer = new char [size];
86
+ void * buffer = new char [size+ 1 ];
87
87
int bytesRead = filesystem->Read (buffer, size, m_handle);
88
88
89
89
filesystem->Write (buffer, bytesRead, handle);
@@ -134,12 +134,31 @@ PyObject* SourceFile::ConsumeBuffer(void* buffer, int bytesRead)
134
134
return result;
135
135
}
136
136
137
- int SourceFile::Write (object data)
137
+ int SourceFile::Write (PyObject* data)
138
138
{
139
139
CheckClosed ();
140
- // TODO
141
- BOOST_RAISE_EXCEPTION (PyExc_NotImplementedError, " Not implemented yet." )
142
- return 0 ;
140
+
141
+ char * input = NULL ;
142
+ int size = 0 ;
143
+
144
+ if (IsBinaryMode ()) {
145
+ if (!PyBytes_Check (data)) {
146
+ BOOST_RAISE_EXCEPTION (PyExc_TypeError, " a bytes-like object is required, not '%s'" , data->ob_type ->tp_name )
147
+ }
148
+
149
+ input = PyBytes_AsString (data);
150
+ size = PyBytes_Size (data);
151
+ }
152
+ else {
153
+ if (!PyUnicode_Check (data)) {
154
+ BOOST_RAISE_EXCEPTION (PyExc_TypeError, " write() argument must be str, not %s" , data->ob_type ->tp_name )
155
+ }
156
+
157
+ size = PyUnicode_GetLength (data);
158
+ input = (char *) PyUnicode_DATA (data);
159
+ }
160
+
161
+ return filesystem->Write ((void *) input, size, m_handle);
143
162
}
144
163
145
164
void SourceFile::Writelines (list lines)
0 commit comments