-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add mappings for size_t, ssize_t, shared memory and libc file functions
- Loading branch information
1 parent
43c4e67
commit d471b15
Showing
9 changed files
with
796 additions
and
22 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
162 changes: 162 additions & 0 deletions
162
contrib/platform/src/com/sun/jna/platform/linux/ErrNo.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,162 @@ | ||
/* Copyright (c) 2020 Daniel Widdis, All Rights Reserved | ||
* | ||
* The contents of this file is dual-licensed under 2 | ||
* alternative Open Source/Free licenses: LGPL 2.1 or later and | ||
* Apache License 2.0. (starting with JNA version 4.0.0). | ||
* | ||
* You can freely decide which license you want to apply to | ||
* the project. | ||
* | ||
* You may obtain a copy of the LGPL License at: | ||
* | ||
* http://www.gnu.org/licenses/licenses.html | ||
* | ||
* A copy is also included in the downloadable source code package | ||
* containing JNA, in file "LGPL2.1". | ||
* | ||
* You may obtain a copy of the Apache License at: | ||
* | ||
* http://www.apache.org/licenses/ | ||
* | ||
* A copy is also included in the downloadable source code package | ||
* containing JNA, in file "AL2.0". | ||
*/ | ||
package com.sun.jna.platform.linux; | ||
|
||
import com.sun.jna.Native; | ||
|
||
/** | ||
* System error codes set in {@code errno} and retrieved by | ||
* {@link Native#getLastError()} | ||
*/ | ||
public interface ErrNo { | ||
int EPERM = 1; // Operation not permitted | ||
int ENOENT = 2; // No such file or directory | ||
int ESRCH = 3; // No such process | ||
int EINTR = 4; // Interrupted system call | ||
int EIO = 5; // I/O error | ||
int ENXIO = 6; // No such device or address | ||
int E2BIG = 7; // Argument list too long | ||
int ENOEXEC = 8; // Exec format error | ||
int EBADF = 9; // Bad file number | ||
int ECHILD = 10; // No child processes | ||
int EAGAIN = 11; // Try again | ||
int ENOMEM = 12; // Out of memory | ||
int EACCES = 13; // Permission denied | ||
int EFAULT = 14; // Bad address | ||
int ENOTBLK = 15; // Block device required | ||
int EBUSY = 16; // Device or resource busy | ||
int EEXIST = 17; // File exists | ||
int EXDEV = 18; // Cross-device link | ||
int ENODEV = 19; // No such device | ||
int ENOTDIR = 20; // Not a directory | ||
int EISDIR = 21; // Is a directory | ||
int EINVAL = 22; // Invalid argument | ||
int ENFILE = 23; // File table overflow | ||
int EMFILE = 24; // Too many open files | ||
int ENOTTY = 25; // Not a typewriter | ||
int ETXTBSY = 26; // Text file busy | ||
int EFBIG = 27; // File too large | ||
int ENOSPC = 28; // No space left on device | ||
int ESPIPE = 29; // Illegal seek | ||
int EROFS = 30; // Read-only file system | ||
int EMLINK = 31; // Too many links | ||
int EPIPE = 32; // Broken pipe | ||
int EDOM = 33; // Math argument out of domain of func | ||
int ERANGE = 34; // Math result not representable | ||
int EDEADLK = 35; // Resource deadlock would occur | ||
int ENAMETOOLONG = 36; // File name too long | ||
int ENOLCK = 37; // No record locks available | ||
int ENOSYS = 38; // Function not implemented | ||
int ENOTEMPTY = 39; // Directory not empty | ||
int ELOOP = 40; // Too many symbolic links encountered | ||
int ENOMSG = 42; // No message of desired type | ||
int EIDRM = 43; // Identifier removed | ||
int ECHRNG = 44; // Channel number out of range | ||
int EL2NSYNC = 45; // Level 2 not synchronized | ||
int EL3HLT = 46; // Level 3 halted | ||
int EL3RST = 47; // Level 3 reset | ||
int ELNRNG = 48; // Link number out of range | ||
int EUNATCH = 49; // Protocol driver not attached | ||
int ENOCSI = 50; // No CSI structure available | ||
int EL2HLT = 51; // Level 2 halted | ||
int EBADE = 52; // Invalid exchange | ||
int EBADR = 53; // Invalid request descriptor | ||
int EXFULL = 54; // Exchange full | ||
int ENOANO = 55; // No anode | ||
int EBADRQC = 56; // Invalid request code | ||
int EBADSLT = 57; // Invalid slot | ||
int EBFONT = 59; // Bad font file format | ||
int ENOSTR = 60; // Device not a stream | ||
int ENODATA = 61; // No data available | ||
int ETIME = 62; // Timer expired | ||
int ENOSR = 63; // Out of streams resources | ||
int ENONET = 64; // Machine is not on the network | ||
int ENOPKG = 65; // Package not installed | ||
int EREMOTE = 66; // Object is remote | ||
int ENOLINK = 67; // Link has been severed | ||
int EADV = 68; // Advertise error | ||
int ESRMNT = 69; // Srmount error | ||
int ECOMM = 70; // Communication error on send | ||
int EPROTO = 71; // Protocol error | ||
int EMULTIHOP = 72; // Multihop attempted | ||
int EDOTDOT = 73; // RFS specific error | ||
int EBADMSG = 74; // Not a data message | ||
int EOVERFLOW = 75; // Value too large for defined data type | ||
int ENOTUNIQ = 76; // Name not unique on network | ||
int EBADFD = 77; // File descriptor in bad state | ||
int EREMCHG = 78; // Remote address changed | ||
int ELIBACC = 79; // Can not access a needed shared library | ||
int ELIBBAD = 80; // Accessing a corrupted shared library | ||
int ELIBSCN = 81; // .lib section in a.out corrupted | ||
int ELIBMAX = 82; // Attempting to link in too many shared libraries | ||
int ELIBEXEC = 83; // Cannot exec a shared library directly | ||
int EILSEQ = 84; // Illegal byte sequence | ||
int ERESTART = 85; // Interrupted system call should be restarted | ||
int ESTRPIPE = 86; // Streams pipe error | ||
int EUSERS = 87; // Too many users | ||
int ENOTSOCK = 88; // Socket operation on non-socket | ||
int EDESTADDRREQ = 89; // Destination address required | ||
int EMSGSIZE = 90; // Message too long | ||
int EPROTOTYPE = 91; // Protocol wrong type for socket | ||
int ENOPROTOOPT = 92; // Protocol not available | ||
int EPROTONOSUPPORT = 93; // Protocol not supported | ||
int ESOCKTNOSUPPORT = 94; // Socket type not supported | ||
int EOPNOTSUPP = 95; // Operation not supported on transport endpoint | ||
int EPFNOSUPPORT = 96; // Protocol family not supported | ||
int EAFNOSUPPORT = 97; // Address family not supported by protocol | ||
int EADDRINUSE = 98; // Address already in use | ||
int EADDRNOTAVAIL = 99; // Cannot assign requested address | ||
int ENETDOWN = 100; // Network is down | ||
int ENETUNREACH = 101; // Network is unreachable | ||
int ENETRESET = 102; // Network dropped connection because of reset | ||
int ECONNABORTED = 103; // Software caused connection abort | ||
int ECONNRESET = 104; // Connection reset by peer | ||
int ENOBUFS = 105; // No buffer space available | ||
int EISCONN = 106; // Transport endpoint is already connected | ||
int ENOTCONN = 107; // Transport endpoint is not connected | ||
int ESHUTDOWN = 108; // Cannot send after transport endpoint shutdown | ||
int ETOOMANYREFS = 109; // Too many references: cannot splice | ||
int ETIMEDOUT = 110; // Connection timed out | ||
int ECONNREFUSED = 111; // Connection refused | ||
int EHOSTDOWN = 112; // Host is down | ||
int EHOSTUNREACH = 113; // No route to host | ||
int EALREADY = 114; // Operation already in progress | ||
int EINPROGRESS = 115; // Operation now in progress | ||
int ESTALE = 116; // Stale NFS file handle | ||
int EUCLEAN = 117; // Structure needs cleaning | ||
int ENOTNAM = 118; // Not a XENIX named type file | ||
int ENAVAIL = 119; // No XENIX semaphores available | ||
int EISNAM = 120; // Is a named type file | ||
int EREMOTEIO = 121; // Remote I/O error | ||
int EDQUOT = 122; // Quota exceeded | ||
int ENOMEDIUM = 123; // No medium found | ||
int EMEDIUMTYPE = 124; // Wrong medium type | ||
int ECANCELED = 125; // Operation Canceled | ||
int ENOKEY = 126; // Required key not available | ||
int EKEYEXPIRED = 127; // Key has expired | ||
int EKEYREVOKED = 128; // Key has been revoked | ||
int EKEYREJECTED = 129; // Key was rejected by service | ||
int EOWNERDEAD = 130; // Owner died | ||
int ENOTRECOVERABLE = 131; // State not recoverable | ||
} |
64 changes: 64 additions & 0 deletions
64
contrib/platform/src/com/sun/jna/platform/linux/Fcntl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
/* Copyright (c) 2020 Daniel Widdis, All Rights Reserved | ||
* | ||
* The contents of this file is dual-licensed under 2 | ||
* alternative Open Source/Free licenses: LGPL 2.1 or later and | ||
* Apache License 2.0. (starting with JNA version 4.0.0). | ||
* | ||
* You can freely decide which license you want to apply to | ||
* the project. | ||
* | ||
* You may obtain a copy of the LGPL License at: | ||
* | ||
* http://www.gnu.org/licenses/licenses.html | ||
* | ||
* A copy is also included in the downloadable source code package | ||
* containing JNA, in file "LGPL2.1". | ||
* | ||
* You may obtain a copy of the Apache License at: | ||
* | ||
* http://www.apache.org/licenses/ | ||
* | ||
* A copy is also included in the downloadable source code package | ||
* containing JNA, in file "AL2.0". | ||
*/ | ||
package com.sun.jna.platform.linux; | ||
|
||
/** | ||
* POSIX Standard: 6.5 File Control Operations from {@code fcntl.h} | ||
*/ | ||
public interface Fcntl { | ||
/* | ||
* File access modes for `open' and `fcntl' | ||
*/ | ||
int O_RDONLY = 00; // Open read-only. | ||
int O_WRONLY = 01; // Open write-only. | ||
int O_RDWR = 02; // Open read/write. | ||
|
||
/* | ||
* Bits OR'd into the second argument to open. Note these are defined | ||
* differently on linux than unix fcntl header | ||
*/ | ||
int O_CREAT = 0100; // Create file if it doesn't exist. | ||
int O_EXCL = 0200; // Fail if file already exists. | ||
int O_TRUNC = 01000; // Truncate file to zero length. | ||
|
||
/* Protection bits. */ | ||
int S_IRUSR = 00400; // Read by owner. | ||
int S_IWUSR = 00200; // Write by owner. | ||
int S_IXUSR = 00100; // Execute by owner. | ||
int S_IRWXU = S_IRUSR | S_IWUSR | S_IXUSR; | ||
|
||
int S_IRGRP = 00040; // Read by group. | ||
int S_IWGRP = 00020; // Write by group. | ||
int S_IXGRP = 00010; // Execute by group. | ||
int S_IRWXG = S_IRGRP | S_IWGRP | S_IXGRP; | ||
|
||
int S_IROTH = 00004; // Read by others. | ||
int S_IWOTH = 00002; // Write by others. | ||
int S_IXOTH = 00001; // Execute by others. | ||
int S_IRWXO = S_IROTH | S_IWOTH | S_IXOTH; | ||
|
||
int S_ISUID = 04000; // set-user-ID bit | ||
int S_ISGID = 02000; // set-group-ID bit (see inode(7)). | ||
int S_ISVTX = 01000; // sticky bit (see inode(7)). | ||
} |
73 changes: 73 additions & 0 deletions
73
contrib/platform/src/com/sun/jna/platform/linux/LibRT.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
/* Copyright (c) 2020 Daniel Widdis, All Rights Reserved | ||
* | ||
* The contents of this file is dual-licensed under 2 | ||
* alternative Open Source/Free licenses: LGPL 2.1 or later and | ||
* Apache License 2.0. (starting with JNA version 4.0.0). | ||
* | ||
* You can freely decide which license you want to apply to | ||
* the project. | ||
* | ||
* You may obtain a copy of the LGPL License at: | ||
* | ||
* http://www.gnu.org/licenses/licenses.html | ||
* | ||
* A copy is also included in the downloadable source code package | ||
* containing JNA, in file "LGPL2.1". | ||
* | ||
* You may obtain a copy of the Apache License at: | ||
* | ||
* http://www.apache.org/licenses/ | ||
* | ||
* A copy is also included in the downloadable source code package | ||
* containing JNA, in file "AL2.0". | ||
*/ | ||
package com.sun.jna.platform.linux; | ||
|
||
import com.sun.jna.Library; | ||
import com.sun.jna.Native; | ||
|
||
/** | ||
* POSIX.1b Realtime Extensions library (librt). Functions in this library | ||
* provide most of the interfaces specified by the POSIX.1b Realtime Extension. | ||
*/ | ||
public interface LibRT extends Library { | ||
|
||
LibRT INSTANCE = Native.load("rt", LibRT.class); | ||
|
||
/** | ||
* Creates and opens a new, or opens an existing, POSIX shared memory object. A | ||
* POSIX shared memory object is in effect a handle which can be used by | ||
* unrelated processes to {@code mmap()} the same region of shared memory. | ||
* | ||
* @param name | ||
* The shared memory object to be created or opened. For portable | ||
* use, a shared memory object should be identified by a name of the | ||
* form {@code /somename} that is, a null-terminated string of up to | ||
* {@code NAME_MAX} (i.e., 255) characters consisting of an initial | ||
* slash, followed by one or more characters, none of which are | ||
* slashes. | ||
* @param oflag | ||
* A bit mask created by ORing together exactly one of | ||
* {@code O_RDONLY} or {@code O_RDWR} and any of the other flags | ||
* {@code O_CREAT}, {@code O_EXCL}, or {@code O_TRUNC}. | ||
* @param mode | ||
* When {@code oflag} includes {@code O_CREAT}, the object's | ||
* permission bits are set according to the low-order 9 bits of mode, | ||
* except that those bits set in the process file mode creation mask | ||
* (see {@code umask(2)}) are cleared for the new object. | ||
* @return On success, returns a file descriptor (a nonnegative integer). On | ||
* failure, returns -1. On failure, {@code errno} is set to indicate the | ||
* cause of the error. | ||
*/ | ||
int shm_open(String name, int oflag, int mode); | ||
|
||
/** | ||
* Removes an object previously created by {@link #shm_open}. | ||
* | ||
* @param name | ||
* The shared memory object to be unlinked. | ||
* @return returns 0 on success, or -1 on error. On failure, {@code errno} is | ||
* set to indicate the cause of the error. | ||
*/ | ||
int shm_unlink(String name); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
/* Copyright (c) 2020 Daniel Widdis, All Rights Reserved | ||
* | ||
* The contents of this file is dual-licensed under 2 | ||
* alternative Open Source/Free licenses: LGPL 2.1 or later and | ||
* Apache License 2.0. (starting with JNA version 4.0.0). | ||
* | ||
* You can freely decide which license you want to apply to | ||
* the project. | ||
* | ||
* You may obtain a copy of the LGPL License at: | ||
* | ||
* http://www.gnu.org/licenses/licenses.html | ||
* | ||
* A copy is also included in the downloadable source code package | ||
* containing JNA, in file "LGPL2.1". | ||
* | ||
* You may obtain a copy of the Apache License at: | ||
* | ||
* http://www.apache.org/licenses/ | ||
* | ||
* A copy is also included in the downloadable source code package | ||
* containing JNA, in file "AL2.0". | ||
*/ | ||
package com.sun.jna.platform.linux; | ||
|
||
import com.sun.jna.Pointer; | ||
|
||
/** | ||
* Definitions for POSIX memory map interface from {@code mman.h} | ||
*/ | ||
public interface Mman { | ||
/* | ||
* Protections are chosen from these bits, OR'd together. The implementation | ||
* does not necessarily support PROT_EXEC or PROT_WRITE without PROT_READ. The | ||
* only guarantees are that no writing will be allowed without PROT_WRITE and no | ||
* access will be allowed for PROT_NONE. | ||
*/ | ||
int PROT_READ = 0x1; // Page can be read. | ||
int PROT_WRITE = 0x2; // Page can be written. | ||
int PROT_EXEC = 0x4; // Page can be executed. | ||
int PROT_NONE = 0x0; // Page can not be accessed. | ||
int PROT_GROWSDOWN = 0x01000000; // Extend change to start of growsdown vma (mprotect only). | ||
int PROT_GROWSUP = 0x02000000; // Extend change to start of growsup vma (mprotect only). | ||
|
||
/* Sharing types (must choose one and only one of these). */ | ||
int MAP_SHARED = 0x01; // Share changes. | ||
int MAP_PRIVATE = 0x02; // Changes are private. | ||
int MAP_SHARED_VALIDATE = 0x03; // share + validate extension flags | ||
int MAP_TYPE = 0x0f; // Mask for type of mapping | ||
|
||
/* Other flags. */ | ||
int MAP_FILE = 0; // Compatibility flag. Ignored. | ||
int MAP_FIXED = 0x10; // Interpret addr exactly. | ||
int MAP_ANONYMOUS = 0x20; // Don't use a file. | ||
int MAP_ANON = MAP_ANONYMOUS; | ||
int MAP_32BIT = 0x40; // Only give out 32-bit addresses. | ||
|
||
/* These are Linux-specific. */ | ||
int MAP_GROWSDOWN = 0x00100; // Stack-like segment. | ||
int MAP_DENYWRITE = 0x00800; // ETXTBSY | ||
int MAP_EXECUTABLE = 0x01000; // Mark it as an executable. | ||
int MAP_LOCKED = 0x02000; // Lock the mapping. | ||
int MAP_NORESERVE = 0x04000; // Don't check for reservations. | ||
int MAP_POPULATE = 0x08000; // Populate (prefault) pagetables. | ||
int MAP_NONBLOCK = 0x10000; // Do not block on IO. | ||
int MAP_STACK = 0x20000; // Allocation is for a stack. | ||
int MAP_HUGETLB = 0x40000; // create a huge page mapping | ||
int MAP_SYNC = 0x80000; // perform synchronous page faults for the mapping | ||
int MAP_FIXED_NOREPLACE = 0x100000; // MAP_FIXED which doesn't unmap underlying mapping | ||
|
||
Pointer MAP_FAILED = new Pointer(-1); // ((void *)-1) | ||
|
||
/* Flags for msync. */ | ||
int MS_ASYNC = 1; | ||
int MS_SYNC = 2; | ||
int MS_INVALIDATE = 4; | ||
} |
Oops, something went wrong.