8#include "nuitka/prelude.h"
12PyObject *BUILTIN_OPEN_SIMPLE(PyThreadState *tstate, PyObject *filename,
char const *mode,
bool buffering,
14 PyObject *mode_obj = Nuitka_String_FromString(mode);
15 PyObject *buffering_obj = buffering ? const_int_pos_1 : const_int_0;
19#if PYTHON_VERSION < 0x300
22 if ((strcmp(mode,
"w") == 0) && buffering ==
true) {
23 buffering_obj = const_int_0;
27 result = BUILTIN_OPEN(tstate, filename, mode_obj, buffering_obj);
30 if ((strcmp(mode,
"w") == 0) && buffering ==
false) {
32 static PyObject *_io_module_text_io_wrapper = NULL;
33 if (_io_module_text_io_wrapper == NULL) {
34 _io_module_text_io_wrapper = PyObject_GetAttrString(IMPORT_HARD__IO(),
"TextIOWrapper");
35 CHECK_OBJECT(_io_module_text_io_wrapper);
38 PyObject *mode_obj2 = PyUnicode_FromString(
"wb");
40 PyObject *binary_stream =
41 BUILTIN_OPEN(tstate, filename, mode_obj2, buffering_obj, NULL, NULL, NULL, NULL, NULL);
45 if (binary_stream == NULL) {
49 PyObject *encoding_default = NULL;
51 if (encoding == NULL) {
52 if (encoding_default == NULL) {
53 encoding_default = Nuitka_String_FromString(
"utf-8");
56 encoding = encoding_default;
59 PyObject *args[] = {binary_stream, encoding, Py_None, Py_None, Py_False, Py_True};
61 result = CALL_FUNCTION_WITH_ARGS6(tstate, _io_module_text_io_wrapper, args);
63 result = BUILTIN_OPEN(tstate, filename, mode_obj, buffering_obj, encoding, NULL, NULL, NULL, NULL);
72PyObject *BUILTIN_OPEN_BINARY_READ_SIMPLE(PyThreadState *tstate, PyObject *filename) {
75#if PYTHON_VERSION < 0x300
77 result = BUILTIN_OPEN(tstate, filename, const_str_plain_rb, const_int_0);
79 result = BUILTIN_OPEN(tstate, filename, const_str_plain_rb, const_int_0, NULL, NULL, NULL, NULL, NULL);
85PyObject *GET_FILE_BYTES(PyThreadState *tstate, PyObject *filename) {
86 PyObject *read_result;
88 if (TRACE_FILE_READ(tstate, filename, &read_result)) {
92 PyObject *data_file = BUILTIN_OPEN_BINARY_READ_SIMPLE(tstate, filename);
94 if (unlikely(data_file == NULL)) {
99 PyObject *read_method = LOOKUP_ATTRIBUTE(tstate, data_file, const_str_plain_read);
100 Py_DECREF(data_file);
102 if (unlikely(read_method == NULL)) {
106 PyObject *close_method = LOOKUP_ATTRIBUTE(tstate, data_file, const_str_plain_close);
108 if (unlikely(close_method == NULL)) {
109 Py_DECREF(read_method);
113 read_result = CALL_FUNCTION_NO_ARGS(tstate, read_method);
114 Py_DECREF(read_method);
116 if (unlikely(read_result == NULL)) {
117 Py_DECREF(close_method);
121 PyObject *close_result = CALL_FUNCTION_NO_ARGS(tstate, close_method);
122 Py_DECREF(close_method);
124 if (unlikely(close_result == NULL)) {
125 Py_DECREF(read_result);
129 Py_DECREF(close_result);
135static PyObject *IMPORT_HARD_OS_PATH(PyThreadState *tstate) {
136 static PyObject *os_path = NULL;
138 if (os_path == NULL) {
139 os_path = LOOKUP_ATTRIBUTE(tstate, IMPORT_HARD_OS(), const_str_plain_path);
141 CHECK_OBJECT(os_path);
147PyObject *OS_PATH_FILE_EXISTS(PyThreadState *tstate, PyObject *filename) {
150 if (TRACE_FILE_EXISTS(tstate, filename, &result)) {
154 PyObject *exists_func = LOOKUP_ATTRIBUTE(tstate, IMPORT_HARD_OS_PATH(tstate), const_str_plain_exists);
156 result = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, exists_func, filename);
158 Py_DECREF(exists_func);
162PyObject *OS_PATH_FILE_ISFILE(PyThreadState *tstate, PyObject *filename) {
165 if (TRACE_FILE_ISFILE(tstate, filename, &result)) {
169 PyObject *isfile_func = LOOKUP_ATTRIBUTE(tstate, IMPORT_HARD_OS_PATH(tstate), const_str_plain_isfile);
171 result = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, isfile_func, filename);
173 Py_DECREF(isfile_func);
177PyObject *OS_PATH_FILE_ISDIR(PyThreadState *tstate, PyObject *filename) {
180 if (TRACE_FILE_ISDIR(tstate, filename, &result)) {
184 PyObject *isdir_func = LOOKUP_ATTRIBUTE(tstate, IMPORT_HARD_OS_PATH(tstate), const_str_plain_isdir);
186 result = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, isdir_func, filename);
188 Py_DECREF(isdir_func);
192PyObject *OS_LISTDIR(PyThreadState *tstate, PyObject *path) {
195 if (TRACE_FILE_LISTDIR(tstate, path, &result)) {
199 PyObject *listdir_func = LOOKUP_ATTRIBUTE(tstate, IMPORT_HARD_OS(), const_str_plain_listdir);
202 result = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, listdir_func, path);
204 result = CALL_FUNCTION_NO_ARGS(tstate, listdir_func);
207 Py_DECREF(listdir_func);
211extern PyObject *OS_STAT(PyThreadState *tstate, PyObject *path, PyObject *dir_fd, PyObject *follow_symlinks) {
212 assert(path != NULL);
216 if (TRACE_FILE_STAT(tstate, path, dir_fd, follow_symlinks, &result)) {
220 PyObject *stat_func = LOOKUP_ATTRIBUTE(tstate, IMPORT_HARD_OS(), const_str_plain_stat);
222#if PYTHON_VERSION < 0x300
223 assert(dir_fd == NULL);
225 result = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, stat_func, path);
228 PyObject *args[] = {path, dir_fd, follow_symlinks};
230 char const *arg_names[] = {
"path",
"dir_fd",
"follow_symlinks"};
231 result = CALL_BUILTIN_KW_ARGS(tstate, stat_func, args, arg_names, 3, 2);
234 Py_DECREF(stat_func);
238extern PyObject *OS_LSTAT(PyThreadState *tstate, PyObject *path, PyObject *dir_fd) {
239 assert(path != NULL);
242#if PYTHON_VERSION < 0x300
243 if (TRACE_FILE_STAT(tstate, path, dir_fd, Py_False, &result)) {
247 assert(path != NULL);
248 assert(dir_fd == NULL);
249 PyObject *lstat_func = LOOKUP_ATTRIBUTE(tstate, IMPORT_HARD_OS(), const_str_plain_lstat);
251 result = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, lstat_func, path);
253 if (TRACE_FILE_STAT(tstate, path, dir_fd, Py_True, &result)) {
257 PyObject *args[] = {path, dir_fd};
259 char const *arg_names[] = {
"path",
"dir_fd"};
261 PyObject *lstat_func = LOOKUP_ATTRIBUTE(tstate, IMPORT_HARD_OS(), const_str_plain_lstat);
263 result = CALL_BUILTIN_KW_ARGS(tstate, lstat_func, args, arg_names, 2, 1);
266 Py_DECREF(lstat_func);
270PyObject *OS_PATH_BASENAME(PyThreadState *tstate, PyObject *filename) {
271 CHECK_OBJECT(filename);
273 PyObject *basename_func = LOOKUP_ATTRIBUTE(tstate, IMPORT_HARD_OS_PATH(tstate), const_str_plain_basename);
275 PyObject *result = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, basename_func, filename);
277 Py_DECREF(basename_func);
281PyObject *OS_PATH_DIRNAME(PyThreadState *tstate, PyObject *filename) {
282 CHECK_OBJECT(filename);
284 PyObject *dirname_func = LOOKUP_ATTRIBUTE(tstate, IMPORT_HARD_OS_PATH(tstate), const_str_plain_dirname);
286 PyObject *result = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, dirname_func, filename);
288 Py_DECREF(dirname_func);
292PyObject *OS_PATH_ABSPATH(PyThreadState *tstate, PyObject *filename) {
293 CHECK_OBJECT(filename);
295 PyObject *abspath_func = LOOKUP_ATTRIBUTE(tstate, IMPORT_HARD_OS_PATH(tstate), const_str_plain_abspath);
297 PyObject *result = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, abspath_func, filename);
299 Py_DECREF(abspath_func);
303PyObject *OS_PATH_ISABS(PyThreadState *tstate, PyObject *filename) {
304 CHECK_OBJECT(filename);
306 PyObject *isabs_func = LOOKUP_ATTRIBUTE(tstate, IMPORT_HARD_OS_PATH(tstate), const_str_plain_isabs);
308 PyObject *result = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, isabs_func, filename);
310 Py_DECREF(isabs_func);
314extern PyObject *OS_PATH_NORMPATH(PyThreadState *tstate, PyObject *filename) {
315 PyObject *normpath_func = LOOKUP_ATTRIBUTE(tstate, IMPORT_HARD_OS_PATH(tstate), const_str_plain_normpath);
317 PyObject *result = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, normpath_func, filename);
319 Py_DECREF(normpath_func);
323nuitka_bool compareFilePaths(PyThreadState *tstate, PyObject *filename_a, PyObject *filename_b) {
324 filename_a = OS_PATH_ABSPATH(tstate, filename_a);
326 if (unlikely(filename_a == NULL)) {
327 return NUITKA_BOOL_EXCEPTION;
330 filename_b = OS_PATH_ABSPATH(tstate, filename_b);
332 if (unlikely(filename_b == NULL)) {
333 Py_DECREF(filename_a);
334 return NUITKA_BOOL_EXCEPTION;
337 return RICH_COMPARE_EQ_NBOOL_OBJECT_OBJECT(filename_a, filename_b);