Skip to content

Commit 8b181d2

Browse files
ergmrjbq7
authored andcommitted
ffi: use pointer-width types for output parameters
1 parent a95f4ab commit 8b181d2

7 files changed

Lines changed: 46 additions & 33 deletions

File tree

basis/db/postgresql/lib/lib.factor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ M: postgresql-result-null summary
129129
3nip
130130
[
131131
memory>byte-array >string
132-
{ uint }
132+
{ size_t }
133133
[
134134
PQunescapeBytea dup zero? [
135135
postgresql-result-error-message throw

basis/io/sockets/unix/unix.factor

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ USING: accessors alien alien.c-types alien.data alien.strings
55
byte-arrays classes.struct combinators destructors
66
io.backend.unix io.encodings.ascii io.encodings.utf8 io.files
77
io.pathnames io.ports io.sockets io.sockets.private kernel libc
8-
locals math namespaces sequences system unix unix.ffi vocabs ;
8+
locals math namespaces sequences system unix unix.ffi unix.types vocabs ;
99

1010
IN: io.sockets.unix
1111

@@ -14,7 +14,7 @@ IN: io.sockets.unix
1414

1515
: get-socket-option ( fd level opt -- val )
1616
[ handle-fd ] 2dip -1 int <ref> [
17-
dup byte-length int <ref> getsockopt io-error
17+
dup byte-length socklen_t <ref> getsockopt io-error
1818
] keep int deref ;
1919

2020
: set-socket-option ( fd level opt -- )
@@ -41,11 +41,11 @@ M: unix addrspec-of-family
4141

4242
! Client sockets - TCP and Unix domain
4343
M: object (get-local-address)
44-
[ handle-fd ] dip empty-sockaddr/size int <ref>
44+
[ handle-fd ] dip empty-sockaddr/size socklen_t <ref>
4545
[ getsockname io-error ] keepd ;
4646

4747
M: object (get-remote-address)
48-
[ handle-fd ] dip empty-sockaddr/size int <ref>
48+
[ handle-fd ] dip empty-sockaddr/size socklen_t <ref>
4949
[ getpeername io-error ] keepd ;
5050

5151
: init-client-socket ( fd -- )
@@ -95,7 +95,7 @@ M: object (server)
9595
] with-destructors ;
9696

9797
: do-accept ( server addrspec -- fd sockaddr )
98-
[ handle>> handle-fd ] [ empty-sockaddr/size int <ref> ] bi*
98+
[ handle>> handle-fd ] [ empty-sockaddr/size socklen_t <ref> ] bi*
9999
[ unix.ffi:accept ] keepd ; inline
100100

101101
M: object (accept)
@@ -131,7 +131,7 @@ M: unix (broadcast)
131131
n ! nbytes
132132
0 ! flags
133133
sockaddr ! from
134-
len int <ref> ! fromlen
134+
len socklen_t <ref> ! fromlen
135135
recvfrom sockaddr ; inline
136136

137137
: (receive-loop) ( n buf datagram -- count sockaddr )

basis/tools/ps/macos/macos.factor

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ IN: tools.ps.macos
2525
: hostname ( -- str ) { 1 10 } sysctl-query-string ;
2626

2727
: sysctl-query-bytes ( seq -- n )
28-
[ int >c-array ] [ length ] bi f 0 uint <ref>
29-
[ f 0 sysctl io-error ] keep uint deref ;
28+
[ int >c-array ] [ length ] bi f 0 size_t <ref>
29+
[ f 0 sysctl io-error ] keep size_t deref ;
3030

3131
STRUCT: _pcred
3232
{ pc_lock char[72] }
@@ -134,8 +134,12 @@ STRUCT: kinfo_proc
134134
4 cut-slice swap >byte-array uint deref
135135
[ zero? ] head-split-skip [ >string ] map ;
136136

137+
: process-bytes ( -- bytes )
138+
! Leave headroom for processes spawned between the two sysctl calls.
139+
{ 1 14 0 0 } dup sysctl-query-bytes 2 * sysctl-query ;
140+
137141
: procs ( -- seq )
138-
{ 1 14 0 0 } dup sysctl-query-bytes sysctl-query
142+
process-bytes
139143
kinfo_proc struct-size group
140144
[ kinfo_proc memory>struct ] map ;
141145

basis/unix/sysctl/sysctl.factor

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
! Copyright (C) 2008 Doug Coleman, John Benediktsson.
22
! See https://factorcode.org/license.txt for BSD license.
33
USING: alien.c-types alien.data alien.strings alien.syntax
4-
byte-arrays io.encodings.utf8 kernel libc sequences
4+
byte-arrays io.encodings.utf8 kernel libc locals sequences
55
specialized-arrays ;
66
IN: unix.sysctl
77

@@ -17,12 +17,18 @@ FUNCTION: int sysctlbyname ( c-string name, void* oldp, size_t* oldlenp, void* n
1717
: (sysctl-name-query) ( name oldp oldlenp -- oldp )
1818
over [ f 0 sysctlbyname io-error ] dip ;
1919

20-
: sysctl-query ( seq n -- byte-array )
21-
[ [ int >c-array ] [ length ] bi ] dip
22-
[ <byte-array> ] [ uint <ref> ] bi (sysctl-query) ;
23-
24-
: sysctl-name-query ( name n -- byte-array )
25-
[ <byte-array> ] [ uint <ref> ] bi (sysctl-name-query) ;
20+
:: sysctl-query ( seq n -- byte-array )
21+
seq int >c-array :> name
22+
n <byte-array> :> bytes
23+
n size_t <ref> :> oldlen
24+
name seq length bytes oldlen (sysctl-query) drop
25+
oldlen size_t deref bytes resize-byte-array ;
26+
27+
:: sysctl-name-query ( name n -- byte-array )
28+
n <byte-array> :> bytes
29+
n size_t <ref> :> oldlen
30+
name bytes oldlen (sysctl-name-query) drop
31+
oldlen size_t deref bytes resize-byte-array ;
2632

2733
: sysctl-query-string ( seq -- n )
2834
4096 sysctl-query utf8 alien>string ;

extra/alien/cxx/demangle/libstdcxx/libstdcxx.factor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ ERROR: invalid-demangle-args name ;
2525
DESTRUCTOR: (free)
2626

2727
:: demangle ( mangled-name -- c++-name )
28-
0 ulong <ref> :> length
28+
0 size_t <ref> :> length
2929
0 int <ref> :> status [
3030
mangled-name ascii string>alien f length status __cxa_demangle &(free) :> demangled-buf
3131
mangled-name status int deref demangle-error

extra/odbc/odbc.factor

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ TYPEDEF: longlong SQLBIGINT
4747
TYPEDEF: ulonglong SQLUBIGINT
4848
64>
4949

50+
<32 TYPEDEF: SQLUSMALLINT SQLSETPOSIROW 32>
51+
<64 TYPEDEF: SQLULEN SQLSETPOSIROW 64>
52+
5053
CONSTANT: SQL_MAX_MESSAGE_LENGTH 512
5154

5255
CONSTANT: SQL_SQLSTATE_SIZE 5
@@ -164,22 +167,22 @@ FUNCTION: SQLRETURN SQLAllocConnect ( SQLHENV environmentHandle, SQLHDBC* connec
164167
FUNCTION: SQLRETURN SQLAllocEnv ( SQLHENV* environmentHandlePtr )
165168
FUNCTION: SQLRETURN SQLAllocHandle ( SQLSMALLINT handleType, SQLHANDLE inputHandle, SQLHANDLE* outputHandlePtr )
166169
FUNCTION: SQLRETURN SQLAllocStmt ( SQLHDBC connectionHandle, SQLHSTMT* statementHandlePtr )
167-
FUNCTION: SQLRETURN SQLBindCol ( SQLHSTMT statementHandle, SQLUSMALLINT columnNumber, SQLSMALLINT targetType, SQLPOINTER targetValuePtr, SQLINTEGER bufferLength, SQLINTEGER* strlen_or_indPtr )
168-
FUNCTION: SQLRETURN SQLBindParam ( SQLHSTMT statementHandle, SQLUSMALLINT parameterNumber, SQLSMALLINT valueType, SQLSMALLINT parameterType, SQLUINTEGER lengthPrecision, SQLSMALLINT parameterScale, SQLPOINTER parameterValuePtr, SQLINTEGER* indPtr )
169-
FUNCTION: SQLRETURN SQLBindParameter ( SQLHSTMT statementHandle, SQLUSMALLINT parameterNumber, SQLSMALLINT inputOutputType, SQLSMALLINT valueType, SQLSMALLINT parameterType, SQLUINTEGER columnSize, SQLSMALLINT decimalDigits, SQLPOINTER parameterValuePtr, SQLINTEGER bufferLength, SQLINTEGER* indPtr )
170+
FUNCTION: SQLRETURN SQLBindCol ( SQLHSTMT statementHandle, SQLUSMALLINT columnNumber, SQLSMALLINT targetType, SQLPOINTER targetValuePtr, SQLLEN bufferLength, SQLLEN* strlen_or_indPtr )
171+
FUNCTION: SQLRETURN SQLBindParam ( SQLHSTMT statementHandle, SQLUSMALLINT parameterNumber, SQLSMALLINT valueType, SQLSMALLINT parameterType, SQLULEN lengthPrecision, SQLSMALLINT parameterScale, SQLPOINTER parameterValuePtr, SQLLEN* indPtr )
172+
FUNCTION: SQLRETURN SQLBindParameter ( SQLHSTMT statementHandle, SQLUSMALLINT parameterNumber, SQLSMALLINT inputOutputType, SQLSMALLINT valueType, SQLSMALLINT parameterType, SQLULEN columnSize, SQLSMALLINT decimalDigits, SQLPOINTER parameterValuePtr, SQLLEN bufferLength, SQLLEN* indPtr )
170173
FUNCTION: SQLRETURN SQLBrowseConnect ( SQLHDBC connectionHandle, SQLCHAR* inConnectionString, SQLSMALLINT stringLength, SQLCHAR* outConnectionString, SQLSMALLINT bufferLength, SQLSMALLINT* stringLength2Ptr )
171174
FUNCTION: SQLRETURN SQLBulkOperations ( SQLHSTMT statementHandle, SQLSMALLINT operation )
172175
FUNCTION: SQLRETURN SQLCancel ( SQLHSTMT statementHandle )
173176
FUNCTION: SQLRETURN SQLCloseCursor ( SQLHSTMT statementHandle )
174177
FUNCTION: SQLRETURN SQLColAttribute ( SQLHSTMT statementHandle, SQLUSMALLINT columnNumber, SQLUSMALLINT fieldIdentifier, SQLPOINTER characterAttributePtr, SQLSMALLINT bufferLength, SQLSMALLINT* stringLengthPtr, SQLLEN* numericAttributePtr )
175-
FUNCTION: SQLRETURN SQLColAttributes ( SQLHSTMT statementHandle, SQLUSMALLINT columnNumber, SQLUSMALLINT fieldIdentifier, SQLPOINTER characterAttributePtr, SQLSMALLINT bufferLength, SQLSMALLINT* stringLengthPtr, SQLINTEGER* numericAttributePtr )
178+
FUNCTION: SQLRETURN SQLColAttributes ( SQLHSTMT statementHandle, SQLUSMALLINT columnNumber, SQLUSMALLINT fieldIdentifier, SQLPOINTER characterAttributePtr, SQLSMALLINT bufferLength, SQLSMALLINT* stringLengthPtr, SQLLEN* numericAttributePtr )
176179
FUNCTION: SQLRETURN SQLColumnPrivileges ( SQLHSTMT statementHandle, SQLCHAR* catalogName, SQLSMALLINT nameLength1, SQLCHAR* schemaName, SQLSMALLINT nameLength2, SQLCHAR* tableName, SQLSMALLINT nameLength3, SQLCHAR* columnName, SQLSMALLINT nameLength4 )
177180
FUNCTION: SQLRETURN SQLColumns ( SQLHSTMT statementHandle, SQLCHAR* catalogName, SQLSMALLINT nameLength1, SQLCHAR* schemaName, SQLSMALLINT nameLength2, SQLCHAR* tableName, SQLSMALLINT nameLength3, SQLCHAR* columnName, SQLSMALLINT nameLength4 )
178181
FUNCTION: SQLRETURN SQLConnect ( SQLHDBC connectionHandle, SQLCHAR* serverName, SQLSMALLINT nameLength1, SQLCHAR* userName, SQLSMALLINT nameLength2, SQLCHAR* authentication, SQLSMALLINT nameLength3 )
179182
FUNCTION: SQLRETURN SQLCopyDesc ( SQLHDESC sourceDescHandle, SQLHDESC targetDescHandle )
180183
FUNCTION: SQLRETURN SQLDataSources ( SQLHENV environmentHandle, SQLUSMALLINT direction, SQLCHAR* serverName, SQLSMALLINT bufferLength1, SQLSMALLINT* nameLength1Ptr, SQLCHAR* description, SQLSMALLINT bufferLength2, SQLSMALLINT* nameLength2Ptr )
181-
FUNCTION: SQLRETURN SQLDescribeCol ( SQLHSTMT statementHandle, SQLSMALLINT columnNumber, SQLCHAR* columnName, SQLSMALLINT bufferLength, SQLSMALLINT* nameLengthPtr, SQLSMALLINT* dataTypePtr, SQLUINTEGER* columnSizePtr, SQLSMALLINT* decimalDigitsPtr, SQLSMALLINT* nullablePtr )
182-
FUNCTION: SQLRETURN SQLDescribeParam ( SQLHSTMT statementHandle, SQLUSMALLINT parameterNumber, SQLSMALLINT* dataTypePtr, SQLUINTEGER* parameterSizePtr, SQLSMALLINT* decimalDigitsPtr, SQLSMALLINT* nullablePtr )
184+
FUNCTION: SQLRETURN SQLDescribeCol ( SQLHSTMT statementHandle, SQLUSMALLINT columnNumber, SQLCHAR* columnName, SQLSMALLINT bufferLength, SQLSMALLINT* nameLengthPtr, SQLSMALLINT* dataTypePtr, SQLULEN* columnSizePtr, SQLSMALLINT* decimalDigitsPtr, SQLSMALLINT* nullablePtr )
185+
FUNCTION: SQLRETURN SQLDescribeParam ( SQLHSTMT statementHandle, SQLUSMALLINT parameterNumber, SQLSMALLINT* dataTypePtr, SQLULEN* parameterSizePtr, SQLSMALLINT* decimalDigitsPtr, SQLSMALLINT* nullablePtr )
183186
FUNCTION: SQLRETURN SQLDisconnect ( SQLHDBC connectionHandle )
184187
FUNCTION: SQLRETURN SQLDriverConnect ( SQLHDBC connectionHandle, SQLHWND windowHandle, SQLCHAR* inConnectionString, SQLSMALLINT stringLength, SQLCHAR* outConnectionString, SQLSMALLINT bufferLength, SQLSMALLINT* stringLength2Ptr, SQLUSMALLINT driverCompletion )
185188
FUNCTION: SQLRETURN SQLEndTran ( SQLSMALLINT handleType, SQLHANDLE handle, SQLSMALLINT completionType )
@@ -197,7 +200,7 @@ FUNCTION: SQLRETURN SQLFreeStmt ( SQLHSTMT statementHandle, SQLUSMALLINT option
197200
FUNCTION: SQLRETURN SQLGetConnectAttr ( SQLHDBC connectionHandle, SQLINTEGER attribute, SQLPOINTER valuePtr, SQLINTEGER bufferLength, SQLINTEGER* stringLengthPtr )
198201
FUNCTION: SQLRETURN SQLGetConnectOption ( SQLHDBC connectionHandle, SQLUSMALLINT option, SQLPOINTER valuePtr )
199202
FUNCTION: SQLRETURN SQLGetCursorName ( SQLHSTMT statementHandle, SQLCHAR* cursorName, SQLSMALLINT bufferLength, SQLSMALLINT* nameLengthPtr )
200-
FUNCTION: SQLRETURN SQLGetData ( SQLHSTMT statementHandle, SQLUSMALLINT columnNumber, SQLSMALLINT targetType, SQLPOINTER targetValuePtr, SQLINTEGER bufferLength, SQLINTEGER* strlen_or_indPtr )
203+
FUNCTION: SQLRETURN SQLGetData ( SQLHSTMT statementHandle, SQLUSMALLINT columnNumber, SQLSMALLINT targetType, SQLPOINTER targetValuePtr, SQLLEN bufferLength, SQLLEN* strlen_or_indPtr )
201204
FUNCTION: SQLRETURN SQLGetDescField ( SQLHDESC descriptorHandle, SQLSMALLINT recNumber, SQLSMALLINT fieldIdentifier, SQLPOINTER valuePtr, SQLINTEGER bufferLength, SQLINTEGER* stringLengthPtr )
202205
FUNCTION: SQLRETURN SQLGetDescRec ( SQLHDESC descriptorHandle, SQLSMALLINT recNumber, SQLCHAR* name, SQLSMALLINT bufferLength, SQLSMALLINT* stringLengthPtr, SQLSMALLINT* typePtr, SQLSMALLINT* subTypePtr, SQLLEN* lengthPtr, SQLSMALLINT* precisionPtr, SQLSMALLINT* scalePtr, SQLSMALLINT* nullablePtr )
203206
FUNCTION: SQLRETURN SQLGetDiagField ( SQLSMALLINT handleType, SQLHANDLE handle, SQLSMALLINT recNumber, SQLSMALLINT diagIdentifier, SQLPOINTER diagInfoPtr, SQLSMALLINT bufferLength, SQLSMALLINT* stringLengthPtr )
@@ -226,9 +229,9 @@ FUNCTION: SQLRETURN SQLSetCursorName ( SQLHSTMT statementHandle, SQLCHAR* cursor
226229
FUNCTION: SQLRETURN SQLSetDescField ( SQLHDESC descriptorHandle, SQLSMALLINT recNumber, SQLSMALLINT fieldIdentifier, SQLPOINTER valuePtr, SQLINTEGER bufferLength )
227230
FUNCTION: SQLRETURN SQLSetDescRec ( SQLHDESC descriptorHandle, SQLSMALLINT recNumber, SQLSMALLINT type, SQLSMALLINT subType, SQLLEN length, SQLSMALLINT precision, SQLSMALLINT scale, SQLPOINTER dataPtr, SQLLEN* stringLengthPtr, SQLLEN* indicatorPtr )
228231
FUNCTION: SQLRETURN SQLSetEnvAttr ( SQLHENV environmentHandle, SQLINTEGER attribute, SQLPOINTER valuePtr, SQLINTEGER stringLength )
229-
FUNCTION: SQLRETURN SQLSetParam ( SQLHSTMT statementHandle, SQLUSMALLINT parameterNumber, SQLSMALLINT valueType, SQLSMALLINT parameterType, SQLUINTEGER lengthPrecision, SQLSMALLINT parameterScale, SQLPOINTER parameterValuePtr, SQLINTEGER* indPtr )
230-
FUNCTION: SQLRETURN SQLSetPos ( SQLHSTMT statementHandle, SQLUSMALLINT rowNumber, SQLUSMALLINT operation, SQLUSMALLINT lockType )
231-
FUNCTION: SQLRETURN SQLSetScrollOptions ( SQLHSTMT statementHandle, SQLUSMALLINT concurrency, SQLINTEGER rowNumber, SQLUSMALLINT cacheSize )
232+
FUNCTION: SQLRETURN SQLSetParam ( SQLHSTMT statementHandle, SQLUSMALLINT parameterNumber, SQLSMALLINT valueType, SQLSMALLINT parameterType, SQLULEN lengthPrecision, SQLSMALLINT parameterScale, SQLPOINTER parameterValuePtr, SQLLEN* indPtr )
233+
FUNCTION: SQLRETURN SQLSetPos ( SQLHSTMT statementHandle, SQLSETPOSIROW rowNumber, SQLUSMALLINT operation, SQLUSMALLINT lockType )
234+
FUNCTION: SQLRETURN SQLSetScrollOptions ( SQLHSTMT statementHandle, SQLUSMALLINT concurrency, SQLLEN rowNumber, SQLUSMALLINT cacheSize )
232235
FUNCTION: SQLRETURN SQLSetStmtAttr ( SQLHSTMT statementHandle, SQLINTEGER attribute, SQLPOINTER valuePtr, SQLINTEGER stringLength )
233236
FUNCTION: SQLRETURN SQLSetStmtOption ( SQLHSTMT statementHandle, SQLUSMALLINT option, SQLULEN value )
234237
FUNCTION: SQLRETURN SQLSpecialColumns ( SQLHSTMT statementHandle, SQLUSMALLINT identifierType, SQLCHAR* catalogName, SQLSMALLINT nameLength1, SQLCHAR* schemaName, SQLSMALLINT nameLength2, SQLCHAR* tableName, SQLSMALLINT nameLength3, SQLUSMALLINT scope, SQLUSMALLINT nullable )
@@ -354,15 +357,15 @@ C: <column> column
354357
bufferLen alien-space-str :> columnName
355358
0 short <ref> :> nameLengthPtr
356359
0 short <ref> :> dataTypePtr
357-
0 uint <ref> :> columnSizePtr
360+
0 SQLULEN <ref> :> columnSizePtr
358361
0 short <ref> :> decimalDigitsPtr
359362
0 short <ref> :> nullablePtr
360363
statement columnNumber columnName bufferLen nameLengthPtr
361364
dataTypePtr columnSizePtr decimalDigitsPtr nullablePtr
362365
SQLDescribeCol "SQLDescribeCol" check-odbc
363366
nullablePtr short deref
364367
decimalDigitsPtr short deref
365-
columnSizePtr uint deref
368+
columnSizePtr SQLULEN deref
366369
dataTypePtr short deref convert-sql-type
367370
columnName utf8 alien>string
368371
columnNumber <column> ;
@@ -401,10 +404,10 @@ C: <field> field
401404
8192 :> bufferLen
402405
bufferLen alien-space-str :> targetValuePtr
403406
statement column number>> SQL_C_DEFAULT
404-
targetValuePtr bufferLen 0 SQLINTEGER <ref> :> outlen
407+
targetValuePtr bufferLen 0 SQLLEN <ref> :> outlen
405408
outlen SQLGetData
406409
succeeded? [
407-
outlen SQLINTEGER deref -1 = [
410+
outlen SQLLEN deref -1 = [
408411
f column <field>
409412
] [
410413
targetValuePtr column dereference-type-pointer

extra/opencl/ffi/ffi-tests.factor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ ERROR: cl-error err ;
5555
kernel 1 cl_mem heap-size output void* <ref> clSetKernelArg cl-success
5656
kernel 2 uint heap-size in length uint <ref> clSetKernelArg cl-success
5757

58-
queue kernel 1 f in length ulonglong <ref> f
58+
queue kernel 1 f in length size_t <ref> f
5959
0 f f clEnqueueNDRangeKernel cl-success
6060

6161
queue clFinish cl-success

0 commit comments

Comments
 (0)