zsyscall_solaris_amd64.go 29 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085
  1. // mksyscall_solaris.pl syscall_solaris.go syscall_solaris_amd64.go
  2. // MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
  3. // +build amd64,solaris
  4. package unix
  5. import (
  6. "syscall"
  7. "unsafe"
  8. )
  9. //go:cgo_import_dynamic libc_getgroups getgroups "libc.so"
  10. //go:cgo_import_dynamic libc_setgroups setgroups "libc.so"
  11. //go:cgo_import_dynamic libc_fcntl fcntl "libc.so"
  12. //go:cgo_import_dynamic libsocket_accept accept "libsocket.so"
  13. //go:cgo_import_dynamic libsocket_sendmsg sendmsg "libsocket.so"
  14. //go:cgo_import_dynamic libc_access access "libc.so"
  15. //go:cgo_import_dynamic libc_adjtime adjtime "libc.so"
  16. //go:cgo_import_dynamic libc_chdir chdir "libc.so"
  17. //go:cgo_import_dynamic libc_chmod chmod "libc.so"
  18. //go:cgo_import_dynamic libc_chown chown "libc.so"
  19. //go:cgo_import_dynamic libc_chroot chroot "libc.so"
  20. //go:cgo_import_dynamic libc_close close "libc.so"
  21. //go:cgo_import_dynamic libc_dup dup "libc.so"
  22. //go:cgo_import_dynamic libc_exit exit "libc.so"
  23. //go:cgo_import_dynamic libc_fchdir fchdir "libc.so"
  24. //go:cgo_import_dynamic libc_fchmod fchmod "libc.so"
  25. //go:cgo_import_dynamic libc_fchown fchown "libc.so"
  26. //go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so"
  27. //go:cgo_import_dynamic libc_fstat fstat "libc.so"
  28. //go:cgo_import_dynamic libc_getdents getdents "libc.so"
  29. //go:cgo_import_dynamic libc_getgid getgid "libc.so"
  30. //go:cgo_import_dynamic libc_getpid getpid "libc.so"
  31. //go:cgo_import_dynamic libc_geteuid geteuid "libc.so"
  32. //go:cgo_import_dynamic libc_getegid getegid "libc.so"
  33. //go:cgo_import_dynamic libc_getppid getppid "libc.so"
  34. //go:cgo_import_dynamic libc_getpriority getpriority "libc.so"
  35. //go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so"
  36. //go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so"
  37. //go:cgo_import_dynamic libc_getuid getuid "libc.so"
  38. //go:cgo_import_dynamic libc_kill kill "libc.so"
  39. //go:cgo_import_dynamic libc_lchown lchown "libc.so"
  40. //go:cgo_import_dynamic libc_link link "libc.so"
  41. //go:cgo_import_dynamic libsocket_listen listen "libsocket.so"
  42. //go:cgo_import_dynamic libc_lstat lstat "libc.so"
  43. //go:cgo_import_dynamic libc_madvise madvise "libc.so"
  44. //go:cgo_import_dynamic libc_mkdir mkdir "libc.so"
  45. //go:cgo_import_dynamic libc_mknod mknod "libc.so"
  46. //go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so"
  47. //go:cgo_import_dynamic libc_open open "libc.so"
  48. //go:cgo_import_dynamic libc_pathconf pathconf "libc.so"
  49. //go:cgo_import_dynamic libc_pread pread "libc.so"
  50. //go:cgo_import_dynamic libc_pwrite pwrite "libc.so"
  51. //go:cgo_import_dynamic libc_read read "libc.so"
  52. //go:cgo_import_dynamic libc_readlink readlink "libc.so"
  53. //go:cgo_import_dynamic libc_rename rename "libc.so"
  54. //go:cgo_import_dynamic libc_rmdir rmdir "libc.so"
  55. //go:cgo_import_dynamic libc_lseek lseek "libc.so"
  56. //go:cgo_import_dynamic libc_setegid setegid "libc.so"
  57. //go:cgo_import_dynamic libc_seteuid seteuid "libc.so"
  58. //go:cgo_import_dynamic libc_setgid setgid "libc.so"
  59. //go:cgo_import_dynamic libc_setpgid setpgid "libc.so"
  60. //go:cgo_import_dynamic libc_setpriority setpriority "libc.so"
  61. //go:cgo_import_dynamic libc_setregid setregid "libc.so"
  62. //go:cgo_import_dynamic libc_setreuid setreuid "libc.so"
  63. //go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so"
  64. //go:cgo_import_dynamic libc_setsid setsid "libc.so"
  65. //go:cgo_import_dynamic libc_setuid setuid "libc.so"
  66. //go:cgo_import_dynamic libsocket_shutdown shutdown "libsocket.so"
  67. //go:cgo_import_dynamic libc_stat stat "libc.so"
  68. //go:cgo_import_dynamic libc_symlink symlink "libc.so"
  69. //go:cgo_import_dynamic libc_sync sync "libc.so"
  70. //go:cgo_import_dynamic libc_truncate truncate "libc.so"
  71. //go:cgo_import_dynamic libc_fsync fsync "libc.so"
  72. //go:cgo_import_dynamic libc_ftruncate ftruncate "libc.so"
  73. //go:cgo_import_dynamic libc_umask umask "libc.so"
  74. //go:cgo_import_dynamic libc_unlink unlink "libc.so"
  75. //go:cgo_import_dynamic libc_utimes utimes "libc.so"
  76. //go:cgo_import_dynamic libsocket_bind bind "libsocket.so"
  77. //go:cgo_import_dynamic libsocket_connect connect "libsocket.so"
  78. //go:cgo_import_dynamic libc_mmap mmap "libc.so"
  79. //go:cgo_import_dynamic libc_munmap munmap "libc.so"
  80. //go:cgo_import_dynamic libsocket_sendto sendto "libsocket.so"
  81. //go:cgo_import_dynamic libsocket_socket socket "libsocket.so"
  82. //go:cgo_import_dynamic libsocket_socketpair socketpair "libsocket.so"
  83. //go:cgo_import_dynamic libc_write write "libc.so"
  84. //go:cgo_import_dynamic libsocket_getsockopt getsockopt "libsocket.so"
  85. //go:cgo_import_dynamic libsocket_getpeername getpeername "libsocket.so"
  86. //go:cgo_import_dynamic libsocket_getsockname getsockname "libsocket.so"
  87. //go:cgo_import_dynamic libsocket_setsockopt setsockopt "libsocket.so"
  88. //go:cgo_import_dynamic libsocket_recvfrom recvfrom "libsocket.so"
  89. //go:cgo_import_dynamic libsocket_recvmsg recvmsg "libsocket.so"
  90. //go:linkname procgetgroups libc_getgroups
  91. //go:linkname procsetgroups libc_setgroups
  92. //go:linkname procfcntl libc_fcntl
  93. //go:linkname procaccept libsocket_accept
  94. //go:linkname procsendmsg libsocket_sendmsg
  95. //go:linkname procAccess libc_access
  96. //go:linkname procAdjtime libc_adjtime
  97. //go:linkname procChdir libc_chdir
  98. //go:linkname procChmod libc_chmod
  99. //go:linkname procChown libc_chown
  100. //go:linkname procChroot libc_chroot
  101. //go:linkname procClose libc_close
  102. //go:linkname procDup libc_dup
  103. //go:linkname procExit libc_exit
  104. //go:linkname procFchdir libc_fchdir
  105. //go:linkname procFchmod libc_fchmod
  106. //go:linkname procFchown libc_fchown
  107. //go:linkname procFpathconf libc_fpathconf
  108. //go:linkname procFstat libc_fstat
  109. //go:linkname procGetdents libc_getdents
  110. //go:linkname procGetgid libc_getgid
  111. //go:linkname procGetpid libc_getpid
  112. //go:linkname procGeteuid libc_geteuid
  113. //go:linkname procGetegid libc_getegid
  114. //go:linkname procGetppid libc_getppid
  115. //go:linkname procGetpriority libc_getpriority
  116. //go:linkname procGetrlimit libc_getrlimit
  117. //go:linkname procGettimeofday libc_gettimeofday
  118. //go:linkname procGetuid libc_getuid
  119. //go:linkname procKill libc_kill
  120. //go:linkname procLchown libc_lchown
  121. //go:linkname procLink libc_link
  122. //go:linkname proclisten libsocket_listen
  123. //go:linkname procLstat libc_lstat
  124. //go:linkname procMadvise libc_madvise
  125. //go:linkname procMkdir libc_mkdir
  126. //go:linkname procMknod libc_mknod
  127. //go:linkname procNanosleep libc_nanosleep
  128. //go:linkname procOpen libc_open
  129. //go:linkname procPathconf libc_pathconf
  130. //go:linkname procPread libc_pread
  131. //go:linkname procPwrite libc_pwrite
  132. //go:linkname procread libc_read
  133. //go:linkname procReadlink libc_readlink
  134. //go:linkname procRename libc_rename
  135. //go:linkname procRmdir libc_rmdir
  136. //go:linkname proclseek libc_lseek
  137. //go:linkname procSetegid libc_setegid
  138. //go:linkname procSeteuid libc_seteuid
  139. //go:linkname procSetgid libc_setgid
  140. //go:linkname procSetpgid libc_setpgid
  141. //go:linkname procSetpriority libc_setpriority
  142. //go:linkname procSetregid libc_setregid
  143. //go:linkname procSetreuid libc_setreuid
  144. //go:linkname procSetrlimit libc_setrlimit
  145. //go:linkname procSetsid libc_setsid
  146. //go:linkname procSetuid libc_setuid
  147. //go:linkname procshutdown libsocket_shutdown
  148. //go:linkname procStat libc_stat
  149. //go:linkname procSymlink libc_symlink
  150. //go:linkname procSync libc_sync
  151. //go:linkname procTruncate libc_truncate
  152. //go:linkname procFsync libc_fsync
  153. //go:linkname procFtruncate libc_ftruncate
  154. //go:linkname procUmask libc_umask
  155. //go:linkname procUnlink libc_unlink
  156. //go:linkname procUtimes libc_utimes
  157. //go:linkname procbind libsocket_bind
  158. //go:linkname procconnect libsocket_connect
  159. //go:linkname procmmap libc_mmap
  160. //go:linkname procmunmap libc_munmap
  161. //go:linkname procsendto libsocket_sendto
  162. //go:linkname procsocket libsocket_socket
  163. //go:linkname procsocketpair libsocket_socketpair
  164. //go:linkname procwrite libc_write
  165. //go:linkname procgetsockopt libsocket_getsockopt
  166. //go:linkname procgetpeername libsocket_getpeername
  167. //go:linkname procgetsockname libsocket_getsockname
  168. //go:linkname procsetsockopt libsocket_setsockopt
  169. //go:linkname procrecvfrom libsocket_recvfrom
  170. //go:linkname procrecvmsg libsocket_recvmsg
  171. var (
  172. procgetgroups,
  173. procsetgroups,
  174. procfcntl,
  175. procaccept,
  176. procsendmsg,
  177. procAccess,
  178. procAdjtime,
  179. procChdir,
  180. procChmod,
  181. procChown,
  182. procChroot,
  183. procClose,
  184. procDup,
  185. procExit,
  186. procFchdir,
  187. procFchmod,
  188. procFchown,
  189. procFpathconf,
  190. procFstat,
  191. procGetdents,
  192. procGetgid,
  193. procGetpid,
  194. procGeteuid,
  195. procGetegid,
  196. procGetppid,
  197. procGetpriority,
  198. procGetrlimit,
  199. procGettimeofday,
  200. procGetuid,
  201. procKill,
  202. procLchown,
  203. procLink,
  204. proclisten,
  205. procLstat,
  206. procMadvise,
  207. procMkdir,
  208. procMknod,
  209. procNanosleep,
  210. procOpen,
  211. procPathconf,
  212. procPread,
  213. procPwrite,
  214. procread,
  215. procReadlink,
  216. procRename,
  217. procRmdir,
  218. proclseek,
  219. procSetegid,
  220. procSeteuid,
  221. procSetgid,
  222. procSetpgid,
  223. procSetpriority,
  224. procSetregid,
  225. procSetreuid,
  226. procSetrlimit,
  227. procSetsid,
  228. procSetuid,
  229. procshutdown,
  230. procStat,
  231. procSymlink,
  232. procSync,
  233. procTruncate,
  234. procFsync,
  235. procFtruncate,
  236. procUmask,
  237. procUnlink,
  238. procUtimes,
  239. procbind,
  240. procconnect,
  241. procmmap,
  242. procmunmap,
  243. procsendto,
  244. procsocket,
  245. procsocketpair,
  246. procwrite,
  247. procgetsockopt,
  248. procgetpeername,
  249. procgetsockname,
  250. procsetsockopt,
  251. procrecvfrom,
  252. procrecvmsg syscallFunc
  253. )
  254. func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
  255. r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0)
  256. n = int(r0)
  257. if e1 != 0 {
  258. err = e1
  259. }
  260. return
  261. }
  262. func setgroups(ngid int, gid *_Gid_t) (err error) {
  263. _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procsetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0)
  264. if e1 != 0 {
  265. err = e1
  266. }
  267. return
  268. }
  269. func fcntl(fd int, cmd int, arg int) (val int, err error) {
  270. r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(arg), 0, 0, 0)
  271. val = int(r0)
  272. if e1 != 0 {
  273. err = e1
  274. }
  275. return
  276. }
  277. func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
  278. r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procaccept)), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
  279. fd = int(r0)
  280. if e1 != 0 {
  281. err = e1
  282. }
  283. return
  284. }
  285. func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
  286. r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsendmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)
  287. n = int(r0)
  288. if e1 != 0 {
  289. err = e1
  290. }
  291. return
  292. }
  293. func Access(path string, mode uint32) (err error) {
  294. var _p0 *byte
  295. _p0, err = BytePtrFromString(path)
  296. if err != nil {
  297. return
  298. }
  299. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procAccess)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)
  300. use(unsafe.Pointer(_p0))
  301. if e1 != 0 {
  302. err = e1
  303. }
  304. return
  305. }
  306. func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
  307. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procAdjtime)), 2, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0, 0, 0, 0)
  308. if e1 != 0 {
  309. err = e1
  310. }
  311. return
  312. }
  313. func Chdir(path string) (err error) {
  314. var _p0 *byte
  315. _p0, err = BytePtrFromString(path)
  316. if err != nil {
  317. return
  318. }
  319. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChdir)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0)
  320. use(unsafe.Pointer(_p0))
  321. if e1 != 0 {
  322. err = e1
  323. }
  324. return
  325. }
  326. func Chmod(path string, mode uint32) (err error) {
  327. var _p0 *byte
  328. _p0, err = BytePtrFromString(path)
  329. if err != nil {
  330. return
  331. }
  332. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChmod)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)
  333. use(unsafe.Pointer(_p0))
  334. if e1 != 0 {
  335. err = e1
  336. }
  337. return
  338. }
  339. func Chown(path string, uid int, gid int) (err error) {
  340. var _p0 *byte
  341. _p0, err = BytePtrFromString(path)
  342. if err != nil {
  343. return
  344. }
  345. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChown)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), 0, 0, 0)
  346. use(unsafe.Pointer(_p0))
  347. if e1 != 0 {
  348. err = e1
  349. }
  350. return
  351. }
  352. func Chroot(path string) (err error) {
  353. var _p0 *byte
  354. _p0, err = BytePtrFromString(path)
  355. if err != nil {
  356. return
  357. }
  358. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChroot)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0)
  359. use(unsafe.Pointer(_p0))
  360. if e1 != 0 {
  361. err = e1
  362. }
  363. return
  364. }
  365. func Close(fd int) (err error) {
  366. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procClose)), 1, uintptr(fd), 0, 0, 0, 0, 0)
  367. if e1 != 0 {
  368. err = e1
  369. }
  370. return
  371. }
  372. func Dup(fd int) (nfd int, err error) {
  373. r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup)), 1, uintptr(fd), 0, 0, 0, 0, 0)
  374. nfd = int(r0)
  375. if e1 != 0 {
  376. err = e1
  377. }
  378. return
  379. }
  380. func Exit(code int) {
  381. sysvicall6(uintptr(unsafe.Pointer(&procExit)), 1, uintptr(code), 0, 0, 0, 0, 0)
  382. return
  383. }
  384. func Fchdir(fd int) (err error) {
  385. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchdir)), 1, uintptr(fd), 0, 0, 0, 0, 0)
  386. if e1 != 0 {
  387. err = e1
  388. }
  389. return
  390. }
  391. func Fchmod(fd int, mode uint32) (err error) {
  392. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmod)), 2, uintptr(fd), uintptr(mode), 0, 0, 0, 0)
  393. if e1 != 0 {
  394. err = e1
  395. }
  396. return
  397. }
  398. func Fchown(fd int, uid int, gid int) (err error) {
  399. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchown)), 3, uintptr(fd), uintptr(uid), uintptr(gid), 0, 0, 0)
  400. if e1 != 0 {
  401. err = e1
  402. }
  403. return
  404. }
  405. func Fpathconf(fd int, name int) (val int, err error) {
  406. r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFpathconf)), 2, uintptr(fd), uintptr(name), 0, 0, 0, 0)
  407. val = int(r0)
  408. if e1 != 0 {
  409. err = e1
  410. }
  411. return
  412. }
  413. func Fstat(fd int, stat *Stat_t) (err error) {
  414. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstat)), 2, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0)
  415. if e1 != 0 {
  416. err = e1
  417. }
  418. return
  419. }
  420. func Getdents(fd int, buf []byte, basep *uintptr) (n int, err error) {
  421. var _p0 *byte
  422. if len(buf) > 0 {
  423. _p0 = &buf[0]
  424. }
  425. r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetdents)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
  426. n = int(r0)
  427. if e1 != 0 {
  428. err = e1
  429. }
  430. return
  431. }
  432. func Getgid() (gid int) {
  433. r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetgid)), 0, 0, 0, 0, 0, 0, 0)
  434. gid = int(r0)
  435. return
  436. }
  437. func Getpid() (pid int) {
  438. r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpid)), 0, 0, 0, 0, 0, 0, 0)
  439. pid = int(r0)
  440. return
  441. }
  442. func Geteuid() (euid int) {
  443. r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGeteuid)), 0, 0, 0, 0, 0, 0, 0)
  444. euid = int(r0)
  445. return
  446. }
  447. func Getegid() (egid int) {
  448. r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGetegid)), 0, 0, 0, 0, 0, 0, 0)
  449. egid = int(r0)
  450. return
  451. }
  452. func Getppid() (ppid int) {
  453. r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGetppid)), 0, 0, 0, 0, 0, 0, 0)
  454. ppid = int(r0)
  455. return
  456. }
  457. func Getpriority(which int, who int) (n int, err error) {
  458. r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetpriority)), 2, uintptr(which), uintptr(who), 0, 0, 0, 0)
  459. n = int(r0)
  460. if e1 != 0 {
  461. err = e1
  462. }
  463. return
  464. }
  465. func Getrlimit(which int, lim *Rlimit) (err error) {
  466. _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0)
  467. if e1 != 0 {
  468. err = e1
  469. }
  470. return
  471. }
  472. func Gettimeofday(tv *Timeval) (err error) {
  473. _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGettimeofday)), 1, uintptr(unsafe.Pointer(tv)), 0, 0, 0, 0, 0)
  474. if e1 != 0 {
  475. err = e1
  476. }
  477. return
  478. }
  479. func Getuid() (uid int) {
  480. r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetuid)), 0, 0, 0, 0, 0, 0, 0)
  481. uid = int(r0)
  482. return
  483. }
  484. func Kill(pid int, signum syscall.Signal) (err error) {
  485. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procKill)), 2, uintptr(pid), uintptr(signum), 0, 0, 0, 0)
  486. if e1 != 0 {
  487. err = e1
  488. }
  489. return
  490. }
  491. func Lchown(path string, uid int, gid int) (err error) {
  492. var _p0 *byte
  493. _p0, err = BytePtrFromString(path)
  494. if err != nil {
  495. return
  496. }
  497. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLchown)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), 0, 0, 0)
  498. use(unsafe.Pointer(_p0))
  499. if e1 != 0 {
  500. err = e1
  501. }
  502. return
  503. }
  504. func Link(path string, link string) (err error) {
  505. var _p0 *byte
  506. _p0, err = BytePtrFromString(path)
  507. if err != nil {
  508. return
  509. }
  510. var _p1 *byte
  511. _p1, err = BytePtrFromString(link)
  512. if err != nil {
  513. return
  514. }
  515. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLink)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0)
  516. use(unsafe.Pointer(_p0))
  517. use(unsafe.Pointer(_p1))
  518. if e1 != 0 {
  519. err = e1
  520. }
  521. return
  522. }
  523. func Listen(s int, backlog int) (err error) {
  524. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proclisten)), 2, uintptr(s), uintptr(backlog), 0, 0, 0, 0)
  525. if e1 != 0 {
  526. err = e1
  527. }
  528. return
  529. }
  530. func Lstat(path string, stat *Stat_t) (err error) {
  531. var _p0 *byte
  532. _p0, err = BytePtrFromString(path)
  533. if err != nil {
  534. return
  535. }
  536. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLstat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0)
  537. use(unsafe.Pointer(_p0))
  538. if e1 != 0 {
  539. err = e1
  540. }
  541. return
  542. }
  543. func Madvise(b []byte, advice int) (err error) {
  544. var _p0 *byte
  545. if len(b) > 0 {
  546. _p0 = &b[0]
  547. }
  548. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMadvise)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(advice), 0, 0, 0)
  549. if e1 != 0 {
  550. err = e1
  551. }
  552. return
  553. }
  554. func Mkdir(path string, mode uint32) (err error) {
  555. var _p0 *byte
  556. _p0, err = BytePtrFromString(path)
  557. if err != nil {
  558. return
  559. }
  560. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkdir)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)
  561. use(unsafe.Pointer(_p0))
  562. if e1 != 0 {
  563. err = e1
  564. }
  565. return
  566. }
  567. func Mknod(path string, mode uint32, dev int) (err error) {
  568. var _p0 *byte
  569. _p0, err = BytePtrFromString(path)
  570. if err != nil {
  571. return
  572. }
  573. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMknod)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0, 0)
  574. use(unsafe.Pointer(_p0))
  575. if e1 != 0 {
  576. err = e1
  577. }
  578. return
  579. }
  580. func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
  581. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procNanosleep)), 2, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0, 0, 0, 0)
  582. if e1 != 0 {
  583. err = e1
  584. }
  585. return
  586. }
  587. func Open(path string, mode int, perm uint32) (fd int, err error) {
  588. var _p0 *byte
  589. _p0, err = BytePtrFromString(path)
  590. if err != nil {
  591. return
  592. }
  593. r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procOpen)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0, 0)
  594. use(unsafe.Pointer(_p0))
  595. fd = int(r0)
  596. if e1 != 0 {
  597. err = e1
  598. }
  599. return
  600. }
  601. func Pathconf(path string, name int) (val int, err error) {
  602. var _p0 *byte
  603. _p0, err = BytePtrFromString(path)
  604. if err != nil {
  605. return
  606. }
  607. r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPathconf)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0, 0, 0, 0)
  608. use(unsafe.Pointer(_p0))
  609. val = int(r0)
  610. if e1 != 0 {
  611. err = e1
  612. }
  613. return
  614. }
  615. func Pread(fd int, p []byte, offset int64) (n int, err error) {
  616. var _p0 *byte
  617. if len(p) > 0 {
  618. _p0 = &p[0]
  619. }
  620. r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPread)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0)
  621. n = int(r0)
  622. if e1 != 0 {
  623. err = e1
  624. }
  625. return
  626. }
  627. func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
  628. var _p0 *byte
  629. if len(p) > 0 {
  630. _p0 = &p[0]
  631. }
  632. r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPwrite)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0)
  633. n = int(r0)
  634. if e1 != 0 {
  635. err = e1
  636. }
  637. return
  638. }
  639. func read(fd int, p []byte) (n int, err error) {
  640. var _p0 *byte
  641. if len(p) > 0 {
  642. _p0 = &p[0]
  643. }
  644. r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procread)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0)
  645. n = int(r0)
  646. if e1 != 0 {
  647. err = e1
  648. }
  649. return
  650. }
  651. func Readlink(path string, buf []byte) (n int, err error) {
  652. var _p0 *byte
  653. _p0, err = BytePtrFromString(path)
  654. if err != nil {
  655. return
  656. }
  657. var _p1 *byte
  658. if len(buf) > 0 {
  659. _p1 = &buf[0]
  660. }
  661. r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procReadlink)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(len(buf)), 0, 0, 0)
  662. use(unsafe.Pointer(_p0))
  663. n = int(r0)
  664. if e1 != 0 {
  665. err = e1
  666. }
  667. return
  668. }
  669. func Rename(from string, to string) (err error) {
  670. var _p0 *byte
  671. _p0, err = BytePtrFromString(from)
  672. if err != nil {
  673. return
  674. }
  675. var _p1 *byte
  676. _p1, err = BytePtrFromString(to)
  677. if err != nil {
  678. return
  679. }
  680. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRename)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0)
  681. use(unsafe.Pointer(_p0))
  682. use(unsafe.Pointer(_p1))
  683. if e1 != 0 {
  684. err = e1
  685. }
  686. return
  687. }
  688. func Rmdir(path string) (err error) {
  689. var _p0 *byte
  690. _p0, err = BytePtrFromString(path)
  691. if err != nil {
  692. return
  693. }
  694. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRmdir)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0)
  695. use(unsafe.Pointer(_p0))
  696. if e1 != 0 {
  697. err = e1
  698. }
  699. return
  700. }
  701. func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
  702. r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proclseek)), 3, uintptr(fd), uintptr(offset), uintptr(whence), 0, 0, 0)
  703. newoffset = int64(r0)
  704. if e1 != 0 {
  705. err = e1
  706. }
  707. return
  708. }
  709. func Setegid(egid int) (err error) {
  710. _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetegid)), 1, uintptr(egid), 0, 0, 0, 0, 0)
  711. if e1 != 0 {
  712. err = e1
  713. }
  714. return
  715. }
  716. func Seteuid(euid int) (err error) {
  717. _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSeteuid)), 1, uintptr(euid), 0, 0, 0, 0, 0)
  718. if e1 != 0 {
  719. err = e1
  720. }
  721. return
  722. }
  723. func Setgid(gid int) (err error) {
  724. _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetgid)), 1, uintptr(gid), 0, 0, 0, 0, 0)
  725. if e1 != 0 {
  726. err = e1
  727. }
  728. return
  729. }
  730. func Setpgid(pid int, pgid int) (err error) {
  731. _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetpgid)), 2, uintptr(pid), uintptr(pgid), 0, 0, 0, 0)
  732. if e1 != 0 {
  733. err = e1
  734. }
  735. return
  736. }
  737. func Setpriority(which int, who int, prio int) (err error) {
  738. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSetpriority)), 3, uintptr(which), uintptr(who), uintptr(prio), 0, 0, 0)
  739. if e1 != 0 {
  740. err = e1
  741. }
  742. return
  743. }
  744. func Setregid(rgid int, egid int) (err error) {
  745. _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetregid)), 2, uintptr(rgid), uintptr(egid), 0, 0, 0, 0)
  746. if e1 != 0 {
  747. err = e1
  748. }
  749. return
  750. }
  751. func Setreuid(ruid int, euid int) (err error) {
  752. _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetreuid)), 2, uintptr(ruid), uintptr(euid), 0, 0, 0, 0)
  753. if e1 != 0 {
  754. err = e1
  755. }
  756. return
  757. }
  758. func Setrlimit(which int, lim *Rlimit) (err error) {
  759. _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0)
  760. if e1 != 0 {
  761. err = e1
  762. }
  763. return
  764. }
  765. func Setsid() (pid int, err error) {
  766. r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetsid)), 0, 0, 0, 0, 0, 0, 0)
  767. pid = int(r0)
  768. if e1 != 0 {
  769. err = e1
  770. }
  771. return
  772. }
  773. func Setuid(uid int) (err error) {
  774. _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetuid)), 1, uintptr(uid), 0, 0, 0, 0, 0)
  775. if e1 != 0 {
  776. err = e1
  777. }
  778. return
  779. }
  780. func Shutdown(s int, how int) (err error) {
  781. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procshutdown)), 2, uintptr(s), uintptr(how), 0, 0, 0, 0)
  782. if e1 != 0 {
  783. err = e1
  784. }
  785. return
  786. }
  787. func Stat(path string, stat *Stat_t) (err error) {
  788. var _p0 *byte
  789. _p0, err = BytePtrFromString(path)
  790. if err != nil {
  791. return
  792. }
  793. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procStat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0)
  794. use(unsafe.Pointer(_p0))
  795. if e1 != 0 {
  796. err = e1
  797. }
  798. return
  799. }
  800. func Symlink(path string, link string) (err error) {
  801. var _p0 *byte
  802. _p0, err = BytePtrFromString(path)
  803. if err != nil {
  804. return
  805. }
  806. var _p1 *byte
  807. _p1, err = BytePtrFromString(link)
  808. if err != nil {
  809. return
  810. }
  811. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSymlink)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0)
  812. use(unsafe.Pointer(_p0))
  813. use(unsafe.Pointer(_p1))
  814. if e1 != 0 {
  815. err = e1
  816. }
  817. return
  818. }
  819. func Sync() (err error) {
  820. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSync)), 0, 0, 0, 0, 0, 0, 0)
  821. if e1 != 0 {
  822. err = e1
  823. }
  824. return
  825. }
  826. func Truncate(path string, length int64) (err error) {
  827. var _p0 *byte
  828. _p0, err = BytePtrFromString(path)
  829. if err != nil {
  830. return
  831. }
  832. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procTruncate)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0, 0, 0, 0)
  833. use(unsafe.Pointer(_p0))
  834. if e1 != 0 {
  835. err = e1
  836. }
  837. return
  838. }
  839. func Fsync(fd int) (err error) {
  840. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFsync)), 1, uintptr(fd), 0, 0, 0, 0, 0)
  841. if e1 != 0 {
  842. err = e1
  843. }
  844. return
  845. }
  846. func Ftruncate(fd int, length int64) (err error) {
  847. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFtruncate)), 2, uintptr(fd), uintptr(length), 0, 0, 0, 0)
  848. if e1 != 0 {
  849. err = e1
  850. }
  851. return
  852. }
  853. func Umask(newmask int) (oldmask int) {
  854. r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procUmask)), 1, uintptr(newmask), 0, 0, 0, 0, 0)
  855. oldmask = int(r0)
  856. return
  857. }
  858. func Unlink(path string) (err error) {
  859. var _p0 *byte
  860. _p0, err = BytePtrFromString(path)
  861. if err != nil {
  862. return
  863. }
  864. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlink)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0)
  865. use(unsafe.Pointer(_p0))
  866. if e1 != 0 {
  867. err = e1
  868. }
  869. return
  870. }
  871. func Utimes(path string, times *[2]Timeval) (err error) {
  872. var _p0 *byte
  873. _p0, err = BytePtrFromString(path)
  874. if err != nil {
  875. return
  876. }
  877. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUtimes)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0, 0, 0, 0)
  878. use(unsafe.Pointer(_p0))
  879. if e1 != 0 {
  880. err = e1
  881. }
  882. return
  883. }
  884. func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
  885. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procbind)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)
  886. if e1 != 0 {
  887. err = e1
  888. }
  889. return
  890. }
  891. func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
  892. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procconnect)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)
  893. if e1 != 0 {
  894. err = e1
  895. }
  896. return
  897. }
  898. func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
  899. r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmmap)), 6, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
  900. ret = uintptr(r0)
  901. if e1 != 0 {
  902. err = e1
  903. }
  904. return
  905. }
  906. func munmap(addr uintptr, length uintptr) (err error) {
  907. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmunmap)), 2, uintptr(addr), uintptr(length), 0, 0, 0, 0)
  908. if e1 != 0 {
  909. err = e1
  910. }
  911. return
  912. }
  913. func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
  914. var _p0 *byte
  915. if len(buf) > 0 {
  916. _p0 = &buf[0]
  917. }
  918. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsendto)), 6, uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
  919. if e1 != 0 {
  920. err = e1
  921. }
  922. return
  923. }
  924. func socket(domain int, typ int, proto int) (fd int, err error) {
  925. r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsocket)), 3, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0)
  926. fd = int(r0)
  927. if e1 != 0 {
  928. err = e1
  929. }
  930. return
  931. }
  932. func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
  933. _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procsocketpair)), 4, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
  934. if e1 != 0 {
  935. err = e1
  936. }
  937. return
  938. }
  939. func write(fd int, p []byte) (n int, err error) {
  940. var _p0 *byte
  941. if len(p) > 0 {
  942. _p0 = &p[0]
  943. }
  944. r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwrite)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0)
  945. n = int(r0)
  946. if e1 != 0 {
  947. err = e1
  948. }
  949. return
  950. }
  951. func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
  952. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
  953. if e1 != 0 {
  954. err = e1
  955. }
  956. return
  957. }
  958. func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
  959. _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetpeername)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
  960. if e1 != 0 {
  961. err = e1
  962. }
  963. return
  964. }
  965. func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
  966. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetsockname)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
  967. if e1 != 0 {
  968. err = e1
  969. }
  970. return
  971. }
  972. func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
  973. _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsetsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
  974. if e1 != 0 {
  975. err = e1
  976. }
  977. return
  978. }
  979. func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
  980. var _p0 *byte
  981. if len(p) > 0 {
  982. _p0 = &p[0]
  983. }
  984. r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procrecvfrom)), 6, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
  985. n = int(r0)
  986. if e1 != 0 {
  987. err = e1
  988. }
  989. return
  990. }
  991. func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
  992. r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procrecvmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)
  993. n = int(r0)
  994. if e1 != 0 {
  995. err = e1
  996. }
  997. return
  998. }