Merge branch 'limits-max' into 'master'
Define max limits in rust See merge request redox-os/relibc!889
This commit is contained in:
@@ -1,32 +0,0 @@
|
||||
#ifndef _BITS_LIMIT_H
|
||||
#define _BITS_LIMIT_H
|
||||
|
||||
#define CHAR_BIT __CHAR_BIT__
|
||||
#ifdef __CHAR_MAX__
|
||||
# define CHAR_MAX __CHAR_MAX__
|
||||
#else
|
||||
# define CHAR_MAX 0xFF
|
||||
#endif
|
||||
#define CHAR_MIN 0
|
||||
#define INT_MAX __INT_MAX__
|
||||
#define INT_MIN (-INT_MAX - 1)
|
||||
#define LLONG_MAX __LONG_LONG_MAX__
|
||||
#define LLONG_MIN (-LLONG_MAX - 1)
|
||||
#define LONG_BIT __LONG_WIDTH__
|
||||
#define LONG_MAX __LONG_MAX__
|
||||
#define LONG_MIN (-LONG_MAX - 1)
|
||||
#define SCHAR_MAX __SCHAR_MAX__
|
||||
#define SCHAR_MIN (-SCHAR_MAX - 1)
|
||||
#define SHRT_MAX __SHRT_MAX__
|
||||
#define SHRT_MIN (-SHRT_MAX - 1)
|
||||
|
||||
// TODO: These might not be accurate on all platforms
|
||||
#define SSIZE_MAX 0x7fffffffffffffff
|
||||
#define UCHAR_MAX 255
|
||||
#define UINT_MAX 0xffffffff
|
||||
#define ULLONG_MAX 0xffffffffffffffff
|
||||
#define ULONG_MAX 0xffffffffffffffff
|
||||
#define USHRT_MAX 0xffff
|
||||
#define WORD_BIT 32
|
||||
|
||||
#endif
|
||||
@@ -1,6 +1,5 @@
|
||||
sys_includes = []
|
||||
include_guard = "_RELIBC_LIMITS_H"
|
||||
trailer = "#include <bits/limits.h>"
|
||||
language = "C"
|
||||
style = "Tag"
|
||||
no_includes = true
|
||||
|
||||
@@ -2,7 +2,10 @@
|
||||
//!
|
||||
//! See <https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/limits.h.html>.
|
||||
|
||||
use core::ffi::c_long;
|
||||
use crate::platform::types::{
|
||||
c_char, c_int, c_long, c_longlong, c_schar, c_short, c_uchar, c_uint, c_ulong, c_ulonglong,
|
||||
c_ushort, ssize_t,
|
||||
};
|
||||
|
||||
pub const HOST_NAME_MAX: usize = 64;
|
||||
pub const NAME_MAX: usize = 255;
|
||||
@@ -10,6 +13,49 @@ pub const PASS_MAX: usize = 128;
|
||||
pub const PATH_MAX: usize = 4096;
|
||||
pub const NGROUPS_MAX: usize = 65536;
|
||||
|
||||
pub const CHAR_BIT: u32 = 8;
|
||||
pub const WORD_BIT: u32 = 32;
|
||||
#[cfg(target_pointer_width = "32")]
|
||||
pub const LONG_BIT: u32 = 32;
|
||||
#[cfg(target_pointer_width = "64")]
|
||||
pub const LONG_BIT: u32 = 64;
|
||||
|
||||
#[cfg(any(target_arch = "aarch64", target_arch = "riscv64"))]
|
||||
pub const CHAR_MAX: c_char = 0xFF;
|
||||
#[cfg(not(any(target_arch = "aarch64", target_arch = "riscv64")))]
|
||||
pub const CHAR_MAX: c_char = 0x7F;
|
||||
pub const SCHAR_MAX: c_schar = 0x7F;
|
||||
pub const SHRT_MAX: c_short = 0x7FFF;
|
||||
pub const INT_MAX: c_int = 0x7FFF_FFFF;
|
||||
#[cfg(target_pointer_width = "32")]
|
||||
pub const LONG_MAX: c_long = 0x7FFF_FFFF;
|
||||
#[cfg(target_pointer_width = "64")]
|
||||
pub const LONG_MAX: c_long = 0x7FFF_FFFF_FFFF_FFFF;
|
||||
pub const LLONG_MAX: c_longlong = 0x7FFF_FFFF_FFFF_FFFF;
|
||||
#[cfg(target_pointer_width = "32")]
|
||||
pub const SSIZE_MAX: ssize_t = 0x7FFF_FFFF;
|
||||
#[cfg(target_pointer_width = "64")]
|
||||
pub const SSIZE_MAX: ssize_t = 0x7FFF_FFFF_FFFF_FFFF;
|
||||
pub const UCHAR_MAX: c_uchar = 0xFF;
|
||||
pub const USHRT_MAX: c_ushort = 0xFFFF;
|
||||
pub const UINT_MAX: c_uint = 0xFFFFFFFF;
|
||||
|
||||
#[cfg(target_pointer_width = "32")]
|
||||
pub const ULONG_MAX: c_ulong = 0xFFFF_FFFF;
|
||||
#[cfg(target_pointer_width = "64")]
|
||||
pub const ULONG_MAX: c_ulong = 0xFFFF_FFFF_FFFF_FFFF;
|
||||
pub const ULLONG_MAX: c_ulonglong = 0xFFFF_FFFF_FFFF_FFFF;
|
||||
|
||||
#[cfg(any(target_arch = "aarch64", target_arch = "riscv64"))]
|
||||
pub const CHAR_MIN: c_char = 0;
|
||||
#[cfg(not(any(target_arch = "aarch64", target_arch = "riscv64")))]
|
||||
pub const CHAR_MIN: c_char = -0x80;
|
||||
pub const SCHAR_MIN: c_schar = -SCHAR_MAX - 1;
|
||||
pub const SHRT_MIN: c_short = -SHRT_MAX - 1;
|
||||
pub const INT_MIN: c_int = -INT_MAX - 1;
|
||||
pub const LONG_MIN: c_long = -LONG_MAX - 1;
|
||||
pub const LLONG_MIN: c_longlong = -LLONG_MAX - 1;
|
||||
|
||||
// TODO: 4096 for most architectures as determined by a quick grep of musl's source; need a better
|
||||
// way to determine it for other archs or to hard code a value.
|
||||
#[cfg(target_os = "linux")]
|
||||
|
||||
@@ -208,6 +208,7 @@ VARIED_NAMES=\
|
||||
dirent/main \
|
||||
dirent/posix_getdents \
|
||||
kill-waitpid \
|
||||
limits \
|
||||
net/if \
|
||||
netdb/getaddrinfo \
|
||||
netdb/getaddrinfo_null \
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
#include <stdio.h>
|
||||
#include <limits.h>
|
||||
#include <stdint.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
int main() {
|
||||
char c_max = CHAR_MAX;
|
||||
char c_min = CHAR_MIN;
|
||||
signed char sc_max = SCHAR_MAX;
|
||||
signed char sc_min = SCHAR_MIN;
|
||||
short s_max = SHRT_MAX;
|
||||
short s_min = SHRT_MIN;
|
||||
int i_max = INT_MAX;
|
||||
int i_min = INT_MIN;
|
||||
long l_max = LONG_MAX;
|
||||
long l_min = LONG_MIN;
|
||||
long long ll_max = LLONG_MAX;
|
||||
long long ll_min = LLONG_MIN;
|
||||
ssize_t ss_max = SSIZE_MAX;
|
||||
unsigned char uc_max = UCHAR_MAX;
|
||||
unsigned short us_max = USHRT_MAX;
|
||||
unsigned int ui_max = UINT_MAX;
|
||||
unsigned long ul_max = ULONG_MAX;
|
||||
unsigned long long ull_max = ULLONG_MAX;
|
||||
int long_bit = LONG_BIT;
|
||||
int word_bit = WORD_BIT;
|
||||
|
||||
printf("CHAR : [%d, %d]\n", c_min, c_max);
|
||||
printf("SCHAR : [%d, %d]\n", sc_min, sc_max);
|
||||
printf("SHRT : [%d, %d]\n", s_min, s_max);
|
||||
printf("INT : [%d, %d]\n", i_min, i_max);
|
||||
printf("LONG : [%ld, %ld]\n", l_min, l_max);
|
||||
printf("LLONG : [%lld, %lld]\n", ll_min, ll_max);
|
||||
printf("SSIZE_MAX : %zd\n\n", ss_max);
|
||||
printf("UCHAR_MAX : %u\n", uc_max);
|
||||
printf("USHRT_MAX : %u\n", us_max);
|
||||
printf("UINT_MAX : %u\n", ui_max);
|
||||
printf("ULONG_MAX : %lu\n", ul_max);
|
||||
printf("ULLONG_MAX : %llu\n\n", ull_max);
|
||||
printf("LONG_BIT : %d\n", long_bit);
|
||||
printf("WORD_BIT : %d\n", word_bit);
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user