cpp

Coverage Report

Created: 2025-05-14 05:11

/home/uke/oil/cpp/core.h
Line
Count
Source
1
// core.h: Replacement for core/*.py
2
3
#ifndef CORE_H
4
#define CORE_H
5
6
#include <pwd.h>  // passwd
7
#include <termios.h>
8
9
#include "_gen/frontend/syntax.asdl.h"
10
#include "cpp/pgen2.h"
11
#include "mycpp/runtime.h"
12
13
// Hacky forward declaration
14
namespace completion {
15
class RootCompleter;
16
};
17
18
namespace pyos {
19
20
const int TERM_ICANON = ICANON;
21
const int TERM_ECHO = ECHO;
22
const int EOF_SENTINEL = 256;
23
const int NEWLINE_CH = 10;
24
25
Tuple2<int, int> WaitPid(int waitpid_options);
26
Tuple2<int, int> Read(int fd, int n, List<BigStr*>* chunks);
27
Tuple2<int, int> ReadByte(int fd);
28
BigStr* ReadLineBuffered();
29
Dict<BigStr*, BigStr*>* Environ();
30
int Chdir(BigStr* dest_dir);
31
BigStr* GetMyHomeDir();
32
BigStr* GetHomeDir(BigStr* user_name);
33
34
class ReadError {
35
 public:
36
1
  explicit ReadError(int err_num_) : err_num(err_num_) {
37
1
  }
38
39
1
  static constexpr ObjHeader obj_header() {
40
1
    return ObjHeader::ClassFixed(kZeroMask, sizeof(ReadError));
41
1
  }
42
43
  int err_num;
44
};
45
46
class PasswdEntry {
47
 public:
48
  explicit PasswdEntry(const passwd* entry)
49
      : pw_name(StrFromC(entry->pw_name)),
50
        pw_uid(entry->pw_uid),
51
19
        pw_gid(entry->pw_gid) {
52
19
  }
53
54
19
  static constexpr ObjHeader obj_header() {
55
19
    return ObjHeader::ClassFixed(field_mask(), sizeof(PasswdEntry));
56
19
  }
57
58
  BigStr* pw_name;
59
  int pw_uid;
60
  int pw_gid;
61
62
19
  static constexpr uint32_t field_mask() {
63
19
    return maskbit(offsetof(PasswdEntry, pw_name));
64
19
  }
65
};
66
67
List<PasswdEntry*>* GetAllUsers();
68
69
BigStr* GetUserName(int uid);
70
71
BigStr* OsType();
72
73
Tuple2<mops::BigInt, mops::BigInt> GetRLimit(int resource);
74
75
void SetRLimit(int resource, mops::BigInt soft, mops::BigInt hard);
76
77
Tuple3<double, double, double> Time();
78
79
void PrintTimes();
80
81
bool InputAvailable(int fd);
82
83
List<int>* WaitForReading(List<int>* fd_list);
84
85
IOError_OSError* FlushStdout();
86
87
Tuple2<int, void*> PushTermAttrs(int fd, int mask);
88
void PopTermAttrs(int fd, int orig_local_modes, void* term_attrs);
89
90
Tuple2<BigStr*, int>* MakeDirCacheKey(BigStr* path);
91
92
bool IsSameFile(BigStr* path1, BigStr* path2);
93
94
}  // namespace pyos
95
96
namespace pyutil {
97
98
double infinity();
99
double nan();
100
101
bool IsValidCharEscape(BigStr* c);
102
BigStr* ChArrayToString(List<int>* ch_array);
103
104
class _ResourceLoader {
105
 public:
106
1
  _ResourceLoader() {
107
1
  }
108
109
  virtual BigStr* Get(BigStr* path);
110
111
1
  static constexpr ObjHeader obj_header() {
112
1
    return ObjHeader::ClassFixed(kZeroMask, sizeof(_ResourceLoader));
113
1
  }
114
};
115
116
_ResourceLoader* GetResourceLoader();
117
118
BigStr* GetVersion(_ResourceLoader* loader);
119
120
void PrintVersionDetails(_ResourceLoader* loader);
121
122
BigStr* strerror(IOError_OSError* e);
123
124
BigStr* BackslashEscape(BigStr* s, BigStr* meta_chars);
125
126
grammar::Grammar* LoadYshGrammar(_ResourceLoader*);
127
128
}  // namespace pyutil
129
130
#endif  // CORE_H