mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
4bf76b4e6c
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2476 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
64 lines
1.1 KiB
Ruby
64 lines
1.1 KiB
Ruby
require "dl/import"
|
|
require "dl/struct"
|
|
|
|
module LIBC
|
|
extend DL::Importable
|
|
|
|
begin
|
|
dlload "libc.so.6"
|
|
rescue
|
|
dlload "libc.so.5"
|
|
end
|
|
|
|
extern "int atoi(char*)"
|
|
extern "ibool isdigit(int)"
|
|
extern "int gettimeofday(struct timeval *, struct timezone *)"
|
|
extern "char* strcat(char*, char*)"
|
|
extern "FILE* fopen(char*, char*)"
|
|
extern "int fclose(FILE*)"
|
|
extern "int fgetc(FILE*)"
|
|
extern "int strlen(char*)"
|
|
extern "void qsort(void*, int, int, void*)"
|
|
|
|
def str_qsort(ary, comp)
|
|
len = ary.length
|
|
r,rs = qsort(ary, len, DL.sizeof('P'), comp)
|
|
return rs[0].to_a('S', len)
|
|
end
|
|
|
|
Timeval = struct [
|
|
"long tv_sec",
|
|
"long tv_usec",
|
|
]
|
|
|
|
Timezone = struct [
|
|
"int tz_minuteswest",
|
|
"int tz_dsttime",
|
|
]
|
|
end
|
|
|
|
|
|
$cb1 = DL.set_callback('IPP', 0){|ptr1, ptr2|
|
|
str1 = ptr1.ptr.to_s
|
|
str2 = ptr2.ptr.to_s
|
|
str1 <=> str2
|
|
}
|
|
|
|
p LIBC.atoi("10")
|
|
|
|
p LIBC.isdigit(?1)
|
|
|
|
p LIBC.isdigit(?a)
|
|
|
|
p LIBC.strcat("a", "b")
|
|
|
|
ary = ["a","c","b"]
|
|
ptr = ary.to_ptr
|
|
LIBC.qsort(ptr, ary.length, DL.sizeof('P'), $cb1)
|
|
p ptr.to_a('S', ary.length)
|
|
|
|
tv = LIBC::Timeval.malloc
|
|
tz = LIBC::Timezone.malloc
|
|
LIBC.gettimeofday(tv, tz)
|
|
|
|
p Time.at(tv.tv_sec)
|