blob: 6c342236969666105bff9746ec437c9c4b36e474 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00002/* File object interface */
3
Fred Drakeea9cb5a2000-07-09 00:20:36 +00004#ifndef Py_FILEOBJECT_H
5#define Py_FILEOBJECT_H
6#ifdef __cplusplus
7extern "C" {
8#endif
9
Martin v. Löwisf6eebbb2002-03-15 17:42:16 +000010typedef struct {
11 PyObject_HEAD
12 FILE *f_fp;
13 PyObject *f_name;
14 PyObject *f_mode;
15 int (*f_close)(FILE *);
16 int f_softspace; /* Flag used by 'print' command */
Jack Jansen7b8c7542002-04-14 20:12:41 +000017 int f_binary; /* Flag which indicates whether the file is open
Martin v. Löwisf6eebbb2002-03-15 17:42:16 +000018 open in binary (1) or test (0) mode */
Jack Jansen7b8c7542002-04-14 20:12:41 +000019#ifdef WITH_UNIVERSAL_NEWLINES
20 int f_univ_newline; /* Handle any newline convention */
21 int f_newlinetypes; /* Types of newlines seen */
22 int f_skipnextlf; /* Skip next \n */
23#endif
Martin v. Löwisf6eebbb2002-03-15 17:42:16 +000024} PyFileObject;
25
Guido van Rossum051ab121995-02-27 10:17:52 +000026extern DL_IMPORT(PyTypeObject) PyFile_Type;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000027
Tim Peters59c9a642001-09-13 05:38:56 +000028#define PyFile_Check(op) PyObject_TypeCheck(op, &PyFile_Type)
29#define PyFile_CheckExact(op) ((op)->ob_type == &PyFile_Type)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000030
Fred Drakeea9cb5a2000-07-09 00:20:36 +000031extern DL_IMPORT(PyObject *) PyFile_FromString(char *, char *);
32extern DL_IMPORT(void) PyFile_SetBufSize(PyObject *, int);
33extern DL_IMPORT(PyObject *) PyFile_FromFile(FILE *, char *, char *,
34 int (*)(FILE *));
35extern DL_IMPORT(FILE *) PyFile_AsFile(PyObject *);
36extern DL_IMPORT(PyObject *) PyFile_Name(PyObject *);
37extern DL_IMPORT(PyObject *) PyFile_GetLine(PyObject *, int);
38extern DL_IMPORT(int) PyFile_WriteObject(PyObject *, PyObject *, int);
39extern DL_IMPORT(int) PyFile_SoftSpace(PyObject *, int);
Tim Petersc1bbcb82001-11-28 22:13:25 +000040extern DL_IMPORT(int) PyFile_WriteString(const char *, PyObject *);
Andrew M. Kuchling06051ed2000-07-13 23:56:54 +000041extern DL_IMPORT(int) PyObject_AsFileDescriptor(PyObject *);
Guido van Rossuma3309961993-07-28 09:05:47 +000042
Mark Hammond26cffde42001-05-14 12:17:34 +000043/* The default encoding used by the platform file system APIs
Tim Peters058b1412002-04-21 07:29:14 +000044 If non-NULL, this is different than the default encoding for strings
Mark Hammond26cffde42001-05-14 12:17:34 +000045*/
46extern DL_IMPORT(const char *) Py_FileSystemDefaultEncoding;
47
Jack Jansen7b8c7542002-04-14 20:12:41 +000048#ifdef WITH_UNIVERSAL_NEWLINES
49/* Routines to replace fread() and fgets() which accept any of \r, \n
50 or \r\n as line terminators.
51*/
52#define PY_STDIOTEXTMODE "b"
53char *Py_UniversalNewlineFgets(char *, int, FILE*, PyObject *);
Tim Peters058b1412002-04-21 07:29:14 +000054size_t Py_UniversalNewlineFread(char *, size_t, FILE *, PyObject *);
Jack Jansen7b8c7542002-04-14 20:12:41 +000055#else
56#define PY_STDIOTEXTMODE ""
Tim Peters058b1412002-04-21 07:29:14 +000057#define Py_UniversalNewlineFgets(buf, len, fp, obj) fgets((buf), (len), (fp))
58#define Py_UniversalNewlineFread(buf, len, fp, obj)
59 fread((buf), 1, (len), (fp))
Jack Jansen7b8c7542002-04-14 20:12:41 +000060#endif /* WITH_UNIVERSAL_NEWLINES */
Guido van Rossuma3309961993-07-28 09:05:47 +000061#ifdef __cplusplus
62}
63#endif
64#endif /* !Py_FILEOBJECT_H */