mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 11:37:35 +00:00
b420ed8248
This change gets the Python codebase into a state where it conforms to the conventions of this codebase. It's now possible to include headers from Python, without worrying about ordering. Python has traditionally solved that problem by "diamonding" everything in Python.h, but that's problematic since it means any change to any Python header invalidates all the build artifacts. Lastly it makes tooling not work. Since it is hard to explain to Emacs when I press C-c C-h to add an import line it shouldn't add the header that actually defines the symbol, and instead do follow the nonstandard Python convention. Progress has been made on letting Python load source code from the zip executable structure via the standard C library APIs. System calss now recognizes zip!FILENAME alternative URIs as equivalent to zip:FILENAME since Python uses colon as its delimiter. Some progress has been made on embedding the notice license terms into the Python object code. This is easier said than done since Python has an extremely complicated ownership story. - Some termios APIs have been added - Implement rewinddir() dirstream API - GetCpuCount() API added to Cosmopolitan Libc - More bugs in Cosmopolitan Libc have been fixed - zipobj.com now has flags for mangling the path - Fixed bug a priori with sendfile() on certain BSDs - Polyfill F_DUPFD and F_DUPFD_CLOEXEC across platforms - FIOCLEX / FIONCLEX now polyfilled for fast O_CLOEXEC changes - APE now supports a hybrid solution to no-self-modify for builds - Many BSD-only magnums added, e.g. O_SEARCH, O_SHLOCK, SF_NODISKIO
156 lines
3.2 KiB
C
156 lines
3.2 KiB
C
#ifndef Py_FILEUTILS_H
|
|
#define Py_FILEUTILS_H
|
|
#include "libc/calls/struct/stat.h"
|
|
#include "third_party/python/Include/object.h"
|
|
COSMOPOLITAN_C_START_
|
|
/* clang-format off */
|
|
|
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
|
|
wchar_t * Py_DecodeLocale(
|
|
const char *arg,
|
|
size_t *size);
|
|
|
|
char* Py_EncodeLocale(
|
|
const wchar_t *text,
|
|
size_t *error_pos);
|
|
#endif
|
|
|
|
#ifndef Py_LIMITED_API
|
|
|
|
wchar_t * _Py_DecodeLocaleEx(
|
|
const char *arg,
|
|
size_t *size,
|
|
int current_locale);
|
|
|
|
char* _Py_EncodeLocaleEx(
|
|
const wchar_t *text,
|
|
size_t *error_pos,
|
|
int current_locale);
|
|
|
|
PyObject * _Py_device_encoding(int);
|
|
|
|
#if defined(MS_WINDOWS) || defined(__APPLE__)
|
|
/* On Windows, the count parameter of read() is an int (bpo-9015, bpo-9611).
|
|
On macOS 10.13, read() and write() with more than INT_MAX bytes
|
|
fail with EINVAL (bpo-24658). */
|
|
# define _PY_READ_MAX INT_MAX
|
|
# define _PY_WRITE_MAX INT_MAX
|
|
#else
|
|
/* write() should truncate the input to PY_SSIZE_T_MAX bytes,
|
|
but it's safer to do it ourself to have a portable behaviour */
|
|
# define _PY_READ_MAX PY_SSIZE_T_MAX
|
|
# define _PY_WRITE_MAX PY_SSIZE_T_MAX
|
|
#endif
|
|
|
|
#ifdef MS_WINDOWS
|
|
struct _Py_stat_struct {
|
|
unsigned long st_dev;
|
|
uint64_t st_ino;
|
|
unsigned short st_mode;
|
|
int st_nlink;
|
|
int st_uid;
|
|
int st_gid;
|
|
unsigned long st_rdev;
|
|
__int64 st_size;
|
|
time_t st_atime;
|
|
int st_atime_nsec;
|
|
time_t st_mtime;
|
|
int st_mtime_nsec;
|
|
time_t st_ctime;
|
|
int st_ctime_nsec;
|
|
unsigned long st_file_attributes;
|
|
};
|
|
#else
|
|
# define _Py_stat_struct stat
|
|
#endif
|
|
|
|
int _Py_fstat(
|
|
int fd,
|
|
struct _Py_stat_struct *status);
|
|
|
|
int _Py_fstat_noraise(
|
|
int fd,
|
|
struct _Py_stat_struct *status);
|
|
|
|
int _Py_stat(
|
|
PyObject *path,
|
|
struct stat *status);
|
|
|
|
int _Py_open(
|
|
const char *pathname,
|
|
int flags);
|
|
|
|
int _Py_open_noraise(
|
|
const char *pathname,
|
|
int flags);
|
|
|
|
FILE * _Py_wfopen(
|
|
const wchar_t *path,
|
|
const wchar_t *mode);
|
|
|
|
FILE* _Py_fopen(
|
|
const char *pathname,
|
|
const char *mode);
|
|
|
|
FILE* _Py_fopen_obj(
|
|
PyObject *path,
|
|
const char *mode);
|
|
|
|
Py_ssize_t _Py_read(
|
|
int fd,
|
|
void *buf,
|
|
size_t count);
|
|
|
|
Py_ssize_t _Py_write(
|
|
int fd,
|
|
const void *buf,
|
|
size_t count);
|
|
|
|
Py_ssize_t _Py_write_noraise(
|
|
int fd,
|
|
const void *buf,
|
|
size_t count);
|
|
|
|
#ifdef HAVE_READLINK
|
|
int _Py_wreadlink(
|
|
const wchar_t *path,
|
|
wchar_t *buf,
|
|
size_t bufsiz);
|
|
#endif
|
|
|
|
#ifdef HAVE_REALPATH
|
|
wchar_t* _Py_wrealpath(
|
|
const wchar_t *path,
|
|
wchar_t *resolved_path,
|
|
size_t resolved_path_size);
|
|
#endif
|
|
|
|
wchar_t* _Py_wgetcwd(
|
|
wchar_t *buf,
|
|
size_t size);
|
|
|
|
int _Py_get_inheritable(int fd);
|
|
|
|
int _Py_set_inheritable(int fd, int inheritable,
|
|
int *atomic_flag_works);
|
|
|
|
int _Py_set_inheritable_async_safe(int fd, int inheritable,
|
|
int *atomic_flag_works);
|
|
|
|
int _Py_dup(int fd);
|
|
|
|
#ifndef MS_WINDOWS
|
|
int _Py_get_blocking(int fd);
|
|
|
|
int _Py_set_blocking(int fd, int blocking);
|
|
#endif /* !MS_WINDOWS */
|
|
|
|
int _Py_GetLocaleconvNumeric(
|
|
PyObject **decimal_point,
|
|
PyObject **thousands_sep,
|
|
const char **grouping);
|
|
|
|
#endif /* Py_LIMITED_API */
|
|
|
|
COSMOPOLITAN_C_END_
|
|
#endif /* !Py_FILEUTILS_H */
|