cline 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (299) hide show
  1. package/bin/cline +0 -0
  2. package/bin/cline-darwin-amd64 +0 -0
  3. package/bin/cline-darwin-arm64 +0 -0
  4. package/bin/cline-host +0 -0
  5. package/bin/cline-host-darwin-amd64 +0 -0
  6. package/bin/cline-host-darwin-arm64 +0 -0
  7. package/bin/cline-host-linux-amd64 +0 -0
  8. package/bin/cline-host-linux-arm64 +0 -0
  9. package/bin/cline-linux-amd64 +0 -0
  10. package/bin/cline-linux-arm64 +0 -0
  11. package/cline-core.js +24143 -16610
  12. package/extension/package.json +12 -4
  13. package/node_modules/b4a/LICENSE +201 -0
  14. package/node_modules/b4a/README.md +153 -0
  15. package/node_modules/b4a/browser.js +563 -0
  16. package/node_modules/b4a/index.js +188 -0
  17. package/node_modules/b4a/lib/ascii.js +31 -0
  18. package/node_modules/b4a/lib/base64.js +65 -0
  19. package/node_modules/b4a/lib/hex.js +51 -0
  20. package/node_modules/b4a/lib/utf16le.js +40 -0
  21. package/node_modules/b4a/lib/utf8.js +141 -0
  22. package/node_modules/b4a/package.json +49 -0
  23. package/node_modules/b4a/react-native.js +5 -0
  24. package/node_modules/bare-events/LICENSE +201 -0
  25. package/node_modules/bare-events/README.md +25 -0
  26. package/node_modules/bare-events/global.d.ts +15 -0
  27. package/node_modules/bare-events/global.js +5 -0
  28. package/node_modules/bare-events/index.d.ts +94 -0
  29. package/node_modules/bare-events/index.js +355 -0
  30. package/node_modules/bare-events/lib/errors.js +32 -0
  31. package/node_modules/bare-events/package.json +61 -0
  32. package/node_modules/bare-events/web.d.ts +79 -0
  33. package/node_modules/bare-events/web.js +347 -0
  34. package/node_modules/bare-fs/CMakeLists.txt +13 -0
  35. package/node_modules/bare-fs/LICENSE +201 -0
  36. package/node_modules/bare-fs/README.md +29 -0
  37. package/node_modules/bare-fs/binding.c +2238 -0
  38. package/node_modules/bare-fs/binding.js +1 -0
  39. package/node_modules/bare-fs/index.d.ts +1115 -0
  40. package/node_modules/bare-fs/index.js +2330 -0
  41. package/node_modules/bare-fs/lib/constants.d.ts +49 -0
  42. package/node_modules/bare-fs/lib/constants.js +49 -0
  43. package/node_modules/bare-fs/lib/errors.d.ts +11 -0
  44. package/node_modules/bare-fs/lib/errors.js +55 -0
  45. package/node_modules/bare-fs/package.json +71 -0
  46. package/node_modules/bare-fs/prebuilds/android-arm/bare-fs.bare +0 -0
  47. package/node_modules/bare-fs/prebuilds/android-arm64/bare-fs.bare +0 -0
  48. package/node_modules/bare-fs/prebuilds/android-ia32/bare-fs.bare +0 -0
  49. package/node_modules/bare-fs/prebuilds/android-x64/bare-fs.bare +0 -0
  50. package/node_modules/bare-fs/prebuilds/darwin-arm64/bare-fs.bare +0 -0
  51. package/node_modules/bare-fs/prebuilds/darwin-x64/bare-fs.bare +0 -0
  52. package/node_modules/bare-fs/prebuilds/ios-arm64/bare-fs.bare +0 -0
  53. package/node_modules/bare-fs/prebuilds/ios-arm64-simulator/bare-fs.bare +0 -0
  54. package/node_modules/bare-fs/prebuilds/ios-x64-simulator/bare-fs.bare +0 -0
  55. package/node_modules/bare-fs/prebuilds/linux-arm64/bare-fs.bare +0 -0
  56. package/node_modules/bare-fs/prebuilds/linux-x64/bare-fs.bare +0 -0
  57. package/node_modules/bare-fs/prebuilds/win32-arm64/bare-fs.bare +0 -0
  58. package/node_modules/bare-fs/prebuilds/win32-x64/bare-fs.bare +0 -0
  59. package/node_modules/bare-fs/promises.d.ts +282 -0
  60. package/node_modules/bare-fs/promises.js +90 -0
  61. package/node_modules/bare-os/CMakeLists.txt +13 -0
  62. package/node_modules/bare-os/LICENSE +201 -0
  63. package/node_modules/bare-os/README.md +11 -0
  64. package/node_modules/bare-os/binding.c +1119 -0
  65. package/node_modules/bare-os/binding.js +1 -0
  66. package/node_modules/bare-os/index.d.ts +109 -0
  67. package/node_modules/bare-os/index.js +99 -0
  68. package/node_modules/bare-os/lib/constants.js +6 -0
  69. package/node_modules/bare-os/lib/errors.js +22 -0
  70. package/node_modules/bare-os/package.json +46 -0
  71. package/node_modules/bare-os/prebuilds/android-arm/bare-os.bare +0 -0
  72. package/node_modules/bare-os/prebuilds/android-arm64/bare-os.bare +0 -0
  73. package/node_modules/bare-os/prebuilds/android-ia32/bare-os.bare +0 -0
  74. package/node_modules/bare-os/prebuilds/android-x64/bare-os.bare +0 -0
  75. package/node_modules/bare-os/prebuilds/darwin-arm64/bare-os.bare +0 -0
  76. package/node_modules/bare-os/prebuilds/darwin-x64/bare-os.bare +0 -0
  77. package/node_modules/bare-os/prebuilds/ios-arm64/bare-os.bare +0 -0
  78. package/node_modules/bare-os/prebuilds/ios-arm64-simulator/bare-os.bare +0 -0
  79. package/node_modules/bare-os/prebuilds/ios-x64-simulator/bare-os.bare +0 -0
  80. package/node_modules/bare-os/prebuilds/linux-arm64/bare-os.bare +0 -0
  81. package/node_modules/bare-os/prebuilds/linux-x64/bare-os.bare +0 -0
  82. package/node_modules/bare-os/prebuilds/win32-arm64/bare-os.bare +0 -0
  83. package/node_modules/bare-os/prebuilds/win32-x64/bare-os.bare +0 -0
  84. package/node_modules/bare-path/LICENSE +201 -0
  85. package/node_modules/bare-path/NOTICE +28 -0
  86. package/node_modules/bare-path/README.md +19 -0
  87. package/node_modules/bare-path/index.js +11 -0
  88. package/node_modules/bare-path/lib/constants.js +11 -0
  89. package/node_modules/bare-path/lib/posix.js +242 -0
  90. package/node_modules/bare-path/lib/shared.js +67 -0
  91. package/node_modules/bare-path/lib/win32.js +513 -0
  92. package/node_modules/bare-path/package.json +36 -0
  93. package/node_modules/bare-stream/LICENSE +201 -0
  94. package/node_modules/bare-stream/README.md +15 -0
  95. package/node_modules/bare-stream/global.js +8 -0
  96. package/node_modules/bare-stream/index.d.ts +237 -0
  97. package/node_modules/bare-stream/index.js +355 -0
  98. package/node_modules/bare-stream/package.json +61 -0
  99. package/node_modules/bare-stream/promises.js +3 -0
  100. package/node_modules/bare-stream/web.d.ts +73 -0
  101. package/node_modules/bare-stream/web.js +229 -0
  102. package/node_modules/bare-url/CMakeLists.txt +27 -0
  103. package/node_modules/bare-url/LICENSE +201 -0
  104. package/node_modules/bare-url/README.md +19 -0
  105. package/node_modules/bare-url/binding.c +188 -0
  106. package/node_modules/bare-url/binding.js +1 -0
  107. package/node_modules/bare-url/global.d.ts +12 -0
  108. package/node_modules/bare-url/global.js +2 -0
  109. package/node_modules/bare-url/index.d.ts +39 -0
  110. package/node_modules/bare-url/index.js +450 -0
  111. package/node_modules/bare-url/lib/errors.d.ts +8 -0
  112. package/node_modules/bare-url/lib/errors.js +38 -0
  113. package/node_modules/bare-url/lib/url-search-params.d.ts +21 -0
  114. package/node_modules/bare-url/lib/url-search-params.js +176 -0
  115. package/node_modules/bare-url/package.json +51 -0
  116. package/node_modules/bare-url/prebuilds/android-arm/bare-url.bare +0 -0
  117. package/node_modules/bare-url/prebuilds/android-arm64/bare-url.bare +0 -0
  118. package/node_modules/bare-url/prebuilds/android-ia32/bare-url.bare +0 -0
  119. package/node_modules/bare-url/prebuilds/android-x64/bare-url.bare +0 -0
  120. package/node_modules/bare-url/prebuilds/darwin-arm64/bare-url.bare +0 -0
  121. package/node_modules/bare-url/prebuilds/darwin-x64/bare-url.bare +0 -0
  122. package/node_modules/bare-url/prebuilds/ios-arm64/bare-url.bare +0 -0
  123. package/node_modules/bare-url/prebuilds/ios-arm64-simulator/bare-url.bare +0 -0
  124. package/node_modules/bare-url/prebuilds/ios-x64-simulator/bare-url.bare +0 -0
  125. package/node_modules/bare-url/prebuilds/linux-arm64/bare-url.bare +0 -0
  126. package/node_modules/bare-url/prebuilds/linux-x64/bare-url.bare +0 -0
  127. package/node_modules/bare-url/prebuilds/win32-arm64/bare-url.bare +0 -0
  128. package/node_modules/bare-url/prebuilds/win32-x64/bare-url.bare +0 -0
  129. package/node_modules/better-sqlite3/deps/download.sh +1 -1
  130. package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.c +122 -81
  131. package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.h +45 -45
  132. package/node_modules/better-sqlite3/lib/database.js +1 -1
  133. package/node_modules/better-sqlite3/package.json +4 -7
  134. package/node_modules/better-sqlite3/src/addon.cpp +47 -0
  135. package/node_modules/better-sqlite3/src/better_sqlite3.cpp +44 -2164
  136. package/node_modules/better-sqlite3/src/objects/backup.cpp +120 -0
  137. package/node_modules/better-sqlite3/src/objects/backup.hpp +36 -0
  138. package/node_modules/better-sqlite3/src/objects/database.cpp +417 -0
  139. package/node_modules/better-sqlite3/src/objects/database.hpp +103 -0
  140. package/node_modules/better-sqlite3/src/objects/statement-iterator.cpp +113 -0
  141. package/node_modules/better-sqlite3/src/objects/statement-iterator.hpp +50 -0
  142. package/node_modules/better-sqlite3/src/objects/statement.cpp +383 -0
  143. package/node_modules/better-sqlite3/src/objects/statement.hpp +58 -0
  144. package/node_modules/better-sqlite3/src/util/bind-map.cpp +73 -0
  145. package/node_modules/better-sqlite3/src/util/binder.cpp +193 -0
  146. package/node_modules/better-sqlite3/src/util/constants.cpp +172 -0
  147. package/node_modules/better-sqlite3/src/util/custom-aggregate.cpp +121 -0
  148. package/node_modules/better-sqlite3/src/util/custom-function.cpp +59 -0
  149. package/node_modules/better-sqlite3/src/util/custom-table.cpp +409 -0
  150. package/node_modules/better-sqlite3/src/util/data-converter.cpp +17 -0
  151. package/node_modules/better-sqlite3/src/util/data.cpp +194 -0
  152. package/node_modules/better-sqlite3/src/util/helpers.cpp +109 -0
  153. package/node_modules/better-sqlite3/src/util/macros.cpp +63 -0
  154. package/node_modules/better-sqlite3/src/util/query-macros.cpp +71 -0
  155. package/node_modules/better-sqlite3/src/util/row-builder.cpp +49 -0
  156. package/node_modules/events-universal/LICENSE +201 -0
  157. package/node_modules/events-universal/README.md +17 -0
  158. package/node_modules/events-universal/bare.js +1 -0
  159. package/node_modules/events-universal/default.js +1 -0
  160. package/node_modules/events-universal/index.js +1 -0
  161. package/node_modules/events-universal/package.json +39 -0
  162. package/node_modules/events-universal/react-native.js +1 -0
  163. package/node_modules/{fs-constants → fast-fifo}/LICENSE +1 -1
  164. package/node_modules/fast-fifo/README.md +78 -0
  165. package/node_modules/fast-fifo/fixed-size.js +39 -0
  166. package/node_modules/fast-fifo/index.js +48 -0
  167. package/node_modules/fast-fifo/package.json +28 -0
  168. package/node_modules/{base64-js → streamx}/LICENSE +1 -1
  169. package/node_modules/streamx/README.md +489 -0
  170. package/node_modules/streamx/index.js +1184 -0
  171. package/node_modules/streamx/package.json +34 -0
  172. package/node_modules/tar-fs/README.md +23 -34
  173. package/node_modules/tar-fs/index.js +211 -184
  174. package/node_modules/tar-fs/package.json +27 -7
  175. package/node_modules/tar-stream/README.md +34 -19
  176. package/node_modules/tar-stream/constants.js +14 -0
  177. package/node_modules/tar-stream/extract.js +341 -192
  178. package/node_modules/tar-stream/headers.js +201 -175
  179. package/node_modules/tar-stream/pack.js +226 -194
  180. package/node_modules/tar-stream/package.json +23 -46
  181. package/node_modules/text-decoder/LICENSE +201 -0
  182. package/node_modules/text-decoder/README.md +36 -0
  183. package/node_modules/text-decoder/index.js +64 -0
  184. package/node_modules/text-decoder/lib/browser-decoder.js +17 -0
  185. package/node_modules/text-decoder/lib/pass-through-decoder.js +19 -0
  186. package/node_modules/text-decoder/lib/utf8-decoder.js +104 -0
  187. package/node_modules/text-decoder/package.json +38 -0
  188. package/package.json +1 -1
  189. package/proto/cline/account.proto +10 -8
  190. package/proto/cline/browser.proto +3 -1
  191. package/proto/cline/checkpoints.proto +5 -3
  192. package/proto/cline/commands.proto +4 -2
  193. package/proto/cline/common.proto +5 -7
  194. package/proto/cline/dictation.proto +3 -1
  195. package/proto/cline/file.proto +36 -34
  196. package/proto/cline/hooks.proto +3 -2
  197. package/proto/cline/mcp.proto +6 -4
  198. package/proto/cline/models.proto +189 -19
  199. package/proto/cline/oca_account.proto +6 -7
  200. package/proto/cline/slash.proto +3 -1
  201. package/proto/cline/state.proto +144 -292
  202. package/proto/cline/task.proto +4 -2
  203. package/proto/cline/ui.proto +25 -24
  204. package/proto/cline/web.proto +3 -1
  205. package/proto/descriptor_set.pb +0 -0
  206. package/proto/host/diff.proto +5 -4
  207. package/proto/host/env.proto +8 -7
  208. package/proto/host/testing.proto +3 -3
  209. package/proto/host/window.proto +2 -2
  210. package/proto/host/workspace.proto +13 -12
  211. package/node_modules/base64-js/README.md +0 -34
  212. package/node_modules/base64-js/base64js.min.js +0 -1
  213. package/node_modules/base64-js/index.d.ts +0 -3
  214. package/node_modules/base64-js/index.js +0 -150
  215. package/node_modules/base64-js/package.json +0 -47
  216. package/node_modules/better-sqlite3/src/better_sqlite3.hpp +0 -1036
  217. package/node_modules/bl/.travis.yml +0 -17
  218. package/node_modules/bl/BufferList.js +0 -396
  219. package/node_modules/bl/LICENSE.md +0 -13
  220. package/node_modules/bl/README.md +0 -247
  221. package/node_modules/bl/bl.js +0 -84
  222. package/node_modules/bl/package.json +0 -37
  223. package/node_modules/bl/test/convert.js +0 -21
  224. package/node_modules/bl/test/indexOf.js +0 -492
  225. package/node_modules/bl/test/isBufferList.js +0 -32
  226. package/node_modules/bl/test/test.js +0 -869
  227. package/node_modules/buffer/AUTHORS.md +0 -70
  228. package/node_modules/buffer/LICENSE +0 -21
  229. package/node_modules/buffer/README.md +0 -410
  230. package/node_modules/buffer/index.d.ts +0 -186
  231. package/node_modules/buffer/index.js +0 -1817
  232. package/node_modules/buffer/package.json +0 -96
  233. package/node_modules/chownr/LICENSE +0 -15
  234. package/node_modules/chownr/README.md +0 -3
  235. package/node_modules/chownr/chownr.js +0 -167
  236. package/node_modules/chownr/package.json +0 -29
  237. package/node_modules/fs-constants/README.md +0 -26
  238. package/node_modules/fs-constants/browser.js +0 -1
  239. package/node_modules/fs-constants/index.js +0 -1
  240. package/node_modules/fs-constants/package.json +0 -19
  241. package/node_modules/ieee754/LICENSE +0 -11
  242. package/node_modules/ieee754/README.md +0 -51
  243. package/node_modules/ieee754/index.d.ts +0 -10
  244. package/node_modules/ieee754/index.js +0 -85
  245. package/node_modules/ieee754/package.json +0 -52
  246. package/node_modules/inherits/LICENSE +0 -16
  247. package/node_modules/inherits/README.md +0 -42
  248. package/node_modules/inherits/inherits.js +0 -9
  249. package/node_modules/inherits/inherits_browser.js +0 -27
  250. package/node_modules/inherits/package.json +0 -29
  251. package/node_modules/readable-stream/CONTRIBUTING.md +0 -38
  252. package/node_modules/readable-stream/GOVERNANCE.md +0 -136
  253. package/node_modules/readable-stream/LICENSE +0 -47
  254. package/node_modules/readable-stream/README.md +0 -106
  255. package/node_modules/readable-stream/errors-browser.js +0 -127
  256. package/node_modules/readable-stream/errors.js +0 -116
  257. package/node_modules/readable-stream/experimentalWarning.js +0 -17
  258. package/node_modules/readable-stream/lib/_stream_duplex.js +0 -126
  259. package/node_modules/readable-stream/lib/_stream_passthrough.js +0 -37
  260. package/node_modules/readable-stream/lib/_stream_readable.js +0 -1027
  261. package/node_modules/readable-stream/lib/_stream_transform.js +0 -190
  262. package/node_modules/readable-stream/lib/_stream_writable.js +0 -641
  263. package/node_modules/readable-stream/lib/internal/streams/async_iterator.js +0 -180
  264. package/node_modules/readable-stream/lib/internal/streams/buffer_list.js +0 -183
  265. package/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -96
  266. package/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +0 -86
  267. package/node_modules/readable-stream/lib/internal/streams/from-browser.js +0 -3
  268. package/node_modules/readable-stream/lib/internal/streams/from.js +0 -52
  269. package/node_modules/readable-stream/lib/internal/streams/pipeline.js +0 -86
  270. package/node_modules/readable-stream/lib/internal/streams/state.js +0 -22
  271. package/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
  272. package/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
  273. package/node_modules/readable-stream/package.json +0 -68
  274. package/node_modules/readable-stream/readable-browser.js +0 -9
  275. package/node_modules/readable-stream/readable.js +0 -16
  276. package/node_modules/string_decoder/LICENSE +0 -48
  277. package/node_modules/string_decoder/README.md +0 -47
  278. package/node_modules/string_decoder/lib/string_decoder.js +0 -296
  279. package/node_modules/string_decoder/package.json +0 -34
  280. package/node_modules/tar-fs/.travis.yml +0 -6
  281. package/node_modules/tar-fs/test/fixtures/a/hello.txt +0 -1
  282. package/node_modules/tar-fs/test/fixtures/b/a/test.txt +0 -1
  283. package/node_modules/tar-fs/test/fixtures/d/file1 +0 -0
  284. package/node_modules/tar-fs/test/fixtures/d/file2 +0 -0
  285. package/node_modules/tar-fs/test/fixtures/d/sub-dir/file5 +0 -0
  286. package/node_modules/tar-fs/test/fixtures/d/sub-files/file3 +0 -0
  287. package/node_modules/tar-fs/test/fixtures/d/sub-files/file4 +0 -0
  288. package/node_modules/tar-fs/test/fixtures/e/directory/.ignore +0 -0
  289. package/node_modules/tar-fs/test/fixtures/e/file +0 -0
  290. package/node_modules/tar-fs/test/fixtures/invalid.tar +0 -0
  291. package/node_modules/tar-fs/test/index.js +0 -346
  292. package/node_modules/tar-stream/sandbox.js +0 -11
  293. package/node_modules/util-deprecate/History.md +0 -16
  294. package/node_modules/util-deprecate/LICENSE +0 -24
  295. package/node_modules/util-deprecate/README.md +0 -53
  296. package/node_modules/util-deprecate/browser.js +0 -67
  297. package/node_modules/util-deprecate/node.js +0 -6
  298. package/node_modules/util-deprecate/package.json +0 -27
  299. package/test-startup.sh +0 -14
@@ -0,0 +1,2238 @@
1
+ #include <assert.h>
2
+ #include <bare.h>
3
+ #include <js.h>
4
+ #include <stdbool.h>
5
+ #include <stdint.h>
6
+ #include <stdlib.h>
7
+ #include <string.h>
8
+ #include <utf.h>
9
+ #include <uv.h>
10
+
11
+ #ifndef _MSC_VER
12
+ #include <unistd.h>
13
+ #endif
14
+
15
+ typedef struct {
16
+ uv_fs_t handle;
17
+
18
+ js_env_t *env;
19
+ js_ref_t *ctx;
20
+ js_ref_t *on_result;
21
+
22
+ bool exiting;
23
+ bool inflight;
24
+
25
+ js_deferred_teardown_t *teardown;
26
+ } bare_fs_req_t;
27
+
28
+ typedef utf8_t bare_fs_path_t[4096 + 1 /* NULL */];
29
+
30
+ typedef struct {
31
+ uv_dir_t *handle;
32
+ } bare_fs_dir_t;
33
+
34
+ typedef struct {
35
+ uv_fs_event_t handle;
36
+
37
+ js_env_t *env;
38
+ js_ref_t *ctx;
39
+ js_ref_t *on_event;
40
+ js_ref_t *on_close;
41
+
42
+ bool exiting;
43
+ bool closing;
44
+
45
+ js_deferred_teardown_t *teardown;
46
+ } bare_fs_watcher_t;
47
+
48
+ typedef uv_dirent_t bare_fs_dirent_t;
49
+
50
+ enum {
51
+ bare_fs_async = true,
52
+ bare_fs_sync = false
53
+ };
54
+
55
+ static inline void
56
+ bare_fs__request_destroy(bare_fs_req_t *req) {
57
+ int err;
58
+
59
+ js_env_t *env = req->env;
60
+
61
+ js_deferred_teardown_t *teardown = req->teardown;
62
+
63
+ uv_fs_req_cleanup(&req->handle);
64
+
65
+ err = js_delete_reference(env, req->on_result);
66
+ assert(err == 0);
67
+
68
+ err = js_delete_reference(env, req->ctx);
69
+ assert(err == 0);
70
+
71
+ err = js_finish_deferred_teardown_callback(teardown);
72
+ assert(err == 0);
73
+ }
74
+
75
+ static void
76
+ bare_fs__on_request_teardown(js_deferred_teardown_t *handle, void *data) {
77
+ int err;
78
+
79
+ bare_fs_req_t *req = (bare_fs_req_t *) data;
80
+
81
+ req->exiting = true;
82
+
83
+ if (req->inflight) {
84
+ err = uv_cancel((uv_req_t *) &req->handle);
85
+ if (err < 0) return;
86
+ }
87
+
88
+ bare_fs__request_destroy(req);
89
+ }
90
+
91
+ static inline void
92
+ bare_fs__on_request_result(uv_fs_t *handle) {
93
+ int err;
94
+
95
+ bare_fs_req_t *req = (bare_fs_req_t *) handle;
96
+
97
+ req->inflight = false;
98
+
99
+ if (req->exiting) return bare_fs__request_destroy(req);
100
+
101
+ js_env_t *env = req->env;
102
+
103
+ js_handle_scope_t *scope;
104
+ err = js_open_handle_scope(env, &scope);
105
+ assert(err == 0);
106
+
107
+ js_value_t *ctx;
108
+ err = js_get_reference_value(env, req->ctx, &ctx);
109
+ assert(err == 0);
110
+
111
+ js_value_t *on_result;
112
+ err = js_get_reference_value(env, req->on_result, &on_result);
113
+ assert(err == 0);
114
+
115
+ int status = handle->result;
116
+
117
+ js_value_t *args[2];
118
+
119
+ if (status < 0) {
120
+ js_value_t *code;
121
+ err = js_create_string_utf8(env, (utf8_t *) uv_err_name(status), -1, &code);
122
+ assert(err == 0);
123
+
124
+ js_value_t *message;
125
+ err = js_create_string_utf8(env, (utf8_t *) uv_strerror(status), -1, &message);
126
+ assert(err == 0);
127
+
128
+ err = js_create_error(env, code, message, &args[0]);
129
+ assert(err == 0);
130
+ } else {
131
+ err = js_get_null(env, &args[0]);
132
+ assert(err == 0);
133
+ }
134
+
135
+ err = js_create_int32(env, status, &args[1]);
136
+ assert(err == 0);
137
+
138
+ js_call_function(env, ctx, on_result, 2, args, NULL);
139
+
140
+ err = js_close_handle_scope(env, scope);
141
+ assert(err == 0);
142
+ }
143
+
144
+ static inline int
145
+ bare_fs__request_pending(js_env_t *env, bare_fs_req_t *req, bool async, int *result) {
146
+ int err;
147
+
148
+ if (async) {
149
+ req->inflight = true;
150
+
151
+ return 0;
152
+ }
153
+
154
+ int status = req->handle.result;
155
+
156
+ if (status < 0) {
157
+ err = js_throw_error(env, uv_err_name(status), uv_strerror(status));
158
+ assert(err == 0);
159
+
160
+ return -1;
161
+ }
162
+
163
+ if (result) *result = status;
164
+
165
+ return 1;
166
+ }
167
+
168
+ static js_value_t *
169
+ bare_fs_request_init(js_env_t *env, js_callback_info_t *info) {
170
+ int err;
171
+
172
+ size_t argc = 2;
173
+ js_value_t *argv[2];
174
+
175
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
176
+ assert(err == 0);
177
+
178
+ assert(argc == 2);
179
+
180
+ js_value_t *handle;
181
+
182
+ bare_fs_req_t *req;
183
+ err = js_create_arraybuffer(env, sizeof(bare_fs_req_t), (void **) &req, &handle);
184
+ assert(err == 0);
185
+
186
+ req->env = env;
187
+ req->exiting = false;
188
+ req->inflight = false;
189
+
190
+ err = js_create_reference(env, argv[0], 1, &req->ctx);
191
+ assert(err == 0);
192
+
193
+ err = js_create_reference(env, argv[1], 1, &req->on_result);
194
+ assert(err == 0);
195
+
196
+ err = js_add_deferred_teardown_callback(env, bare_fs__on_request_teardown, (void *) req, &req->teardown);
197
+ assert(err == 0);
198
+
199
+ return handle;
200
+ }
201
+
202
+ static js_value_t *
203
+ bare_fs_request_destroy(js_env_t *env, js_callback_info_t *info) {
204
+ int err;
205
+
206
+ size_t argc = 1;
207
+ js_value_t *argv[1];
208
+
209
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
210
+ assert(err == 0);
211
+
212
+ assert(argc == 1);
213
+
214
+ bare_fs_req_t *req;
215
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
216
+ assert(err == 0);
217
+
218
+ bare_fs__request_destroy(req);
219
+
220
+ return NULL;
221
+ }
222
+
223
+ static js_value_t *
224
+ bare_fs_request_reset(js_env_t *env, js_callback_info_t *info) {
225
+ int err;
226
+
227
+ size_t argc = 1;
228
+ js_value_t *argv[1];
229
+
230
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
231
+ assert(err == 0);
232
+
233
+ assert(argc == 1);
234
+
235
+ bare_fs_req_t *req;
236
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
237
+ assert(err == 0);
238
+
239
+ uv_fs_req_cleanup(&req->handle);
240
+
241
+ return NULL;
242
+ }
243
+
244
+ static js_value_t *
245
+ bare_fs_request_result_stat(js_env_t *env, js_callback_info_t *info) {
246
+ int err;
247
+
248
+ size_t argc = 1;
249
+ js_value_t *argv[1];
250
+
251
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
252
+ assert(err == 0);
253
+
254
+ assert(argc == 1);
255
+
256
+ bare_fs_req_t *req;
257
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
258
+ assert(err == 0);
259
+
260
+ js_value_t *result;
261
+ err = js_create_array_with_length(env, 14, &result);
262
+ assert(err == 0);
263
+
264
+ uint32_t i = 0;
265
+
266
+ #define V(property) \
267
+ { \
268
+ js_value_t *value; \
269
+ err = js_create_int64(env, req->handle.statbuf.st_##property, &value); \
270
+ assert(err == 0); \
271
+ \
272
+ err = js_set_element(env, result, i++, value); \
273
+ assert(err == 0); \
274
+ }
275
+ V(dev)
276
+ V(mode)
277
+ V(nlink)
278
+ V(uid)
279
+ V(gid)
280
+ V(rdev)
281
+ V(blksize)
282
+ V(ino)
283
+ V(size)
284
+ V(blocks)
285
+ #undef V
286
+
287
+ #define V(property) \
288
+ { \
289
+ uv_timespec_t time = req->handle.statbuf.st_##property; \
290
+ \
291
+ js_value_t *value; \
292
+ err = js_create_int64(env, time.tv_sec * 1e3 + time.tv_nsec / 1e6, &value); \
293
+ assert(err == 0); \
294
+ \
295
+ err = js_set_element(env, result, i++, value); \
296
+ assert(err == 0); \
297
+ }
298
+ V(atim)
299
+ V(mtim)
300
+ V(ctim)
301
+ V(birthtim)
302
+ #undef V
303
+
304
+ return result;
305
+ }
306
+
307
+ static js_value_t *
308
+ bare_fs_request_result_string(js_env_t *env, js_callback_info_t *info) {
309
+ int err;
310
+
311
+ size_t argc = 1;
312
+ js_value_t *argv[1];
313
+
314
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
315
+ assert(err == 0);
316
+
317
+ assert(argc == 1);
318
+
319
+ bare_fs_req_t *req;
320
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
321
+ assert(err == 0);
322
+
323
+ size_t len = strlen(req->handle.ptr);
324
+
325
+ js_value_t *result;
326
+
327
+ void *data;
328
+ err = js_create_arraybuffer(env, len, (void *) &data, &result);
329
+ assert(err == 0);
330
+
331
+ strncpy(data, req->handle.ptr, len);
332
+
333
+ return result;
334
+ }
335
+
336
+ static js_value_t *
337
+ bare_fs_request_result_dir(js_env_t *env, js_callback_info_t *info) {
338
+ int err;
339
+
340
+ size_t argc = 1;
341
+ js_value_t *argv[1];
342
+
343
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
344
+ assert(err == 0);
345
+
346
+ assert(argc == 1);
347
+
348
+ bare_fs_req_t *req;
349
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
350
+ assert(err == 0);
351
+
352
+ js_value_t *result;
353
+
354
+ bare_fs_dir_t *dir;
355
+ err = js_create_arraybuffer(env, sizeof(bare_fs_dir_t), (void **) &dir, &result);
356
+ assert(err == 0);
357
+
358
+ dir->handle = req->handle.ptr;
359
+
360
+ return result;
361
+ }
362
+
363
+ static js_value_t *
364
+ bare_fs_request_result_dirents(js_env_t *env, js_callback_info_t *info) {
365
+ int err;
366
+
367
+ size_t argc = 1;
368
+ js_value_t *argv[1];
369
+
370
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
371
+ assert(err == 0);
372
+
373
+ assert(argc == 1);
374
+
375
+ bare_fs_req_t *req;
376
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
377
+ assert(err == 0);
378
+
379
+ size_t len = req->handle.result;
380
+
381
+ js_value_t *result;
382
+ err = js_create_array_with_length(env, len, &result);
383
+ assert(err == 0);
384
+
385
+ uv_dir_t *dir = req->handle.ptr;
386
+
387
+ for (uint32_t i = 0; i < len; i++) {
388
+ uv_dirent_t *dirent = &dir->dirents[i];
389
+
390
+ js_value_t *entry;
391
+ err = js_create_object(env, &entry);
392
+ assert(err == 0);
393
+
394
+ err = js_set_element(env, result, i, entry);
395
+ assert(err == 0);
396
+
397
+ size_t name_len = strlen(dirent->name);
398
+
399
+ js_value_t *name;
400
+
401
+ void *data;
402
+ err = js_create_arraybuffer(env, name_len, &data, &name);
403
+ assert(err == 0);
404
+
405
+ memcpy(data, dirent->name, name_len);
406
+
407
+ err = js_set_named_property(env, entry, "name", name);
408
+ assert(err == 0);
409
+
410
+ js_value_t *type;
411
+ err = js_create_uint32(env, dirent->type, &type);
412
+ assert(err == 0);
413
+
414
+ err = js_set_named_property(env, entry, "type", type);
415
+ assert(err == 0);
416
+ }
417
+
418
+ return result;
419
+ }
420
+
421
+ static void
422
+ bare_fs__on_open(uv_fs_t *handle) {
423
+ bare_fs__on_request_result(handle);
424
+ }
425
+
426
+ static inline js_value_t *
427
+ bare_fs__open(js_env_t *env, js_callback_info_t *info, bool async) {
428
+ int err;
429
+
430
+ size_t argc = 4;
431
+ js_value_t *argv[4];
432
+
433
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
434
+ assert(err == 0);
435
+
436
+ assert(argc == 4);
437
+
438
+ bare_fs_req_t *req;
439
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
440
+ assert(err == 0);
441
+
442
+ bare_fs_path_t path;
443
+ err = js_get_value_string_utf8(env, argv[1], path, sizeof(bare_fs_path_t), NULL);
444
+ assert(err == 0);
445
+
446
+ int32_t flags;
447
+ err = js_get_value_int32(env, argv[2], &flags);
448
+ assert(err == 0);
449
+
450
+ int32_t mode;
451
+ err = js_get_value_int32(env, argv[3], &mode);
452
+ assert(err == 0);
453
+
454
+ uv_loop_t *loop;
455
+ err = js_get_env_loop(env, &loop);
456
+ assert(err == 0);
457
+
458
+ err = uv_fs_open(loop, &req->handle, (char *) path, flags, mode, async ? bare_fs__on_open : NULL);
459
+ (void) err;
460
+
461
+ int status;
462
+ err = bare_fs__request_pending(env, req, async, &status);
463
+ if (err != 1) return NULL;
464
+
465
+ js_value_t *result;
466
+ err = js_create_int32(env, status, &result);
467
+ assert(err == 0);
468
+
469
+ return result;
470
+ }
471
+
472
+ static js_value_t *
473
+ bare_fs_open(js_env_t *env, js_callback_info_t *info) {
474
+ return bare_fs__open(env, info, bare_fs_async);
475
+ }
476
+
477
+ static js_value_t *
478
+ bare_fs_open_sync(js_env_t *env, js_callback_info_t *info) {
479
+ return bare_fs__open(env, info, bare_fs_sync);
480
+ }
481
+
482
+ static void
483
+ bare_fs__on_close(uv_fs_t *handle) {
484
+ bare_fs__on_request_result(handle);
485
+ }
486
+
487
+ static inline js_value_t *
488
+ bare_fs__close(js_env_t *env, js_callback_info_t *info, bool async) {
489
+ int err;
490
+
491
+ size_t argc = 2;
492
+ js_value_t *argv[2];
493
+
494
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
495
+ assert(err == 0);
496
+
497
+ assert(argc == 2);
498
+
499
+ bare_fs_req_t *req;
500
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
501
+ assert(err == 0);
502
+
503
+ uint32_t fd;
504
+ err = js_get_value_uint32(env, argv[1], &fd);
505
+ assert(err == 0);
506
+
507
+ uv_loop_t *loop;
508
+ err = js_get_env_loop(env, &loop);
509
+ assert(err == 0);
510
+
511
+ err = uv_fs_close(loop, &req->handle, fd, async ? bare_fs__on_close : NULL);
512
+ (void) err;
513
+
514
+ err = bare_fs__request_pending(env, req, async, NULL);
515
+ (void) err;
516
+
517
+ return NULL;
518
+ }
519
+
520
+ static js_value_t *
521
+ bare_fs_close(js_env_t *env, js_callback_info_t *info) {
522
+ return bare_fs__close(env, info, bare_fs_async);
523
+ }
524
+
525
+ static js_value_t *
526
+ bare_fs_close_sync(js_env_t *env, js_callback_info_t *info) {
527
+ return bare_fs__close(env, info, bare_fs_sync);
528
+ }
529
+
530
+ static void
531
+ bare_fs__on_access(uv_fs_t *handle) {
532
+ bare_fs__on_request_result(handle);
533
+ }
534
+
535
+ static inline js_value_t *
536
+ bare_fs__access(js_env_t *env, js_callback_info_t *info, bool async) {
537
+ int err;
538
+
539
+ size_t argc = 3;
540
+ js_value_t *argv[3];
541
+
542
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
543
+ assert(err == 0);
544
+
545
+ assert(argc == 3);
546
+
547
+ bare_fs_req_t *req;
548
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
549
+ assert(err == 0);
550
+
551
+ bare_fs_path_t path;
552
+ err = js_get_value_string_utf8(env, argv[1], path, sizeof(bare_fs_path_t), NULL);
553
+ assert(err == 0);
554
+
555
+ int32_t mode;
556
+ err = js_get_value_int32(env, argv[2], &mode);
557
+ assert(err == 0);
558
+
559
+ uv_loop_t *loop;
560
+ err = js_get_env_loop(env, &loop);
561
+ assert(err == 0);
562
+
563
+ err = uv_fs_access(loop, &req->handle, (char *) path, mode, async ? bare_fs__on_access : NULL);
564
+ (void) err;
565
+
566
+ err = bare_fs__request_pending(env, req, async, NULL);
567
+ (void) err;
568
+
569
+ return NULL;
570
+ }
571
+
572
+ static js_value_t *
573
+ bare_fs_access(js_env_t *env, js_callback_info_t *info) {
574
+ return bare_fs__access(env, info, bare_fs_async);
575
+ }
576
+
577
+ static js_value_t *
578
+ bare_fs_access_sync(js_env_t *env, js_callback_info_t *info) {
579
+ return bare_fs__access(env, info, bare_fs_sync);
580
+ }
581
+
582
+ static void
583
+ bare_fs__on_read(uv_fs_t *handle) {
584
+ bare_fs__on_request_result(handle);
585
+ }
586
+
587
+ static inline js_value_t *
588
+ bare_fs__read(js_env_t *env, js_callback_info_t *info, bool async) {
589
+ int err;
590
+
591
+ size_t argc = 6;
592
+ js_value_t *argv[6];
593
+
594
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
595
+ assert(err == 0);
596
+
597
+ assert(argc == 6);
598
+
599
+ bare_fs_req_t *req;
600
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
601
+ assert(err == 0);
602
+
603
+ uint32_t fd;
604
+ err = js_get_value_uint32(env, argv[1], &fd);
605
+ assert(err == 0);
606
+
607
+ uint8_t *data;
608
+ size_t data_len;
609
+ err = js_get_typedarray_info(env, argv[2], NULL, (void **) &data, &data_len, NULL, NULL);
610
+ assert(err == 0);
611
+
612
+ uint32_t offset;
613
+ err = js_get_value_uint32(env, argv[3], &offset);
614
+ assert(err == 0);
615
+
616
+ uint32_t len;
617
+ err = js_get_value_uint32(env, argv[4], &len);
618
+ assert(err == 0);
619
+
620
+ if (offset >= data_len) len = 0;
621
+ else if (offset + len >= data_len) len = data_len - offset;
622
+
623
+ int64_t pos;
624
+ err = js_get_value_int64(env, argv[5], &pos);
625
+ assert(err == 0);
626
+
627
+ uv_loop_t *loop;
628
+ err = js_get_env_loop(env, &loop);
629
+ assert(err == 0);
630
+
631
+ uv_buf_t buf = uv_buf_init((void *) (data + offset), len);
632
+
633
+ err = uv_fs_read(loop, &req->handle, fd, &buf, 1, pos, async ? bare_fs__on_read : NULL);
634
+ (void) err;
635
+
636
+ int status;
637
+ err = bare_fs__request_pending(env, req, async, &status);
638
+ if (err != 1) return NULL;
639
+
640
+ js_value_t *result;
641
+ err = js_create_int32(env, status, &result);
642
+ assert(err == 0);
643
+
644
+ return result;
645
+ }
646
+
647
+ static js_value_t *
648
+ bare_fs_read(js_env_t *env, js_callback_info_t *info) {
649
+ return bare_fs__read(env, info, bare_fs_async);
650
+ }
651
+
652
+ static js_value_t *
653
+ bare_fs_read_sync(js_env_t *env, js_callback_info_t *info) {
654
+ return bare_fs__read(env, info, bare_fs_sync);
655
+ }
656
+
657
+ static void
658
+ bare_fs__on_readv(uv_fs_t *handle) {
659
+ bare_fs__on_request_result(handle);
660
+ }
661
+
662
+ static inline js_value_t *
663
+ bare_fs__readv(js_env_t *env, js_callback_info_t *info, bool async) {
664
+ int err;
665
+
666
+ size_t argc = 4;
667
+ js_value_t *argv[4];
668
+
669
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
670
+ assert(err == 0);
671
+
672
+ assert(argc == 4);
673
+
674
+ bare_fs_req_t *req;
675
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
676
+ assert(err == 0);
677
+
678
+ uint32_t fd;
679
+ err = js_get_value_uint32(env, argv[1], &fd);
680
+ assert(err == 0);
681
+
682
+ int64_t pos;
683
+ err = js_get_value_int64(env, argv[3], &pos);
684
+ assert(err == 0);
685
+
686
+ uv_loop_t *loop;
687
+ err = js_get_env_loop(env, &loop);
688
+ assert(err == 0);
689
+
690
+ js_value_t *arr = argv[2];
691
+
692
+ uint32_t bufs_len;
693
+ err = js_get_array_length(env, arr, &bufs_len);
694
+ assert(err == 0);
695
+
696
+ uv_buf_t *bufs = malloc(sizeof(uv_buf_t) * bufs_len);
697
+
698
+ js_value_t **elements = malloc(bufs_len * sizeof(js_value_t *));
699
+ err = js_get_array_elements(env, arr, elements, bufs_len, 0, NULL);
700
+ assert(err == 0);
701
+
702
+ for (uint32_t i = 0; i < bufs_len; i++) {
703
+ js_value_t *item = elements[i];
704
+
705
+ uv_buf_t *buf = &bufs[i];
706
+ err = js_get_typedarray_info(env, item, NULL, (void **) &buf->base, (size_t *) &buf->len, NULL, NULL);
707
+ assert(err == 0);
708
+ }
709
+
710
+ err = uv_fs_read(loop, &req->handle, fd, bufs, bufs_len, pos, async ? bare_fs__on_readv : NULL);
711
+ (void) err;
712
+
713
+ free(elements);
714
+ free(bufs);
715
+
716
+ int status;
717
+ err = bare_fs__request_pending(env, req, async, &status);
718
+ if (err != 1) return NULL;
719
+
720
+ js_value_t *result;
721
+ err = js_create_int32(env, status, &result);
722
+ assert(err == 0);
723
+
724
+ return result;
725
+ }
726
+
727
+ static js_value_t *
728
+ bare_fs_readv(js_env_t *env, js_callback_info_t *info) {
729
+ return bare_fs__readv(env, info, bare_fs_async);
730
+ }
731
+
732
+ static js_value_t *
733
+ bare_fs_readv_sync(js_env_t *env, js_callback_info_t *info) {
734
+ return bare_fs__readv(env, info, bare_fs_sync);
735
+ }
736
+
737
+ static void
738
+ bare_fs__on_write(uv_fs_t *handle) {
739
+ bare_fs__on_request_result(handle);
740
+ }
741
+
742
+ static inline js_value_t *
743
+ bare_fs__write(js_env_t *env, js_callback_info_t *info, bool async) {
744
+ int err;
745
+
746
+ size_t argc = 6;
747
+ js_value_t *argv[6];
748
+
749
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
750
+ assert(err == 0);
751
+
752
+ assert(argc == 6);
753
+
754
+ bare_fs_req_t *req;
755
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
756
+ assert(err == 0);
757
+
758
+ uint32_t fd;
759
+ err = js_get_value_uint32(env, argv[1], &fd);
760
+ assert(err == 0);
761
+
762
+ uint8_t *data;
763
+ size_t data_len;
764
+ err = js_get_typedarray_info(env, argv[2], NULL, (void **) &data, &data_len, NULL, NULL);
765
+ assert(err == 0);
766
+
767
+ uint32_t offset;
768
+ err = js_get_value_uint32(env, argv[3], &offset);
769
+ assert(err == 0);
770
+
771
+ uint32_t len;
772
+ err = js_get_value_uint32(env, argv[4], &len);
773
+ assert(err == 0);
774
+
775
+ if (offset >= data_len) len = 0;
776
+ else if (offset + len >= data_len) len = data_len - offset;
777
+
778
+ int64_t pos;
779
+ err = js_get_value_int64(env, argv[5], &pos);
780
+ assert(err == 0);
781
+
782
+ uv_loop_t *loop;
783
+ err = js_get_env_loop(env, &loop);
784
+ assert(err == 0);
785
+
786
+ uv_buf_t buf = uv_buf_init((void *) (data + offset), len);
787
+
788
+ err = uv_fs_write(loop, &req->handle, fd, &buf, 1, pos, async ? bare_fs__on_write : NULL);
789
+ (void) err;
790
+
791
+ int status;
792
+ err = bare_fs__request_pending(env, req, async, &status);
793
+ if (err != 1) return NULL;
794
+
795
+ js_value_t *result;
796
+ err = js_create_int32(env, status, &result);
797
+ assert(err == 0);
798
+
799
+ return result;
800
+ }
801
+
802
+ static js_value_t *
803
+ bare_fs_write(js_env_t *env, js_callback_info_t *info) {
804
+ return bare_fs__write(env, info, bare_fs_async);
805
+ }
806
+
807
+ static js_value_t *
808
+ bare_fs_write_sync(js_env_t *env, js_callback_info_t *info) {
809
+ return bare_fs__write(env, info, bare_fs_sync);
810
+ }
811
+
812
+ static void
813
+ bare_fs__on_writev(uv_fs_t *handle) {
814
+ bare_fs__on_request_result(handle);
815
+ }
816
+
817
+ static inline js_value_t *
818
+ bare_fs__writev(js_env_t *env, js_callback_info_t *info, bool async) {
819
+ int err;
820
+
821
+ size_t argc = 4;
822
+ js_value_t *argv[4];
823
+
824
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
825
+ assert(err == 0);
826
+
827
+ assert(argc == 4);
828
+
829
+ bare_fs_req_t *req;
830
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
831
+ assert(err == 0);
832
+
833
+ uint32_t fd;
834
+ err = js_get_value_uint32(env, argv[1], &fd);
835
+ assert(err == 0);
836
+
837
+ int64_t pos;
838
+ err = js_get_value_int64(env, argv[3], &pos);
839
+ assert(err == 0);
840
+
841
+ uv_loop_t *loop;
842
+ err = js_get_env_loop(env, &loop);
843
+ assert(err == 0);
844
+
845
+ js_value_t *arr = argv[2];
846
+
847
+ uint32_t bufs_len;
848
+ err = js_get_array_length(env, arr, &bufs_len);
849
+ assert(err == 0);
850
+
851
+ uv_buf_t *bufs = malloc(sizeof(uv_buf_t) * bufs_len);
852
+
853
+ js_value_t **elements = malloc(bufs_len * sizeof(js_value_t *));
854
+
855
+ err = js_get_array_elements(env, arr, elements, bufs_len, 0, NULL);
856
+ assert(err == 0);
857
+
858
+ for (uint32_t i = 0; i < bufs_len; i++) {
859
+ js_value_t *item = elements[i];
860
+
861
+ uv_buf_t *buf = &bufs[i];
862
+ err = js_get_typedarray_info(env, item, NULL, (void **) &buf->base, (size_t *) &buf->len, NULL, NULL);
863
+ assert(err == 0);
864
+ }
865
+
866
+ err = uv_fs_write(loop, &req->handle, fd, bufs, bufs_len, pos, async ? bare_fs__on_writev : NULL);
867
+ (void) err;
868
+
869
+ free(elements);
870
+ free(bufs);
871
+
872
+ int status;
873
+ err = bare_fs__request_pending(env, req, async, &status);
874
+ if (err != 1) return NULL;
875
+
876
+ js_value_t *result;
877
+ err = js_create_int32(env, status, &result);
878
+ assert(err == 0);
879
+
880
+ return result;
881
+ }
882
+
883
+ static js_value_t *
884
+ bare_fs_writev(js_env_t *env, js_callback_info_t *info) {
885
+ return bare_fs__writev(env, info, bare_fs_async);
886
+ }
887
+
888
+ static js_value_t *
889
+ bare_fs_writev_sync(js_env_t *env, js_callback_info_t *info) {
890
+ return bare_fs__writev(env, info, bare_fs_sync);
891
+ }
892
+
893
+ static void
894
+ bare_fs__on_ftruncate(uv_fs_t *handle) {
895
+ bare_fs__on_request_result(handle);
896
+ }
897
+
898
+ static inline js_value_t *
899
+ bare_fs__ftruncate(js_env_t *env, js_callback_info_t *info, bool async) {
900
+ int err;
901
+
902
+ size_t argc = 3;
903
+ js_value_t *argv[3];
904
+
905
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
906
+ assert(err == 0);
907
+
908
+ assert(argc == 3);
909
+
910
+ bare_fs_req_t *req;
911
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
912
+ assert(err == 0);
913
+
914
+ uint32_t fd;
915
+ err = js_get_value_uint32(env, argv[1], &fd);
916
+ assert(err == 0);
917
+
918
+ int64_t len;
919
+ err = js_get_value_int64(env, argv[2], &len);
920
+ assert(err == 0);
921
+
922
+ uv_loop_t *loop;
923
+ err = js_get_env_loop(env, &loop);
924
+ assert(err == 0);
925
+
926
+ err = uv_fs_ftruncate(loop, &req->handle, fd, len, async ? bare_fs__on_ftruncate : NULL);
927
+ (void) err;
928
+
929
+ err = bare_fs__request_pending(env, req, async, NULL);
930
+ (void) err;
931
+
932
+ return NULL;
933
+ }
934
+
935
+ static js_value_t *
936
+ bare_fs_ftruncate(js_env_t *env, js_callback_info_t *info) {
937
+ return bare_fs__ftruncate(env, info, bare_fs_async);
938
+ }
939
+
940
+ static js_value_t *
941
+ bare_fs_ftruncate_sync(js_env_t *env, js_callback_info_t *info) {
942
+ return bare_fs__ftruncate(env, info, bare_fs_sync);
943
+ }
944
+
945
+ static void
946
+ bare_fs__on_chmod(uv_fs_t *handle) {
947
+ bare_fs__on_request_result(handle);
948
+ }
949
+
950
+ static inline js_value_t *
951
+ bare_fs__chmod(js_env_t *env, js_callback_info_t *info, bool async) {
952
+ int err;
953
+
954
+ size_t argc = 3;
955
+ js_value_t *argv[3];
956
+
957
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
958
+ assert(err == 0);
959
+
960
+ assert(argc == 3);
961
+
962
+ bare_fs_req_t *req;
963
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
964
+ assert(err == 0);
965
+
966
+ bare_fs_path_t path;
967
+ err = js_get_value_string_utf8(env, argv[1], path, sizeof(bare_fs_path_t), NULL);
968
+ assert(err == 0);
969
+
970
+ int32_t mode;
971
+ err = js_get_value_int32(env, argv[2], &mode);
972
+ assert(err == 0);
973
+
974
+ uv_loop_t *loop;
975
+ err = js_get_env_loop(env, &loop);
976
+ assert(err == 0);
977
+
978
+ err = uv_fs_chmod(loop, &req->handle, (char *) path, mode, async ? bare_fs__on_chmod : NULL);
979
+ (void) err;
980
+
981
+ err = bare_fs__request_pending(env, req, async, NULL);
982
+ (void) err;
983
+
984
+ return NULL;
985
+ }
986
+
987
+ static js_value_t *
988
+ bare_fs_chmod(js_env_t *env, js_callback_info_t *info) {
989
+ return bare_fs__chmod(env, info, bare_fs_async);
990
+ }
991
+
992
+ static js_value_t *
993
+ bare_fs_chmod_sync(js_env_t *env, js_callback_info_t *info) {
994
+ return bare_fs__chmod(env, info, bare_fs_sync);
995
+ }
996
+
997
+ static void
998
+ bare_fs__on_fchmod(uv_fs_t *handle) {
999
+ bare_fs__on_request_result(handle);
1000
+ }
1001
+
1002
+ static inline js_value_t *
1003
+ bare_fs__fchmod(js_env_t *env, js_callback_info_t *info, bool async) {
1004
+ int err;
1005
+
1006
+ size_t argc = 3;
1007
+ js_value_t *argv[3];
1008
+
1009
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
1010
+ assert(err == 0);
1011
+
1012
+ assert(argc == 3);
1013
+
1014
+ bare_fs_req_t *req;
1015
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
1016
+ assert(err == 0);
1017
+
1018
+ uint32_t fd;
1019
+ err = js_get_value_uint32(env, argv[1], &fd);
1020
+ assert(err == 0);
1021
+
1022
+ int32_t mode;
1023
+ err = js_get_value_int32(env, argv[2], &mode);
1024
+ assert(err == 0);
1025
+
1026
+ uv_loop_t *loop;
1027
+ err = js_get_env_loop(env, &loop);
1028
+ assert(err == 0);
1029
+
1030
+ err = uv_fs_fchmod(loop, &req->handle, fd, mode, async ? bare_fs__on_fchmod : NULL);
1031
+ (void) err;
1032
+
1033
+ err = bare_fs__request_pending(env, req, async, NULL);
1034
+ (void) err;
1035
+
1036
+ return NULL;
1037
+ }
1038
+
1039
+ static js_value_t *
1040
+ bare_fs_fchmod(js_env_t *env, js_callback_info_t *info) {
1041
+ return bare_fs__fchmod(env, info, bare_fs_async);
1042
+ }
1043
+
1044
+ static js_value_t *
1045
+ bare_fs_fchmod_sync(js_env_t *env, js_callback_info_t *info) {
1046
+ return bare_fs__fchmod(env, info, bare_fs_sync);
1047
+ }
1048
+
1049
+ static void
1050
+ bare_fs__on_utimes(uv_fs_t *handle) {
1051
+ bare_fs__on_request_result(handle);
1052
+ }
1053
+
1054
+ static inline js_value_t *
1055
+ bare_fs__utimes(js_env_t *env, js_callback_info_t *info, bool async) {
1056
+ int err;
1057
+
1058
+ size_t argc = 4;
1059
+ js_value_t *argv[4];
1060
+
1061
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
1062
+ assert(err == 0);
1063
+
1064
+ assert(argc == 4);
1065
+
1066
+ bare_fs_req_t *req;
1067
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
1068
+ assert(err == 0);
1069
+
1070
+ bare_fs_path_t path;
1071
+ err = js_get_value_string_utf8(env, argv[1], path, sizeof(bare_fs_path_t), NULL);
1072
+ assert(err == 0);
1073
+
1074
+ double atime;
1075
+ err = js_get_value_double(env, argv[2], &atime);
1076
+ assert(err == 0);
1077
+
1078
+ double mtime;
1079
+ err = js_get_value_double(env, argv[3], &mtime);
1080
+ assert(err == 0);
1081
+
1082
+ uv_loop_t *loop;
1083
+ err = js_get_env_loop(env, &loop);
1084
+ assert(err == 0);
1085
+
1086
+ err = uv_fs_utime(loop, &req->handle, (char *) path, atime, mtime, async ? bare_fs__on_utimes : NULL);
1087
+ (void) err;
1088
+
1089
+ err = bare_fs__request_pending(env, req, async, NULL);
1090
+ (void) err;
1091
+
1092
+ return NULL;
1093
+ }
1094
+
1095
+ static js_value_t *
1096
+ bare_fs_utimes(js_env_t *env, js_callback_info_t *info) {
1097
+ return bare_fs__utimes(env, info, bare_fs_async);
1098
+ }
1099
+
1100
+ static js_value_t *
1101
+ bare_fs_utimes_sync(js_env_t *env, js_callback_info_t *info) {
1102
+ return bare_fs__utimes(env, info, bare_fs_sync);
1103
+ }
1104
+
1105
+ static void
1106
+ bare_fs__on_rename(uv_fs_t *handle) {
1107
+ bare_fs__on_request_result(handle);
1108
+ }
1109
+
1110
+ static inline js_value_t *
1111
+ bare_fs__rename(js_env_t *env, js_callback_info_t *info, bool async) {
1112
+ int err;
1113
+
1114
+ size_t argc = 3;
1115
+ js_value_t *argv[3];
1116
+
1117
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
1118
+ assert(err == 0);
1119
+
1120
+ assert(argc == 3);
1121
+
1122
+ bare_fs_req_t *req;
1123
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
1124
+ assert(err == 0);
1125
+
1126
+ bare_fs_path_t src;
1127
+ err = js_get_value_string_utf8(env, argv[1], src, sizeof(bare_fs_path_t), NULL);
1128
+ assert(err == 0);
1129
+
1130
+ bare_fs_path_t dst;
1131
+ err = js_get_value_string_utf8(env, argv[2], dst, sizeof(bare_fs_path_t), NULL);
1132
+ assert(err == 0);
1133
+
1134
+ uv_loop_t *loop;
1135
+ err = js_get_env_loop(env, &loop);
1136
+ assert(err == 0);
1137
+
1138
+ err = uv_fs_rename(loop, &req->handle, (char *) src, (char *) dst, async ? bare_fs__on_rename : NULL);
1139
+ (void) err;
1140
+
1141
+ err = bare_fs__request_pending(env, req, async, NULL);
1142
+ (void) err;
1143
+
1144
+ return NULL;
1145
+ }
1146
+
1147
+ static js_value_t *
1148
+ bare_fs_rename(js_env_t *env, js_callback_info_t *info) {
1149
+ return bare_fs__rename(env, info, bare_fs_async);
1150
+ }
1151
+
1152
+ static js_value_t *
1153
+ bare_fs_rename_sync(js_env_t *env, js_callback_info_t *info) {
1154
+ return bare_fs__rename(env, info, bare_fs_sync);
1155
+ }
1156
+
1157
+ static void
1158
+ bare_fs__on_copyfile(uv_fs_t *handle) {
1159
+ bare_fs__on_request_result(handle);
1160
+ }
1161
+
1162
+ static inline js_value_t *
1163
+ bare_fs__copyfile(js_env_t *env, js_callback_info_t *info, bool async) {
1164
+ int err;
1165
+
1166
+ size_t argc = 4;
1167
+ js_value_t *argv[4];
1168
+
1169
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
1170
+ assert(err == 0);
1171
+
1172
+ assert(argc == 4);
1173
+
1174
+ bare_fs_req_t *req;
1175
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
1176
+ assert(err == 0);
1177
+
1178
+ bare_fs_path_t src;
1179
+ err = js_get_value_string_utf8(env, argv[1], src, sizeof(bare_fs_path_t), NULL);
1180
+ assert(err == 0);
1181
+
1182
+ bare_fs_path_t dst;
1183
+ err = js_get_value_string_utf8(env, argv[2], dst, sizeof(bare_fs_path_t), NULL);
1184
+ assert(err == 0);
1185
+
1186
+ int32_t mode;
1187
+ err = js_get_value_int32(env, argv[3], &mode);
1188
+ assert(err == 0);
1189
+
1190
+ uv_loop_t *loop;
1191
+ err = js_get_env_loop(env, &loop);
1192
+ assert(err == 0);
1193
+
1194
+ err = uv_fs_copyfile(loop, &req->handle, (char *) src, (char *) dst, mode, async ? bare_fs__on_copyfile : NULL);
1195
+ (void) err;
1196
+
1197
+ err = bare_fs__request_pending(env, req, async, NULL);
1198
+ (void) err;
1199
+
1200
+ return NULL;
1201
+ }
1202
+
1203
+ static js_value_t *
1204
+ bare_fs_copyfile(js_env_t *env, js_callback_info_t *info) {
1205
+ return bare_fs__copyfile(env, info, bare_fs_async);
1206
+ }
1207
+
1208
+ static js_value_t *
1209
+ bare_fs_copyfile_sync(js_env_t *env, js_callback_info_t *info) {
1210
+ return bare_fs__copyfile(env, info, bare_fs_sync);
1211
+ }
1212
+
1213
+ static void
1214
+ bare_fs__on_mkdir(uv_fs_t *handle) {
1215
+ bare_fs__on_request_result(handle);
1216
+ }
1217
+
1218
+ static inline js_value_t *
1219
+ bare_fs__mkdir(js_env_t *env, js_callback_info_t *info, bool async) {
1220
+ int err;
1221
+
1222
+ size_t argc = 3;
1223
+ js_value_t *argv[3];
1224
+
1225
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
1226
+ assert(err == 0);
1227
+
1228
+ assert(argc == 3);
1229
+
1230
+ bare_fs_req_t *req;
1231
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
1232
+ assert(err == 0);
1233
+
1234
+ bare_fs_path_t path;
1235
+ err = js_get_value_string_utf8(env, argv[1], path, sizeof(bare_fs_path_t), NULL);
1236
+ assert(err == 0);
1237
+
1238
+ int32_t mode;
1239
+ err = js_get_value_int32(env, argv[2], &mode);
1240
+ assert(err == 0);
1241
+
1242
+ uv_loop_t *loop;
1243
+ err = js_get_env_loop(env, &loop);
1244
+ assert(err == 0);
1245
+
1246
+ err = uv_fs_mkdir(loop, &req->handle, (char *) path, mode, async ? bare_fs__on_mkdir : NULL);
1247
+ (void) err;
1248
+
1249
+ err = bare_fs__request_pending(env, req, async, NULL);
1250
+ (void) err;
1251
+
1252
+ return NULL;
1253
+ }
1254
+
1255
+ static js_value_t *
1256
+ bare_fs_mkdir(js_env_t *env, js_callback_info_t *info) {
1257
+ return bare_fs__mkdir(env, info, bare_fs_async);
1258
+ }
1259
+
1260
+ static js_value_t *
1261
+ bare_fs_mkdir_sync(js_env_t *env, js_callback_info_t *info) {
1262
+ return bare_fs__mkdir(env, info, bare_fs_sync);
1263
+ }
1264
+
1265
+ static void
1266
+ bare_fs__on_rmdir(uv_fs_t *handle) {
1267
+ bare_fs__on_request_result(handle);
1268
+ }
1269
+
1270
+ static inline js_value_t *
1271
+ bare_fs__rmdir(js_env_t *env, js_callback_info_t *info, bool async) {
1272
+ int err;
1273
+
1274
+ size_t argc = 2;
1275
+ js_value_t *argv[2];
1276
+
1277
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
1278
+ assert(err == 0);
1279
+
1280
+ assert(argc == 2);
1281
+
1282
+ bare_fs_req_t *req;
1283
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
1284
+ assert(err == 0);
1285
+
1286
+ bare_fs_path_t path;
1287
+ err = js_get_value_string_utf8(env, argv[1], path, sizeof(bare_fs_path_t), NULL);
1288
+ assert(err == 0);
1289
+
1290
+ uv_loop_t *loop;
1291
+ err = js_get_env_loop(env, &loop);
1292
+ assert(err == 0);
1293
+
1294
+ err = uv_fs_rmdir(loop, &req->handle, (char *) path, async ? bare_fs__on_rmdir : NULL);
1295
+ (void) err;
1296
+
1297
+ err = bare_fs__request_pending(env, req, async, NULL);
1298
+ (void) err;
1299
+
1300
+ return NULL;
1301
+ }
1302
+
1303
+ static js_value_t *
1304
+ bare_fs_rmdir(js_env_t *env, js_callback_info_t *info) {
1305
+ return bare_fs__rmdir(env, info, bare_fs_async);
1306
+ }
1307
+
1308
+ static js_value_t *
1309
+ bare_fs_rmdir_sync(js_env_t *env, js_callback_info_t *info) {
1310
+ return bare_fs__rmdir(env, info, bare_fs_sync);
1311
+ }
1312
+
1313
+ static void
1314
+ bare_fs__on_stat(uv_fs_t *handle) {
1315
+ bare_fs__on_request_result(handle);
1316
+ }
1317
+
1318
+ static inline js_value_t *
1319
+ bare_fs__stat(js_env_t *env, js_callback_info_t *info, bool async) {
1320
+ int err;
1321
+
1322
+ size_t argc = 2;
1323
+ js_value_t *argv[2];
1324
+
1325
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
1326
+ assert(err == 0);
1327
+
1328
+ assert(argc == 2);
1329
+
1330
+ bare_fs_req_t *req;
1331
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
1332
+ assert(err == 0);
1333
+
1334
+ bare_fs_path_t path;
1335
+ err = js_get_value_string_utf8(env, argv[1], path, sizeof(bare_fs_path_t), NULL);
1336
+ assert(err == 0);
1337
+
1338
+ uv_loop_t *loop;
1339
+ err = js_get_env_loop(env, &loop);
1340
+ assert(err == 0);
1341
+
1342
+ err = uv_fs_stat(loop, &req->handle, (char *) path, async ? bare_fs__on_stat : NULL);
1343
+ (void) err;
1344
+
1345
+ err = bare_fs__request_pending(env, req, async, NULL);
1346
+ (void) err;
1347
+
1348
+ return NULL;
1349
+ }
1350
+
1351
+ static js_value_t *
1352
+ bare_fs_stat(js_env_t *env, js_callback_info_t *info) {
1353
+ return bare_fs__stat(env, info, bare_fs_async);
1354
+ }
1355
+
1356
+ static js_value_t *
1357
+ bare_fs_stat_sync(js_env_t *env, js_callback_info_t *info) {
1358
+ return bare_fs__stat(env, info, bare_fs_sync);
1359
+ }
1360
+
1361
+ static void
1362
+ bare_fs__on_lstat(uv_fs_t *handle) {
1363
+ bare_fs__on_request_result(handle);
1364
+ }
1365
+
1366
+ static inline js_value_t *
1367
+ bare_fs__lstat(js_env_t *env, js_callback_info_t *info, bool async) {
1368
+ int err;
1369
+
1370
+ size_t argc = 2;
1371
+ js_value_t *argv[2];
1372
+
1373
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
1374
+ assert(err == 0);
1375
+
1376
+ assert(argc == 2);
1377
+
1378
+ bare_fs_req_t *req;
1379
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
1380
+ assert(err == 0);
1381
+
1382
+ bare_fs_path_t path;
1383
+ err = js_get_value_string_utf8(env, argv[1], path, sizeof(bare_fs_path_t), NULL);
1384
+ assert(err == 0);
1385
+
1386
+ uv_loop_t *loop;
1387
+ err = js_get_env_loop(env, &loop);
1388
+ assert(err == 0);
1389
+
1390
+ err = uv_fs_lstat(loop, &req->handle, (char *) path, async ? bare_fs__on_lstat : NULL);
1391
+ (void) err;
1392
+
1393
+ err = bare_fs__request_pending(env, req, async, NULL);
1394
+ (void) err;
1395
+
1396
+ return NULL;
1397
+ }
1398
+
1399
+ static js_value_t *
1400
+ bare_fs_lstat(js_env_t *env, js_callback_info_t *info) {
1401
+ return bare_fs__lstat(env, info, bare_fs_async);
1402
+ }
1403
+
1404
+ static js_value_t *
1405
+ bare_fs_lstat_sync(js_env_t *env, js_callback_info_t *info) {
1406
+ return bare_fs__lstat(env, info, bare_fs_sync);
1407
+ }
1408
+
1409
+ static void
1410
+ bare_fs__on_fstat(uv_fs_t *handle) {
1411
+ bare_fs__on_request_result(handle);
1412
+ }
1413
+
1414
+ static inline js_value_t *
1415
+ bare_fs__fstat(js_env_t *env, js_callback_info_t *info, bool async) {
1416
+ int err;
1417
+
1418
+ size_t argc = 2;
1419
+ js_value_t *argv[2];
1420
+
1421
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
1422
+ assert(err == 0);
1423
+
1424
+ assert(argc == 2);
1425
+
1426
+ bare_fs_req_t *req;
1427
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
1428
+ assert(err == 0);
1429
+
1430
+ uint32_t fd;
1431
+ err = js_get_value_uint32(env, argv[1], &fd);
1432
+ assert(err == 0);
1433
+
1434
+ uv_loop_t *loop;
1435
+ err = js_get_env_loop(env, &loop);
1436
+ assert(err == 0);
1437
+
1438
+ err = uv_fs_fstat(loop, &req->handle, fd, async ? bare_fs__on_fstat : NULL);
1439
+ (void) err;
1440
+
1441
+ err = bare_fs__request_pending(env, req, async, NULL);
1442
+ (void) err;
1443
+
1444
+ return NULL;
1445
+ }
1446
+
1447
+ static js_value_t *
1448
+ bare_fs_fstat(js_env_t *env, js_callback_info_t *info) {
1449
+ return bare_fs__fstat(env, info, bare_fs_async);
1450
+ }
1451
+
1452
+ static js_value_t *
1453
+ bare_fs_fstat_sync(js_env_t *env, js_callback_info_t *info) {
1454
+ return bare_fs__fstat(env, info, bare_fs_sync);
1455
+ }
1456
+
1457
+ static void
1458
+ bare_fs__on_unlink(uv_fs_t *handle) {
1459
+ bare_fs__on_request_result(handle);
1460
+ }
1461
+
1462
+ static inline js_value_t *
1463
+ bare_fs__unlink(js_env_t *env, js_callback_info_t *info, bool async) {
1464
+ int err;
1465
+
1466
+ size_t argc = 2;
1467
+ js_value_t *argv[2];
1468
+
1469
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
1470
+ assert(err == 0);
1471
+
1472
+ assert(argc == 2);
1473
+
1474
+ bare_fs_req_t *req;
1475
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
1476
+ assert(err == 0);
1477
+
1478
+ bare_fs_path_t path;
1479
+ err = js_get_value_string_utf8(env, argv[1], path, sizeof(bare_fs_path_t), NULL);
1480
+ assert(err == 0);
1481
+
1482
+ uv_loop_t *loop;
1483
+ err = js_get_env_loop(env, &loop);
1484
+ assert(err == 0);
1485
+
1486
+ err = uv_fs_unlink(loop, &req->handle, (char *) path, async ? bare_fs__on_unlink : NULL);
1487
+ (void) err;
1488
+
1489
+ err = bare_fs__request_pending(env, req, async, NULL);
1490
+ (void) err;
1491
+
1492
+ return NULL;
1493
+ }
1494
+
1495
+ static js_value_t *
1496
+ bare_fs_unlink(js_env_t *env, js_callback_info_t *info) {
1497
+ return bare_fs__unlink(env, info, bare_fs_async);
1498
+ }
1499
+
1500
+ static js_value_t *
1501
+ bare_fs_unlink_sync(js_env_t *env, js_callback_info_t *info) {
1502
+ return bare_fs__unlink(env, info, bare_fs_sync);
1503
+ }
1504
+
1505
+ static void
1506
+ bare_fs__on_realpath(uv_fs_t *handle) {
1507
+ bare_fs__on_request_result(handle);
1508
+ }
1509
+
1510
+ static inline js_value_t *
1511
+ bare_fs__realpath(js_env_t *env, js_callback_info_t *info, bool async) {
1512
+ int err;
1513
+
1514
+ size_t argc = 2;
1515
+ js_value_t *argv[2];
1516
+
1517
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
1518
+ assert(err == 0);
1519
+
1520
+ assert(argc == 2);
1521
+
1522
+ bare_fs_req_t *req;
1523
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
1524
+ assert(err == 0);
1525
+
1526
+ bare_fs_path_t path;
1527
+ err = js_get_value_string_utf8(env, argv[1], path, sizeof(bare_fs_path_t), NULL);
1528
+ assert(err == 0);
1529
+
1530
+ uv_loop_t *loop;
1531
+ err = js_get_env_loop(env, &loop);
1532
+ assert(err == 0);
1533
+
1534
+ err = uv_fs_realpath(loop, &req->handle, (char *) path, async ? bare_fs__on_realpath : NULL);
1535
+ (void) err;
1536
+
1537
+ err = bare_fs__request_pending(env, req, async, NULL);
1538
+ (void) err;
1539
+
1540
+ return NULL;
1541
+ }
1542
+
1543
+ static js_value_t *
1544
+ bare_fs_realpath(js_env_t *env, js_callback_info_t *info) {
1545
+ return bare_fs__realpath(env, info, bare_fs_async);
1546
+ }
1547
+
1548
+ static js_value_t *
1549
+ bare_fs_realpath_sync(js_env_t *env, js_callback_info_t *info) {
1550
+ return bare_fs__realpath(env, info, bare_fs_sync);
1551
+ }
1552
+
1553
+ static void
1554
+ bare_fs__on_readlink(uv_fs_t *handle) {
1555
+ bare_fs__on_request_result(handle);
1556
+ }
1557
+
1558
+ static inline js_value_t *
1559
+ bare_fs__readlink(js_env_t *env, js_callback_info_t *info, bool async) {
1560
+ int err;
1561
+
1562
+ size_t argc = 2;
1563
+ js_value_t *argv[2];
1564
+
1565
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
1566
+ assert(err == 0);
1567
+
1568
+ assert(argc == 2);
1569
+
1570
+ bare_fs_req_t *req;
1571
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
1572
+ assert(err == 0);
1573
+
1574
+ bare_fs_path_t path;
1575
+ err = js_get_value_string_utf8(env, argv[1], path, sizeof(bare_fs_path_t), NULL);
1576
+ assert(err == 0);
1577
+
1578
+ uv_loop_t *loop;
1579
+ err = js_get_env_loop(env, &loop);
1580
+ assert(err == 0);
1581
+
1582
+ err = uv_fs_readlink(loop, &req->handle, (char *) path, async ? bare_fs__on_readlink : NULL);
1583
+ (void) err;
1584
+
1585
+ err = bare_fs__request_pending(env, req, async, NULL);
1586
+ (void) err;
1587
+
1588
+ return NULL;
1589
+ }
1590
+
1591
+ static js_value_t *
1592
+ bare_fs_readlink(js_env_t *env, js_callback_info_t *info) {
1593
+ return bare_fs__readlink(env, info, bare_fs_async);
1594
+ }
1595
+
1596
+ static js_value_t *
1597
+ bare_fs_readlink_sync(js_env_t *env, js_callback_info_t *info) {
1598
+ return bare_fs__readlink(env, info, bare_fs_sync);
1599
+ }
1600
+
1601
+ static void
1602
+ bare_fs__on_symlink(uv_fs_t *handle) {
1603
+ bare_fs__on_request_result(handle);
1604
+ }
1605
+
1606
+ static inline js_value_t *
1607
+ bare_fs__symlink(js_env_t *env, js_callback_info_t *info, bool async) {
1608
+ int err;
1609
+
1610
+ size_t argc = 4;
1611
+ js_value_t *argv[4];
1612
+
1613
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
1614
+ assert(err == 0);
1615
+
1616
+ assert(argc == 4);
1617
+
1618
+ bare_fs_req_t *req;
1619
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
1620
+ assert(err == 0);
1621
+
1622
+ bare_fs_path_t target;
1623
+ err = js_get_value_string_utf8(env, argv[1], target, sizeof(bare_fs_path_t), NULL);
1624
+ assert(err == 0);
1625
+
1626
+ bare_fs_path_t path;
1627
+ err = js_get_value_string_utf8(env, argv[2], path, sizeof(bare_fs_path_t), NULL);
1628
+ assert(err == 0);
1629
+
1630
+ int32_t flags;
1631
+ err = js_get_value_int32(env, argv[3], &flags);
1632
+ assert(err == 0);
1633
+
1634
+ uv_loop_t *loop;
1635
+ err = js_get_env_loop(env, &loop);
1636
+ assert(err == 0);
1637
+
1638
+ err = uv_fs_symlink(loop, &req->handle, (char *) target, (char *) path, flags, async ? bare_fs__on_symlink : NULL);
1639
+ (void) err;
1640
+
1641
+ err = bare_fs__request_pending(env, req, async, NULL);
1642
+ (void) err;
1643
+
1644
+ return NULL;
1645
+ }
1646
+
1647
+ static js_value_t *
1648
+ bare_fs_symlink(js_env_t *env, js_callback_info_t *info) {
1649
+ return bare_fs__symlink(env, info, bare_fs_async);
1650
+ }
1651
+
1652
+ static js_value_t *
1653
+ bare_fs_symlink_sync(js_env_t *env, js_callback_info_t *info) {
1654
+ return bare_fs__symlink(env, info, bare_fs_sync);
1655
+ }
1656
+
1657
+ static void
1658
+ bare_fs__on_opendir(uv_fs_t *handle) {
1659
+ bare_fs__on_request_result(handle);
1660
+ }
1661
+
1662
+ static inline js_value_t *
1663
+ bare_fs__opendir(js_env_t *env, js_callback_info_t *info, bool async) {
1664
+ int err;
1665
+
1666
+ size_t argc = 2;
1667
+ js_value_t *argv[2];
1668
+
1669
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
1670
+ assert(err == 0);
1671
+
1672
+ assert(argc == 2);
1673
+
1674
+ bare_fs_req_t *req;
1675
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
1676
+ assert(err == 0);
1677
+
1678
+ bare_fs_path_t path;
1679
+ err = js_get_value_string_utf8(env, argv[1], path, sizeof(bare_fs_path_t), NULL);
1680
+ assert(err == 0);
1681
+
1682
+ uv_loop_t *loop;
1683
+ err = js_get_env_loop(env, &loop);
1684
+ assert(err == 0);
1685
+
1686
+ err = uv_fs_opendir(loop, &req->handle, (char *) path, async ? bare_fs__on_opendir : NULL);
1687
+ (void) err;
1688
+
1689
+ err = bare_fs__request_pending(env, req, async, NULL);
1690
+ (void) err;
1691
+
1692
+ return NULL;
1693
+ }
1694
+
1695
+ static js_value_t *
1696
+ bare_fs_opendir(js_env_t *env, js_callback_info_t *info) {
1697
+ return bare_fs__opendir(env, info, bare_fs_async);
1698
+ }
1699
+
1700
+ static js_value_t *
1701
+ bare_fs_opendir_sync(js_env_t *env, js_callback_info_t *info) {
1702
+ return bare_fs__opendir(env, info, bare_fs_sync);
1703
+ }
1704
+
1705
+ static void
1706
+ bare_fs__on_readdir(uv_fs_t *handle) {
1707
+ bare_fs__on_request_result(handle);
1708
+ }
1709
+
1710
+ static inline js_value_t *
1711
+ bare_fs__readdir(js_env_t *env, js_callback_info_t *info, bool async) {
1712
+ int err;
1713
+
1714
+ size_t argc = 3;
1715
+ js_value_t *argv[3];
1716
+
1717
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
1718
+ assert(err == 0);
1719
+
1720
+ assert(argc == 3);
1721
+
1722
+ bare_fs_req_t *req;
1723
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
1724
+ assert(err == 0);
1725
+
1726
+ bare_fs_dir_t *dir;
1727
+ err = js_get_arraybuffer_info(env, argv[1], (void **) &dir, NULL);
1728
+ assert(err == 0);
1729
+
1730
+ uint32_t capacity;
1731
+ err = js_get_value_uint32(env, argv[2], &capacity);
1732
+ assert(err == 0);
1733
+
1734
+ js_value_t *result;
1735
+
1736
+ bare_fs_dirent_t *dirents;
1737
+ err = js_create_arraybuffer(env, capacity * sizeof(bare_fs_dirent_t), (void **) &dirents, &result);
1738
+ assert(err == 0);
1739
+
1740
+ uv_loop_t *loop;
1741
+ err = js_get_env_loop(env, &loop);
1742
+ assert(err == 0);
1743
+
1744
+ dir->handle->dirents = dirents;
1745
+ dir->handle->nentries = capacity;
1746
+
1747
+ err = uv_fs_readdir(loop, &req->handle, dir->handle, async ? bare_fs__on_readdir : NULL);
1748
+ (void) err;
1749
+
1750
+ err = bare_fs__request_pending(env, req, async, NULL);
1751
+ (void) err;
1752
+
1753
+ return result;
1754
+ }
1755
+
1756
+ static js_value_t *
1757
+ bare_fs_readdir(js_env_t *env, js_callback_info_t *info) {
1758
+ return bare_fs__readdir(env, info, bare_fs_async);
1759
+ }
1760
+
1761
+ static js_value_t *
1762
+ bare_fs_readdir_sync(js_env_t *env, js_callback_info_t *info) {
1763
+ return bare_fs__readdir(env, info, bare_fs_sync);
1764
+ }
1765
+
1766
+ static void
1767
+ bare_fs__on_closedir(uv_fs_t *handle) {
1768
+ bare_fs__on_request_result(handle);
1769
+ }
1770
+
1771
+ static inline js_value_t *
1772
+ bare_fs__closedir(js_env_t *env, js_callback_info_t *info, bool async) {
1773
+ int err;
1774
+
1775
+ size_t argc = 2;
1776
+ js_value_t *argv[2];
1777
+
1778
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
1779
+ assert(err == 0);
1780
+
1781
+ assert(argc == 2);
1782
+
1783
+ bare_fs_req_t *req;
1784
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
1785
+ assert(err == 0);
1786
+
1787
+ bare_fs_dir_t *dir;
1788
+ err = js_get_arraybuffer_info(env, argv[1], (void **) &dir, NULL);
1789
+ assert(err == 0);
1790
+
1791
+ uv_loop_t *loop;
1792
+ err = js_get_env_loop(env, &loop);
1793
+ assert(err == 0);
1794
+
1795
+ err = uv_fs_closedir(loop, &req->handle, dir->handle, async ? bare_fs__on_closedir : NULL);
1796
+ (void) err;
1797
+
1798
+ err = bare_fs__request_pending(env, req, async, NULL);
1799
+ (void) err;
1800
+
1801
+ return NULL;
1802
+ }
1803
+
1804
+ static js_value_t *
1805
+ bare_fs_closedir(js_env_t *env, js_callback_info_t *info) {
1806
+ return bare_fs__closedir(env, info, bare_fs_async);
1807
+ }
1808
+
1809
+ static js_value_t *
1810
+ bare_fs_closedir_sync(js_env_t *env, js_callback_info_t *info) {
1811
+ return bare_fs__closedir(env, info, bare_fs_sync);
1812
+ }
1813
+
1814
+ static void
1815
+ bare_fs__on_watcher_event(uv_fs_event_t *handle, const char *filename, int events, int status) {
1816
+ int err;
1817
+
1818
+ bare_fs_watcher_t *watcher = (bare_fs_watcher_t *) handle;
1819
+
1820
+ if (watcher->exiting) return;
1821
+
1822
+ js_env_t *env = watcher->env;
1823
+
1824
+ js_handle_scope_t *scope;
1825
+ err = js_open_handle_scope(env, &scope);
1826
+ assert(err == 0);
1827
+
1828
+ js_value_t *ctx;
1829
+ err = js_get_reference_value(env, watcher->ctx, &ctx);
1830
+ assert(err == 0);
1831
+
1832
+ js_value_t *on_event;
1833
+ err = js_get_reference_value(env, watcher->on_event, &on_event);
1834
+ assert(err == 0);
1835
+
1836
+ js_value_t *args[3];
1837
+
1838
+ if (status < 0) {
1839
+ js_value_t *code;
1840
+ err = js_create_string_utf8(env, (utf8_t *) uv_err_name(status), -1, &code);
1841
+ assert(err == 0);
1842
+
1843
+ js_value_t *message;
1844
+ err = js_create_string_utf8(env, (utf8_t *) uv_strerror(status), -1, &message);
1845
+ assert(err == 0);
1846
+
1847
+ err = js_create_error(env, code, message, &args[0]);
1848
+ assert(err == 0);
1849
+
1850
+ err = js_create_int32(env, 0, &args[1]);
1851
+ assert(err == 0);
1852
+
1853
+ err = js_get_null(env, &args[2]);
1854
+ assert(err == 0);
1855
+ } else {
1856
+ err = js_get_null(env, &args[0]);
1857
+ assert(err == 0);
1858
+
1859
+ err = js_create_int32(env, events, &args[1]);
1860
+ assert(err == 0);
1861
+
1862
+ size_t len = strlen(filename);
1863
+
1864
+ void *data;
1865
+ err = js_create_arraybuffer(env, len, &data, &args[2]);
1866
+ assert(err == 0);
1867
+
1868
+ memcpy(data, (void *) filename, len);
1869
+ }
1870
+
1871
+ js_call_function(env, ctx, on_event, 3, args, NULL);
1872
+
1873
+ err = js_close_handle_scope(env, scope);
1874
+ assert(err == 0);
1875
+ }
1876
+
1877
+ static void
1878
+ bare_fs__on_watcher_close(uv_handle_t *handle) {
1879
+ int err;
1880
+
1881
+ bare_fs_watcher_t *watcher = (bare_fs_watcher_t *) handle;
1882
+
1883
+ js_env_t *env = watcher->env;
1884
+
1885
+ js_deferred_teardown_t *teardown = watcher->teardown;
1886
+
1887
+ if (watcher->exiting) {
1888
+ err = js_delete_reference(env, watcher->on_event);
1889
+ assert(err == 0);
1890
+
1891
+ err = js_delete_reference(env, watcher->on_close);
1892
+ assert(err == 0);
1893
+
1894
+ err = js_delete_reference(env, watcher->ctx);
1895
+ assert(err == 0);
1896
+ } else {
1897
+ js_handle_scope_t *scope;
1898
+ err = js_open_handle_scope(env, &scope);
1899
+ assert(err == 0);
1900
+
1901
+ js_value_t *ctx;
1902
+ err = js_get_reference_value(env, watcher->ctx, &ctx);
1903
+ assert(err == 0);
1904
+
1905
+ js_value_t *on_close;
1906
+ err = js_get_reference_value(env, watcher->on_close, &on_close);
1907
+ assert(err == 0);
1908
+
1909
+ err = js_delete_reference(env, watcher->on_event);
1910
+ assert(err == 0);
1911
+
1912
+ err = js_delete_reference(env, watcher->on_close);
1913
+ assert(err == 0);
1914
+
1915
+ err = js_delete_reference(env, watcher->ctx);
1916
+ assert(err == 0);
1917
+
1918
+ js_call_function(env, ctx, on_close, 0, NULL, NULL);
1919
+
1920
+ err = js_close_handle_scope(env, scope);
1921
+ assert(err == 0);
1922
+ }
1923
+
1924
+ err = js_finish_deferred_teardown_callback(teardown);
1925
+ assert(err == 0);
1926
+ }
1927
+
1928
+ static void
1929
+ bare_fs__on_watcher_teardown(js_deferred_teardown_t *handle, void *data) {
1930
+ bare_fs_watcher_t *watcher = (bare_fs_watcher_t *) data;
1931
+
1932
+ watcher->exiting = true;
1933
+
1934
+ if (watcher->closing) return;
1935
+
1936
+ uv_close((uv_handle_t *) &watcher->handle, bare_fs__on_watcher_close);
1937
+ }
1938
+
1939
+ static js_value_t *
1940
+ bare_fs_watcher_init(js_env_t *env, js_callback_info_t *info) {
1941
+ int err;
1942
+
1943
+ size_t argc = 5;
1944
+ js_value_t *argv[5];
1945
+
1946
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
1947
+ assert(err == 0);
1948
+
1949
+ assert(argc == 5);
1950
+
1951
+ bare_fs_path_t path;
1952
+ err = js_get_value_string_utf8(env, argv[0], path, sizeof(bare_fs_path_t), NULL);
1953
+ assert(err == 0);
1954
+
1955
+ bool recursive;
1956
+ err = js_get_value_bool(env, argv[1], &recursive);
1957
+ assert(err == 0);
1958
+
1959
+ js_value_t *result;
1960
+
1961
+ bare_fs_watcher_t *watcher;
1962
+ err = js_create_arraybuffer(env, sizeof(bare_fs_watcher_t), (void **) &watcher, &result);
1963
+ assert(err == 0);
1964
+
1965
+ uv_loop_t *loop;
1966
+ err = js_get_env_loop(env, &loop);
1967
+ assert(err == 0);
1968
+
1969
+ err = uv_fs_event_init(loop, &watcher->handle);
1970
+
1971
+ if (err < 0) {
1972
+ err = js_throw_error(env, uv_err_name(err), uv_strerror(err));
1973
+ assert(err == 0);
1974
+
1975
+ return NULL;
1976
+ }
1977
+
1978
+ err = uv_fs_event_start(&watcher->handle, bare_fs__on_watcher_event, (char *) path, recursive ? UV_FS_EVENT_RECURSIVE : 0);
1979
+ assert(err == 0);
1980
+
1981
+ watcher->env = env;
1982
+ watcher->closing = false;
1983
+ watcher->exiting = false;
1984
+
1985
+ err = js_create_reference(env, argv[2], 1, &watcher->ctx);
1986
+ assert(err == 0);
1987
+
1988
+ err = js_create_reference(env, argv[3], 1, &watcher->on_event);
1989
+ assert(err == 0);
1990
+
1991
+ err = js_create_reference(env, argv[4], 1, &watcher->on_close);
1992
+ assert(err == 0);
1993
+
1994
+ err = js_add_deferred_teardown_callback(env, bare_fs__on_watcher_teardown, (void *) watcher, &watcher->teardown);
1995
+ assert(err == 0);
1996
+
1997
+ return result;
1998
+ }
1999
+
2000
+ static js_value_t *
2001
+ bare_fs_watcher_close(js_env_t *env, js_callback_info_t *info) {
2002
+ int err;
2003
+
2004
+ size_t argc = 1;
2005
+ js_value_t *argv[1];
2006
+
2007
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
2008
+ assert(err == 0);
2009
+
2010
+ assert(argc == 1);
2011
+
2012
+ bare_fs_watcher_t *watcher;
2013
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &watcher, NULL);
2014
+ assert(err == 0);
2015
+
2016
+ err = uv_fs_event_stop(&watcher->handle);
2017
+ assert(err == 0);
2018
+
2019
+ watcher->closing = true;
2020
+
2021
+ uv_close((uv_handle_t *) &watcher->handle, bare_fs__on_watcher_close);
2022
+
2023
+ return NULL;
2024
+ }
2025
+
2026
+ static js_value_t *
2027
+ bare_fs_watcher_ref(js_env_t *env, js_callback_info_t *info) {
2028
+ int err;
2029
+
2030
+ size_t argc = 1;
2031
+ js_value_t *argv[1];
2032
+
2033
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
2034
+ assert(err == 0);
2035
+
2036
+ assert(argc == 1);
2037
+
2038
+ bare_fs_watcher_t *watcher;
2039
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &watcher, NULL);
2040
+ assert(err == 0);
2041
+
2042
+ uv_ref((uv_handle_t *) &watcher->handle);
2043
+
2044
+ return NULL;
2045
+ }
2046
+
2047
+ static js_value_t *
2048
+ bare_fs_watcher_unref(js_env_t *env, js_callback_info_t *info) {
2049
+ int err;
2050
+
2051
+ size_t argc = 1;
2052
+ js_value_t *argv[1];
2053
+
2054
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
2055
+ assert(err == 0);
2056
+
2057
+ assert(argc == 1);
2058
+
2059
+ bare_fs_watcher_t *watcher;
2060
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &watcher, NULL);
2061
+ assert(err == 0);
2062
+
2063
+ uv_unref((uv_handle_t *) &watcher->handle);
2064
+
2065
+ return NULL;
2066
+ }
2067
+
2068
+ static js_value_t *
2069
+ bare_fs_exports(js_env_t *env, js_value_t *exports) {
2070
+ int err;
2071
+
2072
+ #define V(name, fn) \
2073
+ { \
2074
+ js_value_t *val; \
2075
+ err = js_create_function(env, name, -1, fn, NULL, &val); \
2076
+ assert(err == 0); \
2077
+ err = js_set_named_property(env, exports, name, val); \
2078
+ assert(err == 0); \
2079
+ }
2080
+
2081
+ V("requestInit", bare_fs_request_init)
2082
+ V("requestDestroy", bare_fs_request_destroy)
2083
+ V("requestReset", bare_fs_request_reset)
2084
+ V("requestResultStat", bare_fs_request_result_stat)
2085
+ V("requestResultString", bare_fs_request_result_string)
2086
+ V("requestResultDir", bare_fs_request_result_dir)
2087
+ V("requestResultDirents", bare_fs_request_result_dirents)
2088
+
2089
+ V("open", bare_fs_open)
2090
+ V("openSync", bare_fs_open_sync)
2091
+ V("close", bare_fs_close)
2092
+ V("closeSync", bare_fs_close_sync)
2093
+ V("access", bare_fs_access)
2094
+ V("accessSync", bare_fs_access_sync)
2095
+ V("read", bare_fs_read)
2096
+ V("readSync", bare_fs_read_sync)
2097
+ V("readv", bare_fs_readv)
2098
+ V("write", bare_fs_write)
2099
+ V("writeSync", bare_fs_write_sync)
2100
+ V("writev", bare_fs_writev)
2101
+ V("ftruncate", bare_fs_ftruncate)
2102
+ V("ftruncateSync", bare_fs_ftruncate_sync)
2103
+ V("chmod", bare_fs_chmod)
2104
+ V("chmodSync", bare_fs_chmod_sync)
2105
+ V("fchmod", bare_fs_fchmod)
2106
+ V("fchmodSync", bare_fs_fchmod_sync)
2107
+ V("utimes", bare_fs_utimes)
2108
+ V("utimesSync", bare_fs_utimes_sync)
2109
+ V("rename", bare_fs_rename)
2110
+ V("renameSync", bare_fs_rename_sync)
2111
+ V("copyfile", bare_fs_copyfile)
2112
+ V("copyfileSync", bare_fs_copyfile_sync)
2113
+ V("mkdir", bare_fs_mkdir)
2114
+ V("mkdirSync", bare_fs_mkdir_sync)
2115
+ V("rmdir", bare_fs_rmdir)
2116
+ V("rmdirSync", bare_fs_rmdir_sync)
2117
+ V("stat", bare_fs_stat)
2118
+ V("statSync", bare_fs_stat_sync)
2119
+ V("lstat", bare_fs_lstat)
2120
+ V("lstatSync", bare_fs_lstat_sync)
2121
+ V("fstat", bare_fs_fstat)
2122
+ V("fstatSync", bare_fs_fstat_sync)
2123
+ V("unlink", bare_fs_unlink)
2124
+ V("unlinkSync", bare_fs_unlink_sync)
2125
+ V("realpath", bare_fs_realpath)
2126
+ V("realpathSync", bare_fs_realpath_sync)
2127
+ V("readlink", bare_fs_readlink)
2128
+ V("readlinkSync", bare_fs_readlink_sync)
2129
+ V("symlink", bare_fs_symlink)
2130
+ V("symlinkSync", bare_fs_symlink_sync)
2131
+ V("opendir", bare_fs_opendir)
2132
+ V("opendirSync", bare_fs_opendir_sync)
2133
+ V("readdir", bare_fs_readdir)
2134
+ V("readdirSync", bare_fs_readdir_sync)
2135
+ V("closedir", bare_fs_closedir)
2136
+ V("closedirSync", bare_fs_closedir_sync)
2137
+
2138
+ V("watcherInit", bare_fs_watcher_init)
2139
+ V("watcherClose", bare_fs_watcher_close)
2140
+ V("watcherRef", bare_fs_watcher_ref)
2141
+ V("watcherUnref", bare_fs_watcher_unref)
2142
+ #undef V
2143
+
2144
+ #define V(name) \
2145
+ { \
2146
+ js_value_t *val; \
2147
+ err = js_create_uint32(env, name, &val); \
2148
+ assert(err == 0); \
2149
+ err = js_set_named_property(env, exports, #name, val); \
2150
+ assert(err == 0); \
2151
+ }
2152
+
2153
+ V(O_RDWR)
2154
+ V(O_RDONLY)
2155
+ V(O_WRONLY)
2156
+ V(O_CREAT)
2157
+ V(O_TRUNC)
2158
+ V(O_APPEND)
2159
+
2160
+ #ifdef F_OK
2161
+ V(F_OK)
2162
+ #endif
2163
+ #ifdef R_OK
2164
+ V(R_OK)
2165
+ #endif
2166
+ #ifdef W_OK
2167
+ V(W_OK)
2168
+ #endif
2169
+ #ifdef X_OK
2170
+ V(X_OK)
2171
+ #endif
2172
+
2173
+ V(S_IFMT)
2174
+ V(S_IFREG)
2175
+ V(S_IFDIR)
2176
+ V(S_IFCHR)
2177
+ V(S_IFLNK)
2178
+ #ifdef S_IFBLK
2179
+ V(S_IFBLK)
2180
+ #endif
2181
+ #ifdef S_IFIFO
2182
+ V(S_IFIFO)
2183
+ #endif
2184
+ #ifdef S_IFSOCK
2185
+ V(S_IFSOCK)
2186
+ #endif
2187
+
2188
+ #ifdef S_IRUSR
2189
+ V(S_IRUSR)
2190
+ #endif
2191
+ #ifdef S_IWUSR
2192
+ V(S_IWUSR)
2193
+ #endif
2194
+ #ifdef S_IXUSR
2195
+ V(S_IXUSR)
2196
+ #endif
2197
+ #ifdef S_IRGRP
2198
+ V(S_IRGRP)
2199
+ #endif
2200
+ #ifdef S_IWGRP
2201
+ V(S_IWGRP)
2202
+ #endif
2203
+ #ifdef S_IXGRP
2204
+ V(S_IXGRP)
2205
+ #endif
2206
+ #ifdef S_IROTH
2207
+ V(S_IROTH)
2208
+ #endif
2209
+ #ifdef S_IWOTH
2210
+ V(S_IWOTH)
2211
+ #endif
2212
+ #ifdef S_IXOTH
2213
+ V(S_IXOTH)
2214
+ #endif
2215
+
2216
+ V(UV_DIRENT_UNKNOWN)
2217
+ V(UV_DIRENT_FILE)
2218
+ V(UV_DIRENT_DIR)
2219
+ V(UV_DIRENT_LINK)
2220
+ V(UV_DIRENT_FIFO)
2221
+ V(UV_DIRENT_SOCKET)
2222
+ V(UV_DIRENT_CHAR)
2223
+ V(UV_DIRENT_BLOCK)
2224
+
2225
+ V(UV_FS_COPYFILE_EXCL)
2226
+ V(UV_FS_COPYFILE_FICLONE)
2227
+ V(UV_FS_COPYFILE_FICLONE_FORCE)
2228
+ V(UV_FS_SYMLINK_DIR)
2229
+ V(UV_FS_SYMLINK_JUNCTION)
2230
+
2231
+ V(UV_RENAME)
2232
+ V(UV_CHANGE)
2233
+ #undef V
2234
+
2235
+ return exports;
2236
+ }
2237
+
2238
+ BARE_MODULE(bare_fs, bare_fs_exports)