diff options
author | kinichiro <kinichiro.inoguchi@gmail.com> | 2014-12-08 11:08:45 +0900 |
---|---|---|
committer | Brent Cook <busterb@gmail.com> | 2015-01-06 17:47:16 -0600 |
commit | 0308b63cbf9983a9bcddc2794b1c9fa0d92f18ac (patch) | |
tree | 778a1d147f6719016103fa04aa36bbf53526a804 /crypto/compat | |
parent | 4b7e78153c47ae08420558e7e6d8b0bc2591039c (diff) | |
download | portable-0308b63cbf9983a9bcddc2794b1c9fa0d92f18ac.tar.gz portable-0308b63cbf9983a9bcddc2794b1c9fa0d92f18ac.tar.bz2 portable-0308b63cbf9983a9bcddc2794b1c9fa0d92f18ac.zip |
Add support for HP-UX
tested on: HP-UX 11.31 ia64,
gcc 4.7.1(HP AllianceOne version)
gcc 4.2.3(http://hpux.connect.org.uk)
HP C/aC++
HP-UX defaults to use LP32 and it treats long as 32 bit (= 4 bytes).
This build forces LP64 for treating long as 64 bit.
Diffstat (limited to 'crypto/compat')
-rw-r--r-- | crypto/compat/arc4random.h | 3 | ||||
-rw-r--r-- | crypto/compat/issetugid_hpux.c | 26 |
2 files changed, 29 insertions, 0 deletions
diff --git a/crypto/compat/arc4random.h b/crypto/compat/arc4random.h index 53b5a46..ed812ba 100644 --- a/crypto/compat/arc4random.h +++ b/crypto/compat/arc4random.h | |||
@@ -6,6 +6,9 @@ | |||
6 | #if defined(__FreeBSD__) | 6 | #if defined(__FreeBSD__) |
7 | #include "arc4random_freebsd.h" | 7 | #include "arc4random_freebsd.h" |
8 | 8 | ||
9 | #elif defined(__hpux) | ||
10 | #include "arc4random_hpux.h" | ||
11 | |||
9 | #elif defined(__linux__) | 12 | #elif defined(__linux__) |
10 | #include "arc4random_linux.h" | 13 | #include "arc4random_linux.h" |
11 | 14 | ||
diff --git a/crypto/compat/issetugid_hpux.c b/crypto/compat/issetugid_hpux.c new file mode 100644 index 0000000..73def9b --- /dev/null +++ b/crypto/compat/issetugid_hpux.c | |||
@@ -0,0 +1,26 @@ | |||
1 | #include <stdio.h> | ||
2 | #include <unistd.h> | ||
3 | #include <sys/pstat.h> | ||
4 | |||
5 | /* | ||
6 | * HP-UX does not have issetugid(). | ||
7 | * This experimental implementation uses pstat_getproc() and get*id(). | ||
8 | * First, try pstat_getproc() and check PS_CHANGEDPRIV bit of pst_flag. | ||
9 | * In case unsuccessful calling pstat_getproc(), using get*id(). | ||
10 | * | ||
11 | */ | ||
12 | int issetugid(void) | ||
13 | { | ||
14 | struct pst_status buf; | ||
15 | if(pstat_getproc(&buf, sizeof(buf), 0, getpid()) != 1) { | ||
16 | perror("pstat_getproc()"); | ||
17 | } else { | ||
18 | if(buf.pst_flag & PS_CHANGEDPRIV) | ||
19 | return 1; | ||
20 | } | ||
21 | if(getuid() != geteuid()) | ||
22 | return 1; | ||
23 | if(getgid() != getegid()) | ||
24 | return 1; | ||
25 | return 0; | ||
26 | } | ||