Linux premium180.web-hosting.com 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
LiteSpeed
: 162.0.209.168 | : 216.73.216.55
Cant Read [ /etc/named.conf ]
8.3.30
nortrmdp
www.github.com/MadExploits
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
CREATE WP USER
BLACK DEFEND!
README
+ Create Folder
+ Create File
/
usr /
bin /
[ HOME SHELL ]
Name
Size
Permission
Action
7za
46
B
-rwxr-xr-x
GET
15.84
KB
-rwxr-xr-x
Mail
408.89
KB
-rwxr-xr-x
[
53.58
KB
-rwxr-xr-x
aclocal
35.62
KB
-rwxr-xr-x
aclocal-1.16
35.62
KB
-rwxr-xr-x
addr2line
33.42
KB
-rwxr-xr-x
animate
11.84
KB
-rwxr-xr-x
ar
61.96
KB
-rwxr-xr-x
arch
37.34
KB
-rwxr-xr-x
arpaname
11.82
KB
-rwxr-xr-x
as
889.91
KB
-rwxr-xr-x
aspell
159.5
KB
-rwxr-xr-x
at
1.01
KB
-rwxr-xr-x
atq
1.01
KB
-rwxr-xr-x
atrm
1.02
KB
-rwxr-xr-x
autoconf
14.42
KB
-rwxr-xr-x
autoheader
8.33
KB
-rwxr-xr-x
autom4te
31.43
KB
-rwxr-xr-x
automake
251.9
KB
-rwxr-xr-x
automake-1.16
251.9
KB
-rwxr-xr-x
autoreconf
20.57
KB
-rwxr-xr-x
autoscan
16.72
KB
-rwxr-xr-x
autoupdate
33.08
KB
-rwxr-xr-x
awk
669.77
KB
-rwxr-xr-x
b2sum
57.69
KB
-rwxr-xr-x
base32
41.47
KB
-rwxr-xr-x
base64
41.49
KB
-rwxr-xr-x
basename
37.41
KB
-rwxr-xr-x
bash
1.1
MB
-rwxr-xr-x
bashbug-64
7.18
KB
-rwxr-xr-x
batch
137
B
-rwxr-xr-x
bison
437.72
KB
-rwxr-xr-x
bunzip2
36.86
KB
-rwxr-xr-x
bzcat
36.86
KB
-rwxr-xr-x
bzcmp
2.08
KB
-rwxr-xr-x
bzdiff
2.08
KB
-rwxr-xr-x
bzgrep
1.64
KB
-rwxr-xr-x
bzip2
36.86
KB
-rwxr-xr-x
bzip2recover
16.44
KB
-rwxr-xr-x
bzless
1.23
KB
-rwxr-xr-x
bzmore
1.23
KB
-rwxr-xr-x
c++
1.21
MB
-rwxr-x---
c++filt
28.89
KB
-rwxr-xr-x
c89
224
B
-rwxr-x---
c99
215
B
-rwxr-x---
cagefs_enter.proxied
1.03
KB
-rwxr-xr-x
cal
65.98
KB
-rwxr-xr-x
captoinfo
85.31
KB
-rwxr-xr-x
cat
37.46
KB
-rwxr-xr-x
catchsegv
3.21
KB
-rwxr-xr-x
cc
1.21
MB
-rwxr-x---
chgrp
66.27
KB
-rwxr-xr-x
chmod
62.2
KB
-rwxr-xr-x
chown
70.29
KB
-rwxr-xr-x
chrt
37.19
KB
-rwxr-xr-x
cksum
37.39
KB
-rwxr-xr-x
cldetect
10.34
KB
-rwxr-xr-x
clear
12.54
KB
-rwxr-xr-x
clusterdb
70.23
KB
-rwxr-xr-x
cmp
103.76
KB
-rwxr-xr-x
col
29.01
KB
-rwxr-xr-x
colcrt
16.48
KB
-rwxr-xr-x
colrm
24.88
KB
-rwxr-xr-x
column
49.47
KB
-rwxr-xr-x
comm
41.56
KB
-rwxr-xr-x
compare
11.85
KB
-rwxr-xr-x
composite
11.84
KB
-rwxr-xr-x
conjure
11.84
KB
-rwxr-xr-x
convert
11.84
KB
-rwxr-xr-x
cp
148.02
KB
-rwxr-xr-x
cpan
8.17
KB
-rwxr-xr-x
cpp
1.21
MB
-rwxr-xr-x
createdb
70.22
KB
-rwxr-xr-x
createuser
74.63
KB
-rwxr-xr-x
crontab
1.49
KB
-rwxr-xr-x
crontab.cagefs
54.16
KB
-rwxr-xr-x
csplit
53.68
KB
-rwxr-xr-x
curl
230.08
KB
-rwxr-xr-x
cut
49.52
KB
-rwxr-xr-x
date
105.95
KB
-rwxr-xr-x
dd
77.97
KB
-rwxr-xr-x
delv
42.46
KB
-rwxr-xr-x
df
91.09
KB
-rwxr-xr-x
diff
268.01
KB
-rwxr-xr-x
diff3
128.6
KB
-rwxr-xr-x
dig
162.18
KB
-rwxr-xr-x
dir
139.9
KB
-rwxr-xr-x
dircolors
49.55
KB
-rwxr-xr-x
dirname
33.36
KB
-rwxr-xr-x
display
11.84
KB
-rwxr-xr-x
dnstap-read
20.43
KB
-rwxr-xr-x
dropdb
66.02
KB
-rwxr-xr-x
dropuser
65.99
KB
-rwxr-xr-x
du
107
KB
-rwxr-xr-x
echo
37.35
KB
-rwxr-xr-x
egrep
28
B
-rwxr-xr-x
enc2xs
40.97
KB
-rwxr-xr-x
enchant
21.08
KB
-rwxr-xr-x
enchant-lsmod
13.09
KB
-rwxr-xr-x
env
41.35
KB
-rwxr-xr-x
eps2eps
639
B
-rwxr-xr-x
eqn
232.16
KB
-rwxr-xr-x
ex
1.13
MB
-rwxr-xr-x
expand
41.59
KB
-rwxr-xr-x
expr
49.57
KB
-rwxr-xr-x
factor
85.97
KB
-rwxr-xr-x
false
33.32
KB
-rwxr-xr-x
fc-cache
132
B
-rwxr-xr-x
fc-cache-64
20.35
KB
-rwxr-xr-x
fc-cat
16.35
KB
-rwxr-xr-x
fc-conflist
12.25
KB
-rwxr-xr-x
fc-list
12.25
KB
-rwxr-xr-x
fc-match
16.26
KB
-rwxr-xr-x
fc-pattern
12.26
KB
-rwxr-xr-x
fc-query
12.24
KB
-rwxr-xr-x
fc-scan
12.26
KB
-rwxr-xr-x
fc-validate
16.26
KB
-rwxr-xr-x
fgrep
28
B
-rwxr-xr-x
file
24.69
KB
-rwxr-xr-x
find
223.27
KB
-rwxr-xr-x
flex
428.45
KB
-rwxr-xr-x
flex++
428.45
KB
-rwxr-xr-x
flock
33.2
KB
-rwxr-xr-x
fmt
45.49
KB
-rwxr-xr-x
fold
41.41
KB
-rwxr-xr-x
free
20.79
KB
-rwxr-xr-x
freetype-config
4.31
KB
-rwxr-xr-x
funzip
36.63
KB
-rwxr-xr-x
g++
1.21
MB
-rwxr-x---
gawk
669.77
KB
-rwxr-xr-x
gcc
1.21
MB
-rwxr-x---
gcc-ar
36.66
KB
-rwxr-xr-x
gcc-nm
36.66
KB
-rwxr-xr-x
gcc-ranlib
36.66
KB
-rwxr-xr-x
gcov
1.31
MB
-rwxr-xr-x
gcov-dump
570.96
KB
-rwxr-xr-x
gcov-tool
607.77
KB
-rwxr-xr-x
gem
542
B
-rwxr-xr-x
gencat
24.84
KB
-rwxr-xr-x
geoiplookup
21.89
KB
-rwxr-xr-x
geoiplookup6
21.65
KB
-rwxr-xr-x
geqn
232.16
KB
-rwxr-xr-x
getconf
32.46
KB
-rwxr-xr-x
getent
33.13
KB
-rwxr-xr-x
getopt
20.53
KB
-rwxr-xr-x
ghostscript
12.35
KB
-rwxr-xr-x
git
3.67
MB
-rwxr-xr-x
git-receive-pack
3.67
MB
-rwxr-xr-x
git-shell
2.13
MB
-rwxr-xr-x
git-upload-archive
3.67
MB
-rwxr-xr-x
git-upload-pack
3.67
MB
-rwxr-xr-x
gm
7.82
KB
-rwxr-xr-x
gmake
235.32
KB
-rwxr-xr-x
gneqn
908
B
-rwxr-xr-x
gnroff
3.23
KB
-rwxr-xr-x
gpg
1.04
MB
-rwxr-xr-x
gpg-agent
419.3
KB
-rwxr-xr-x
gpg-error
34.16
KB
-rwxr-xr-x
gpg-zip
3.44
KB
-rwxr-xr-x
gpgsplit
87.02
KB
-rwxr-xr-x
gpgv
451.51
KB
-rwxr-xr-x
gpic
293.84
KB
-rwxr-xr-x
gprof
103.35
KB
-rwxr-xr-x
grep
193.63
KB
-rwxr-xr-x
groff
124.92
KB
-rwxr-xr-x
grops
191.14
KB
-rwxr-xr-x
grotty
141.9
KB
-rwxr-xr-x
groups
37.39
KB
-rwxr-xr-x
gs
12.35
KB
-rwxr-xr-x
gsnd
277
B
-rwxr-xr-x
gsoelim
42.55
KB
-rwxr-xr-x
gtar
448.99
KB
-rwxr-xr-x
gtbl
154.61
KB
-rwxr-xr-x
gtroff
805.02
KB
-rwxr-xr-x
gunzip
2.29
KB
-rwxr-xr-x
gzexe
6.23
KB
-rwxr-xr-x
gzip
94.67
KB
-rwxr-xr-x
h2ph
28.69
KB
-rwxr-xr-x
h2xs
59.44
KB
-rwxr-xr-x
head
45.5
KB
-rwxr-xr-x
hexdump
57.5
KB
-rwxr-xr-x
host
142.29
KB
-rwxr-xr-x
hostid
33.34
KB
-rwxr-xr-x
hostname
21.16
KB
-rwxr-xr-x
hunspell
144.7
KB
-rwxr-xr-x
iconv
61.43
KB
-rwxr-xr-x
id
45.44
KB
-rwxr-xr-x
identify
11.84
KB
-rwxr-xr-x
idn
39.41
KB
-rwxr-xr-x
ifnames
4.03
KB
-rwxr-xr-x
import
11.84
KB
-rwxr-xr-x
infocmp
61.05
KB
-rwxr-xr-x
infotocap
85.31
KB
-rwxr-xr-x
install
156.16
KB
-rwxr-xr-x
instmodsh
4.1
KB
-rwxr-xr-x
ionice
28.98
KB
-rwxr-xr-x
ipcrm
28.99
KB
-rwxr-xr-x
ipcs
53.4
KB
-rwxr-xr-x
isosize
24.88
KB
-rwxr-xr-x
ispell
988
B
-rwxr-xr-x
join
53.7
KB
-rwxr-xr-x
kill
37.28
KB
-rwxr-xr-x
ld
1.71
MB
-rwxr-x---
ld.bfd
1.71
MB
-rwxr-x---
ldd
5.31
KB
-rwxr-xr-x
less
173.76
KB
-rwxr-xr-x
lessecho
12.4
KB
-rwxr-xr-x
lesskey
21.99
KB
-rwxr-xr-x
lesspipe.sh
3.07
KB
-rwxr-xr-x
lex
428.45
KB
-rwxr-xr-x
libnetcfg
15.41
KB
-rwxr-xr-x
libtool
359.11
KB
-rwxr-xr-x
libtoolize
126.17
KB
-rwxr-xr-x
link
33.34
KB
-rwxr-xr-x
ln
70.5
KB
-rwxr-xr-x
locale
56.45
KB
-rwxr-xr-x
localedef
307.47
KB
-rwxr-xr-x
logger
49.98
KB
-rwxr-xr-x
login
40.96
KB
-rwxr-xr-x
logname
33.34
KB
-rwxr-xr-x
look
16.45
KB
-rwxr-xr-x
ls
139.89
KB
-rwxr-xr-x
lynx
1.84
MB
-rwxr-xr-x
m4
185.56
KB
-rwxr-xr-x
mail
408.89
KB
-rwxr-xr-x
mailx
408.89
KB
-rwxr-xr-x
make
235.32
KB
-rwxr-xr-x
make-dummy-cert
610
B
-rwxr-xr-x
mariadb
5.35
MB
-rwxr-xr-x
mariadb-access
109.48
KB
-rwxr-xr-x
mariadb-admin
4.89
MB
-rwxr-xr-x
mariadb-binlog
5.16
MB
-rwxr-xr-x
mariadb-check
4.89
MB
-rwxr-xr-x
mariadb-conv
4.59
MB
-rwxr-xr-x
mariadb-convert-table-format
4.28
KB
-rwxr-xr-x
mariadb-dump
4.99
MB
-rwxr-xr-x
mariadb-dumpslow
8.19
KB
-rwxr-xr-x
mariadb-embedded
24.6
MB
-rwxr-xr-x
mariadb-find-rows
3.35
KB
-rwxr-xr-x
mariadb-hotcopy
34.67
KB
-rwxr-xr-x
mariadb-import
4.88
MB
-rwxr-xr-x
mariadb-plugin
4.57
MB
-rwxr-xr-x
mariadb-secure-installation
13.67
KB
-rwxr-xr-x
mariadb-setpermission
17.7
KB
-rwxr-xr-x
mariadb-show
4.88
MB
-rwxr-xr-x
mariadb-slap
4.89
MB
-rwxr-xr-x
mariadb-tzinfo-to-sql
4.57
MB
-rwxr-xr-x
mariadb-waitpid
4.56
MB
-rwxr-xr-x
mc
1.3
MB
-rwxr-xr-x
mcdiff
1.3
MB
-rwxr-xr-x
mcedit
1.3
MB
-rwxr-xr-x
mcookie
33.27
KB
-rwxr-xr-x
mcview
1.3
MB
-rwxr-xr-x
md5sum
45.54
KB
-rwxr-xr-x
mesg
16.36
KB
-rwxr-xr-x
mkdir
82.7
KB
-rwxr-xr-x
mkfifo
66.46
KB
-rwxr-xr-x
mktemp
45.66
KB
-rwxr-xr-x
mogrify
11.84
KB
-rwxr-xr-x
montage
11.84
KB
-rwxr-xr-x
more
44.94
KB
-rwxr-xr-x
msql2mysql
1.41
KB
-rwxr-xr-x
mv
143.95
KB
-rwxr-xr-x
my_print_defaults
4.56
MB
-rwxr-xr-x
mysql
5.35
MB
-rwxr-xr-x
mysql_config
4.47
KB
-rwxr-xr-x
mysql_find_rows
3.35
KB
-rwxr-xr-x
mysql_waitpid
4.56
MB
-rwxr-xr-x
mysqlaccess
109.48
KB
-rwxr-xr-x
mysqladmin
4.89
MB
-rwxr-xr-x
mysqlbinlog
5.16
MB
-rwxr-xr-x
mysqlcheck
4.89
MB
-rwxr-xr-x
mysqldump
4.99
MB
-rwxr-xr-x
mysqlimport
4.88
MB
-rwxr-xr-x
mysqlshow
4.88
MB
-rwxr-xr-x
mytop
72.03
KB
-rwxr-xr-x
namei
33.1
KB
-rwxr-xr-x
nano
247.94
KB
-rwxr-xr-x
neqn
908
B
-rwxr-xr-x
nice
37.33
KB
-rwxr-xr-x
nl
45.55
KB
-rwxr-xr-x
nm
50.38
KB
-rwxr-xr-x
nohup
37.41
KB
-rwxr-xr-x
nproc
37.41
KB
-rwxr-xr-x
nroff
3.23
KB
-rwxr-xr-x
nslookup
146.26
KB
-rwxr-xr-x
nsupdate
73.05
KB
-rwxr-xr-x
numfmt
65.64
KB
-rwxr-xr-x
objcopy
240.07
KB
-rwxr-xr-x
objdump
419.76
KB
-rwxr-xr-x
od
73.8
KB
-rwxr-xr-x
openssl
745.95
KB
-rwxr-xr-x
pango-list
11.88
KB
-rwxr-xr-x
pango-view
57.44
KB
-rwxr-xr-x
passwd
1.02
KB
-rwxr-xr-x
paste
37.38
KB
-rwxr-xr-x
patch
206.46
KB
-rwxr-xr-x
pathchk
37.33
KB
-rwxr-xr-x
pdf2dsc
698
B
-rwxr-xr-x
pdf2ps
909
B
-rwxr-xr-x
perl
12.43
KB
-rwxr-xr-x
perl5.26.3
12.43
KB
-rwxr-xr-x
perlbug
44.39
KB
-rwxr-xr-x
perldoc
118
B
-rwxr-xr-x
perlivp
10.56
KB
-rwxr-xr-x
perlml
6.86
KB
-rwxr-xr-x
perlthanks
44.39
KB
-rwxr-xr-x
pg_dump
399.43
KB
-rwxr-xr-x
pg_dumpall
107.11
KB
-rwxr-xr-x
pg_restore
173.34
KB
-rwxr-xr-x
pgrep
28.84
KB
-rwxr-xr-x
php
937
B
-rwxr-xr-x
pic
293.84
KB
-rwxr-xr-x
piconv
8.08
KB
-rwxr-xr-x
pinentry
2.35
KB
-rwxr-xr-x
pinentry-curses
77.89
KB
-rwxr-xr-x
ping
66.13
KB
-rwxr-xr-x
pinky
41.46
KB
-rwxr-xr-x
pkg-config
40.04
KB
-rwxr-xr-x
pkgconf
40.04
KB
-rwxr-xr-x
pkill
28.84
KB
-rwxr-xr-x
pl2pm
4.43
KB
-rwxr-xr-x
pmap
32.78
KB
-rwxr-xr-x
pod2html
4.04
KB
-rwxr-xr-x
pod2man
14.68
KB
-rwxr-xr-x
pod2text
10.55
KB
-rwxr-xr-x
pod2usage
3.86
KB
-rwxr-xr-x
podchecker
3.57
KB
-rwxr-xr-x
podselect
2.47
KB
-rwxr-xr-x
post-grohtml
238.73
KB
-rwxr-xr-x
pr
82.15
KB
-rwxr-xr-x
pre-grohtml
130.55
KB
-rwxr-xr-x
precat
5.52
KB
-rwxr-xr-x
preunzip
5.52
KB
-rwxr-xr-x
prezip
5.52
KB
-rwxr-xr-x
prezip-bin
11.98
KB
-rwxr-xr-x
printenv
33.32
KB
-rwxr-xr-x
printf
53.56
KB
-rwxr-xr-x
prove
13.24
KB
-rwxr-xr-x
ps
134.75
KB
-rwxr-xr-x
ps2ascii
631
B
-rwxr-xr-x
ps2epsi
2.69
KB
-rwxr-xr-x
ps2pdf
272
B
-rwxr-xr-x
ps2pdf12
215
B
-rwxr-xr-x
ps2pdf13
215
B
-rwxr-xr-x
ps2pdf14
215
B
-rwxr-xr-x
ps2pdfwr
1.07
KB
-rwxr-xr-x
ps2ps
647
B
-rwxr-xr-x
ps2ps2
669
B
-rwxr-xr-x
psql
644.33
KB
-rwxr-xr-x
ptx
77.99
KB
-rwxr-xr-x
pwd
37.42
KB
-rwxr-xr-x
pwdx
12.68
KB
-rwxr-xr-x
python2
7.84
KB
-rwxr-xr-x
python2.7
7.84
KB
-rwxr-xr-x
python3
11.59
KB
-rwxr-xr-x
python3.6
11.59
KB
-rwxr-xr-x
python3.6m
11.59
KB
-rwxr-xr-x
ranlib
61.97
KB
-rwxr-xr-x
readelf
624.54
KB
-rwxr-xr-x
readlink
45.88
KB
-rwxr-xr-x
realpath
49.95
KB
-rwxr-xr-x
recode
47.03
KB
-rwxr-xr-x
reindexdb
70.32
KB
-rwxr-xr-x
rename
16.5
KB
-rwxr-xr-x
renew-dummy-cert
725
B
-rwxr-xr-x
renice
16.46
KB
-rwxr-xr-x
replace
4.54
MB
-rwxr-xr-x
reset
24.76
KB
-rwxr-xr-x
rev
12.45
KB
-rwxr-xr-x
rm
70.38
KB
-rwxr-xr-x
rmdir
45.46
KB
-rwxr-xr-x
rnano
247.94
KB
-rwxr-xr-x
rsync
510.15
KB
-rwxr-xr-x
ruby
11.84
KB
-rwxr-xr-x
run-with-aspell
85
B
-rwxr-xr-x
rvi
1.13
MB
-rwxr-xr-x
rview
1.13
MB
-rwxr-xr-x
rvim
2.93
MB
-rwxr-xr-x
scalar
2.18
MB
-rwxr-xr-x
scl
36.87
KB
-rwxr-xr-x
scl_enabled
258
B
-rwxr-xr-x
scl_source
1.82
KB
-rwxr-xr-x
scp
102.84
KB
-rwxr-xr-x
screen
482.46
KB
-rwxr-xr-x
script
36.8
KB
-rwxr-xr-x
sdiff
105.33
KB
-rwxr-xr-x
sed
115.48
KB
-rwxr-xr-x
selectorctl
7.63
KB
-rwxr-xr-x
seq
53.45
KB
-rwxr-xr-x
setsid
16.38
KB
-rwxr-xr-x
setterm
45.13
KB
-rwxr-xr-x
sftp
159.74
KB
-rwxr-xr-x
sh
1.1
MB
-rwxr-xr-x
sha1sum
45.55
KB
-rwxr-xr-x
sha224sum
45.58
KB
-rwxr-xr-x
sha256sum
45.59
KB
-rwxr-xr-x
sha384sum
45.59
KB
-rwxr-xr-x
sha512sum
45.59
KB
-rwxr-xr-x
shred
61.85
KB
-rwxr-xr-x
shuf
58.09
KB
-rwxr-xr-x
size
33.25
KB
-rwxr-xr-x
skill
28.8
KB
-rwxr-xr-x
slabtop
20.84
KB
-rwxr-xr-x
sleep
37.39
KB
-rwxr-xr-x
snice
28.8
KB
-rwxr-xr-x
soelim
42.55
KB
-rwxr-xr-x
sort
123.47
KB
-rwxr-xr-x
spell
122
B
-rwxr-xr-x
splain
18.7
KB
-rwxr-xr-x
split
58.05
KB
-rwxr-xr-x
sprof
28.67
KB
-rwxr-xr-x
sqlite3
1.28
MB
-rwxr-xr-x
ssh
757.47
KB
-rwxr-xr-x
ssh-add
346.11
KB
-rwxr-xr-x
ssh-agent
325.59
KB
-rwxr-xr-x
ssh-copy-id
10.44
KB
-rwxr-xr-x
ssh-keygen
427.17
KB
-rwxr-xr-x
ssh-keyscan
428.52
KB
-rwxr-xr-x
stat
86.16
KB
-rwxr-xr-x
stdbuf
49.5
KB
-rwxr-xr-x
strace
1.94
MB
-rwxr-xr-x
stream
11.83
KB
-rwxr-xr-x
strings
37.43
KB
-rwxr-xr-x
strip
240.09
KB
-rwxr-xr-x
stty
77.61
KB
-rwxr-xr-x
sum
45.53
KB
-rwxr-xr-x
sync
37.36
KB
-rwxr-xr-x
tabs
16.55
KB
-rwxr-xr-x
tac
41.49
KB
-rwxr-xr-x
tail
74.13
KB
-rwxr-xr-x
tar
448.99
KB
-rwxr-xr-x
taskset
37.26
KB
-rwxr-xr-x
tbl
154.61
KB
-rwxr-xr-x
tclsh
9.04
KB
-rwxr-xr-x
tclsh8.6
9.04
KB
-rwxr-xr-x
tee
41.48
KB
-rwxr-xr-x
test
53.56
KB
-rwxr-xr-x
tic
85.31
KB
-rwxr-xr-x
timeout
41.86
KB
-rwxr-xr-x
tload
16.76
KB
-rwxr-xr-x
tmpwatch
35.47
KB
-rwxr-xr-x
toe
16.45
KB
-rwxr-xr-x
top
121.7
KB
-rwxr-xr-x
touch
93.94
KB
-rwxr-xr-x
tput
24.8
KB
-rwxr-xr-x
tr
49.63
KB
-rwxr-xr-x
traceroute
70.97
KB
-rwxr-xr-x
troff
805.02
KB
-rwxr-xr-x
true
33.33
KB
-rwxr-xr-x
truncate
41.36
KB
-rwxr-xr-x
tset
24.76
KB
-rwxr-xr-x
tsort
41.49
KB
-rwxr-xr-x
tty
33.31
KB
-rwxr-xr-x
tzselect
15.01
KB
-rwxr-xr-x
uapi
1.02
KB
-rwxr-xr-x
ul
20.59
KB
-rwxr-xr-x
uname
37.33
KB
-rwxr-xr-x
unexpand
45.61
KB
-rwxr-xr-x
uniq
49.64
KB
-rwxr-xr-x
unlink
33.34
KB
-rwxr-xr-x
unzip
201.88
KB
-rwxr-xr-x
unzipsfx
101.48
KB
-rwxr-xr-x
uptime
12.59
KB
-rwxr-xr-x
users
37.39
KB
-rwxr-xr-x
utmpdump
28.66
KB
-rwxr-xr-x
vacuumdb
78.46
KB
-rwxr-xr-x
vdir
139.9
KB
-rwxr-xr-x
vi
1.13
MB
-rwxr-xr-x
view
1.13
MB
-rwxr-xr-x
vim
2.93
MB
-rwxr-xr-x
vimdiff
2.93
MB
-rwxr-xr-x
vimtutor
2.07
KB
-rwxr-xr-x
vmstat
36.79
KB
-rwxr-xr-x
watch
29.19
KB
-rwxr-xr-x
wc
49.64
KB
-rwxr-xr-x
wget
521.41
KB
-rwxr-xr-x
whereis
29.27
KB
-rwxr-xr-x
which
29.38
KB
-rwxr-xr-x
who
53.59
KB
-rwxr-xr-x
whoami
33.34
KB
-rwxr-xr-x
word-list-compress
11.99
KB
-rwxr-xr-x
x86_64-redhat-linux-c++
1.21
MB
-rwxr-x---
x86_64-redhat-linux-g++
1.21
MB
-rwxr-x---
x86_64-redhat-linux-gcc
1.21
MB
-rwxr-x---
x86_64-redhat-linux-gcc-8
1.21
MB
-rwxr-x---
xargs
74.11
KB
-rwxr-xr-x
xmlcatalog
20.38
KB
-rwxr-xr-x
xmllint
73.37
KB
-rwxr-xr-x
xmlwf
36.96
KB
-rwxr-xr-x
xsltproc
28.47
KB
-rwxr-xr-x
xsubpp
4.96
KB
-rwxr-xr-x
xxd
20.54
KB
-rwxr-xr-x
yes
33.37
KB
-rwxr-xr-x
zcat
1.94
KB
-rwxr-xr-x
zcmp
1.64
KB
-rwxr-xr-x
zdiff
5.74
KB
-rwxr-xr-x
zegrep
29
B
-rwxr-xr-x
zfgrep
29
B
-rwxr-xr-x
zforce
2.03
KB
-rwxr-xr-x
zgrep
7.4
KB
-rwxr-xr-x
zip
229
KB
-rwxr-xr-x
zipcloak
102.91
KB
-rwxr-xr-x
zipgrep
2.88
KB
-rwxr-xr-x
zipinfo
201.88
KB
-rwxr-xr-x
zipnote
97.76
KB
-rwxr-xr-x
zipsplit
97.76
KB
-rwxr-xr-x
zless
2.15
KB
-rwxr-xr-x
zmore
1.8
KB
-rwxr-xr-x
znew
4.45
KB
-rwxr-xr-x
zsoelim
42.55
KB
-rwxr-xr-x
Delete
Unzip
Zip
${this.title}
Close
Code Editor : h2ph
#!/usr/bin/perl eval 'exec /usr/bin/perl -S $0 ${1+"$@"}' if $running_under_some_shell; BEGIN { pop @INC if $INC[-1] eq '.' } use strict; use Config; use File::Path qw(mkpath); use Getopt::Std; # Make sure read permissions for all are set: if (defined umask && (umask() & 0444)) { umask (umask() & ~0444); } getopts('Dd:rlhaQe'); use vars qw($opt_D $opt_d $opt_r $opt_l $opt_h $opt_a $opt_Q $opt_e); die "-r and -a options are mutually exclusive\n" if ($opt_r and $opt_a); my @inc_dirs = inc_dirs() if $opt_a; my $Exit = 0; my $Dest_dir = $opt_d || $Config{installsitearch}; die "Destination directory $Dest_dir doesn't exist or isn't a directory\n" unless -d $Dest_dir; my @isatype = qw( char uchar u_char short ushort u_short int uint u_int long ulong u_long FILE key_t caddr_t float double size_t ); my %isatype; @isatype{@isatype} = (1) x @isatype; my $inif = 0; my %Is_converted; my %bad_file = (); @ARGV = ('-') unless @ARGV; build_preamble_if_necessary(); sub reindent($) { my($text) = shift; $text =~ s/\n/\n /g; $text =~ s/ /\t/g; $text; } my ($t, $tab, %curargs, $new, $eval_index, $dir, $name, $args, $outfile); my ($incl, $incl_type, $incl_quote, $next); while (defined (my $file = next_file())) { if (-l $file and -d $file) { link_if_possible($file) if ($opt_l); next; } # Recover from header files with unbalanced cpp directives $t = ''; $tab = 0; # $eval_index goes into '#line' directives, to help locate syntax errors: $eval_index = 1; if ($file eq '-') { open(IN, "-"); open(OUT, ">-"); } else { ($outfile = $file) =~ s/\.h$/.ph/ || next; print "$file -> $outfile\n" unless $opt_Q; if ($file =~ m|^(.*)/|) { $dir = $1; mkpath "$Dest_dir/$dir"; } if ($opt_a) { # automagic mode: locate header file in @inc_dirs foreach (@inc_dirs) { chdir $_; last if -f $file; } } open(IN, "<", "$file") || (($Exit = 1),(warn "Can't open $file: $!\n"),next); open(OUT, ">", "$Dest_dir/$outfile") || die "Can't create $outfile: $!\n"; } print OUT "require '_h2ph_pre.ph';\n\n", "no warnings qw(redefine misc);\n\n"; while (defined (local $_ = next_line($file))) { if (s/^\s*\#\s*//) { if (s/^define\s+(\w+)//) { $name = $1; $new = ''; s/\s+$//; s/\(\w+\s*\(\*\)\s*\(\w*\)\)\s*(-?\d+)/$1/; # (int (*)(foo_t))0 if (s/^\(([\w,\s]*)\)//) { $args = $1; my $proto = '() '; if ($args ne '') { $proto = ''; foreach my $arg (split(/,\s*/,$args)) { $arg =~ s/^\s*([^\s].*[^\s])\s*$/$1/; $curargs{$arg} = 1; } $args =~ s/\b(\w)/\$$1/g; $args = "my($args) = \@_;\n$t "; } s/^\s+//; expr(); $new =~ s/(["\\])/\\$1/g; #"]); EMIT($proto); } else { s/^\s+//; expr(); $new = 1 if $new eq ''; # Shunt around such directives as '#define FOO FOO': next if $new =~ /^\s*&\Q$name\E\s*\z/; $new = reindent($new); $args = reindent($args); $new =~ s/(['\\])/\\$1/g; #']); print OUT $t, 'eval '; if ($opt_h) { print OUT "\"\\n#line $eval_index $outfile\\n\" . "; $eval_index++; } print OUT "'sub $name () {$new;}' unless defined(&$name);\n"; } } elsif (/^(include|import|include_next)\s*([<\"])(.*)[>\"]/) { $incl_type = $1; $incl_quote = $2; $incl = $3; if (($incl_type eq 'include_next') || ($opt_e && exists($bad_file{$incl}))) { $incl =~ s/\.h$/.ph/; print OUT ($t, "eval {\n"); $tab += 4; $t = "\t" x ($tab / 8) . ' ' x ($tab % 8); print OUT ($t, "my(\@REM);\n"); if ($incl_type eq 'include_next') { print OUT ($t, "my(\%INCD) = map { \$INC{\$_} => 1 } ", "(grep { \$_ eq \"$incl\" } ", "keys(\%INC));\n"); print OUT ($t, "\@REM = map { \"\$_/$incl\" } ", "(grep { not exists(\$INCD{\"\$_/$incl\"})", " and -f \"\$_/$incl\" } \@INC);\n"); } else { print OUT ($t, "\@REM = map { \"\$_/$incl\" } ", "(grep {-r \"\$_/$incl\" } \@INC);\n"); } print OUT ($t, "require \"\$REM[0]\" if \@REM;\n"); $tab -= 4; $t = "\t" x ($tab / 8) . ' ' x ($tab % 8); print OUT ($t, "};\n"); print OUT ($t, "warn(\$\@) if \$\@;\n"); } else { $incl =~ s/\.h$/.ph/; # copy the prefix in the quote syntax (#include "x.h") case if ($incl !~ m|/| && $incl_quote eq q{"} && $file =~ m|^(.*)/|) { $incl = "$1/$incl"; } print OUT $t,"require '$incl';\n"; } } elsif (/^ifdef\s+(\w+)/) { print OUT $t,"if(defined(&$1)) {\n"; $tab += 4; $t = "\t" x ($tab / 8) . ' ' x ($tab % 8); } elsif (/^ifndef\s+(\w+)/) { print OUT $t,"unless(defined(&$1)) {\n"; $tab += 4; $t = "\t" x ($tab / 8) . ' ' x ($tab % 8); } elsif (s/^if\s+//) { $new = ''; $inif = 1; expr(); $inif = 0; print OUT $t,"if($new) {\n"; $tab += 4; $t = "\t" x ($tab / 8) . ' ' x ($tab % 8); } elsif (s/^elif\s+//) { $new = ''; $inif = 1; expr(); $inif = 0; $tab -= 4; $t = "\t" x ($tab / 8) . ' ' x ($tab % 8); print OUT $t,"}\n elsif($new) {\n"; $tab += 4; $t = "\t" x ($tab / 8) . ' ' x ($tab % 8); } elsif (/^else/) { $tab -= 4; $t = "\t" x ($tab / 8) . ' ' x ($tab % 8); print OUT $t,"} else {\n"; $tab += 4; $t = "\t" x ($tab / 8) . ' ' x ($tab % 8); } elsif (/^endif/) { $tab -= 4; $t = "\t" x ($tab / 8) . ' ' x ($tab % 8); print OUT $t,"}\n"; } elsif(/^undef\s+(\w+)/) { print OUT $t, "undef(&$1) if defined(&$1);\n"; } elsif(/^error\s+(".*")/) { print OUT $t, "die($1);\n"; } elsif(/^error\s+(.*)/) { print OUT $t, "die(\"", quotemeta($1), "\");\n"; } elsif(/^warning\s+(.*)/) { print OUT $t, "warn(\"", quotemeta($1), "\");\n"; } elsif(/^ident\s+(.*)/) { print OUT $t, "# $1\n"; } } elsif (/^\s*(typedef\s*)?enum\s*(\s+[a-zA-Z_]\w*\s*)?/) { # { for vi until(/\{[^}]*\}.*;/ || /;/) { last unless defined ($next = next_line($file)); chomp $next; # drop "#define FOO FOO" in enums $next =~ s/^\s*#\s*define\s+(\w+)\s+\1\s*$//; # #defines in enums (aliases) $next =~ s/^\s*#\s*define\s+(\w+)\s+(\w+)\s*$/$1 = $2,/; $_ .= $next; print OUT "# $next\n" if $opt_D; } s/#\s*if.*?#\s*endif//g; # drop #ifdefs s@/\*.*?\*/@@g; s/\s+/ /g; next unless /^\s?(typedef\s?)?enum\s?([a-zA-Z_]\w*)?\s?\{(.*)\}\s?([a-zA-Z_]\w*)?\s?;/; (my $enum_subs = $3) =~ s/\s//g; my @enum_subs = split(/,/, $enum_subs); my $enum_val = -1; foreach my $enum (@enum_subs) { my ($enum_name, $enum_value) = $enum =~ /^([a-zA-Z_]\w*)(=.+)?$/; $enum_name or next; $enum_value =~ s/^=//; $enum_val = (length($enum_value) ? $enum_value : $enum_val + 1); if ($opt_h) { print OUT ($t, "eval(\"\\n#line $eval_index $outfile\\n", "sub $enum_name () \{ $enum_val; \}\") ", "unless defined(\&$enum_name);\n"); ++ $eval_index; } else { print OUT ($t, "eval(\"sub $enum_name () \{ $enum_val; \}\") ", "unless defined(\&$enum_name);\n"); } } } elsif (/^(?:__extension__\s+)?(?:extern|static)\s+(?:__)?inline(?:__)?\s+/ and !/;\s*$/ and !/{\s*}\s*$/) { # { for vi # This is a hack to parse the inline functions in the glibc headers. # Warning: massive kludge ahead. We suppose inline functions # are mainly constructed like macros. while (1) { last unless defined ($next = next_line($file)); chomp $next; undef $_, last if $next =~ /__THROW\s*;/ or $next =~ /^(__extension__|extern|static)\b/; $_ .= " $next"; print OUT "# $next\n" if $opt_D; last if $next =~ /^}|^{.*}\s*$/; } next if not defined; # because it's only a prototype s/\b(__extension__|extern|static|(?:__)?inline(?:__)?)\b//g; # violently drop #ifdefs s/#\s*if.*?#\s*endif//g and print OUT "# some #ifdef were dropped here -- fill in the blanks\n"; if (s/^(?:\w|\s|\*)*\s(\w+)\s*//) { $name = $1; } else { warn "name not found"; next; # shouldn't occur... } my @args; if (s/^\(([^()]*)\)\s*(\w+\s*)*//) { for my $arg (split /,/, $1) { if ($arg =~ /(\w+)\s*$/) { $curargs{$1} = 1; push @args, $1; } } } $args = ( @args ? "my(" . (join ',', map "\$$_", @args) . ") = \@_;\n$t " : "" ); my $proto = @args ? '' : '() '; $new = ''; s/\breturn\b//g; # "return" doesn't occur in macros usually... expr(); # try to find and perlify local C variables our @local_variables = (); # needs to be a our(): (?{...}) bug workaround { use re "eval"; my $typelist = join '|', keys %isatype; $new =~ s[' (?:(?:__)?const(?:__)?\s+)? (?:(?:un)?signed\s+)? (?:long\s+)? (?:$typelist)\s+ (\w+) (?{ push @local_variables, $1 }) '] [my \$$1]gx; $new =~ s[' (?:(?:__)?const(?:__)?\s+)? (?:(?:un)?signed\s+)? (?:long\s+)? (?:$typelist)\s+ ' \s+ &(\w+) \s* ; (?{ push @local_variables, $1 }) ] [my \$$1;]gx; } $new =~ s/&$_\b/\$$_/g for @local_variables; $new =~ s/(["\\])/\\$1/g; #"]); # now that's almost like a macro (we hope) EMIT($proto); } } $Is_converted{$file} = 1; if ($opt_e && exists($bad_file{$file})) { unlink($Dest_dir . '/' . $outfile); $next = ''; } else { print OUT "1;\n"; queue_includes_from($file) if $opt_a; } } if ($opt_e && (scalar(keys %bad_file) > 0)) { warn "Was unable to convert the following files:\n"; warn "\t" . join("\n\t",sort(keys %bad_file)) . "\n"; } exit $Exit; sub EMIT { my $proto = shift; $new = reindent($new); $args = reindent($args); if ($t ne '') { $new =~ s/(['\\])/\\$1/g; #']); if ($opt_h) { print OUT $t, "eval \"\\n#line $eval_index $outfile\\n\" . 'sub $name $proto\{\n$t ${args}eval q($new);\n$t}' unless defined(\&$name);\n"; $eval_index++; } else { print OUT $t, "eval 'sub $name $proto\{\n$t ${args}eval q($new);\n$t}' unless defined(\&$name);\n"; } } else { print OUT "unless(defined(\&$name)) {\n sub $name $proto\{\n\t${args}eval q($new);\n }\n}\n"; } %curargs = (); return; } sub expr { if (/\b__asm__\b/) { # freak out $new = '"(assembly code)"'; return } my $joined_args; if(keys(%curargs)) { $joined_args = join('|', keys(%curargs)); } while ($_ ne '') { s/^\&\&// && do { $new .= " &&"; next;}; # handle && operator s/^\&([\(a-z\)]+)/$1/i; # hack for things that take the address of s/^(\s+)// && do {$new .= ' '; next;}; s/^0X([0-9A-F]+)[UL]*//i && do {my $hex = $1; $hex =~ s/^0+//; if (length $hex > 8 && !$Config{use64bitint}) { # Croak if nv_preserves_uv_bits < 64 ? $new .= hex(substr($hex, -8)) + 2**32 * hex(substr($hex, 0, -8)); # The above will produce "erroneous" code # if the hex constant was e.g. inside UINT64_C # macro, but then again, h2ph is an approximation. } else { $new .= lc("0x$hex"); } next;}; s/^(-?\d+\.\d+E[-+]?\d+)[FL]?//i && do {$new .= $1; next;}; s/^(\d+)\s*[LU]*//i && do {$new .= $1; next;}; s/^("(\\"|[^"])*")// && do {$new .= $1; next;}; s/^'((\\"|[^"])*)'// && do { if ($curargs{$1}) { $new .= "ord('\$$1')"; } else { $new .= "ord('$1')"; } next; }; # replace "sizeof(foo)" with "{foo}" # also, remove * (C dereference operator) to avoid perl syntax # problems. Where the %sizeof array comes from is anyone's # guess (c2ph?), but this at least avoids fatal syntax errors. # Behavior is undefined if sizeof() delimiters are unbalanced. # This code was modified to able to handle constructs like this: # sizeof(*(p)), which appear in the HP-UX 10.01 header files. s/^sizeof\s*\(// && do { $new .= '$sizeof'; my $lvl = 1; # already saw one open paren # tack { on the front, and skip it in the loop $_ = "{" . "$_"; my $index = 1; # find balanced closing paren while ($index <= length($_) && $lvl > 0) { $lvl++ if substr($_, $index, 1) eq "("; $lvl-- if substr($_, $index, 1) eq ")"; $index++; } # tack } on the end, replacing ) substr($_, $index - 1, 1) = "}"; # remove pesky * operators within the sizeof argument substr($_, 0, $index - 1) =~ s/\*//g; next; }; # Eliminate typedefs /\(([\w\s]+)[\*\s]*\)\s*[\w\(]/ && do { my $doit = 1; foreach (split /\s+/, $1) { # Make sure all the words are types, unless($isatype{$_} or $_ eq 'struct' or $_ eq 'union'){ $doit = 0; last; } } if( $doit ){ s/\([\w\s]+[\*\s]*\)// && next; # then eliminate them. } }; # struct/union member, including arrays: s/^([_A-Z]\w*(\[[^\]]+\])?((\.|->)[_A-Z]\w*(\[[^\]]+\])?)+)//i && do { my $id = $1; $id =~ s/(\.|(->))([^\.\-]*)/->\{$3\}/g; $id =~ s/\b([^\$])($joined_args)/$1\$$2/g if length($joined_args); while($id =~ /\[\s*([^\$\&\d\]]+)\]/) { my($index) = $1; $index =~ s/\s//g; if(exists($curargs{$index})) { $index = "\$$index"; } else { $index = "&$index"; } $id =~ s/\[\s*([^\$\&\d\]]+)\]/[$index]/; } $new .= " (\$$id)"; }; s/^([_a-zA-Z]\w*)// && do { my $id = $1; if ($id eq 'struct' || $id eq 'union') { s/^\s+(\w+)//; $id .= ' ' . $1; $isatype{$id} = 1; } elsif ($id =~ /^((un)?signed)|(long)|(short)$/) { while (s/^\s+(\w+)//) { $id .= ' ' . $1; } $isatype{$id} = 1; } if ($curargs{$id}) { $new .= "\$$id"; $new .= '->' if /^[\[\{]/; } elsif ($id eq 'defined') { $new .= 'defined'; } elsif (/^\s*\(/) { s/^\s*\((\w),/("$1",/ if $id =~ /^_IO[WR]*$/i; # cheat $new .= " &$id"; } elsif ($isatype{$id}) { if ($new =~ /\{\s*$/) { $new .= "'$id'"; } elsif ($new =~ /\(\s*$/ && /^[\s*]*\)/) { $new =~ s/\(\s*$//; s/^[\s*]*\)//; } else { $new .= q(').$id.q('); } } else { if ($inif) { if ($new =~ /defined\s*$/) { $new .= '(&' . $id . ')'; } elsif ($new =~ /defined\s*\($/) { $new .= '&' . $id; } else { $new .= '(defined(&' . $id . ') ? &' . $id . ' : undef)'; } } elsif (/^\[/) { $new .= " \$$id"; } else { $new .= ' &' . $id; } } next; }; s/^(.)// && do { if ($1 ne '#') { $new .= $1; } next;}; } } sub next_line { my $file = shift; my ($in, $out); my $pre_sub_tri_graphs = 1; READ: while (not eof IN) { $in .= <IN>; chomp $in; next unless length $in; while (length $in) { if ($pre_sub_tri_graphs) { # Preprocess all tri-graphs # including things stuck in quoted string constants. $in =~ s/\?\?=/#/g; # | ??=| #| $in =~ s/\?\?\!/|/g; # | ??!| || $in =~ s/\?\?'/^/g; # | ??'| ^| $in =~ s/\?\?\(/[/g; # | ??(| [| $in =~ s/\?\?\)/]/g; # | ??)| ]| $in =~ s/\?\?\-/~/g; # | ??-| ~| $in =~ s/\?\?\//\\/g; # | ??/| \| $in =~ s/\?\?</{/g; # | ??<| {| $in =~ s/\?\?>/}/g; # | ??>| }| } if ($in =~ /^\#ifdef __LANGUAGE_PASCAL__/) { # Tru64 disassembler.h evilness: mixed C and Pascal. while (<IN>) { last if /^\#endif/; } $in = ""; next READ; } if ($in =~ /^extern inline / && # Inlined assembler. $^O eq 'linux' && $file =~ m!(?:^|/)asm/[^/]+\.h$!) { while (<IN>) { last if /^}/; } $in = ""; next READ; } if ($in =~ s/\\$//) { # \-newline $out .= ' '; next READ; } elsif ($in =~ s/^([^"'\\\/]+)//) { # Passthrough $out .= $1; } elsif ($in =~ s/^(\\.)//) { # \... $out .= $1; } elsif ($in =~ /^'/) { # '... if ($in =~ s/^('(\\.|[^'\\])*')//) { $out .= $1; } else { next READ; } } elsif ($in =~ /^"/) { # "... if ($in =~ s/^("(\\.|[^"\\])*")//) { $out .= $1; } else { next READ; } } elsif ($in =~ s/^\/\/.*//) { # //... # fall through } elsif ($in =~ m/^\/\*/) { # /*... # C comment removal adapted from perlfaq6: if ($in =~ s/^\/\*[^*]*\*+([^\/*][^*]*\*+)*\///) { $out .= ' '; } else { # Incomplete /* */ next READ; } } elsif ($in =~ s/^(\/)//) { # /... $out .= $1; } elsif ($in =~ s/^([^\'\"\\\/]+)//) { $out .= $1; } elsif ($^O eq 'linux' && $file =~ m!(?:^|/)linux/byteorder/pdp_endian\.h$! && $in =~ s!\'T KNOW!!) { $out =~ s!I DON$!I_DO_NOT_KNOW!; } else { if ($opt_e) { warn "Cannot parse $file:\n$in\n"; $bad_file{$file} = 1; $in = ''; $out = undef; last READ; } else { die "Cannot parse:\n$in\n"; } } } last READ if $out =~ /\S/; } return $out; } # Handle recursive subdirectories without getting a grotesquely big stack. # Could this be implemented using File::Find? sub next_file { my $file; while (@ARGV) { $file = shift @ARGV; if ($file eq '-' or -f $file or -l $file) { return $file; } elsif (-d $file) { if ($opt_r) { expand_glob($file); } else { print STDERR "Skipping directory '$file'\n"; } } elsif ($opt_a) { return $file; } else { print STDERR "Skipping '$file': not a file or directory\n"; } } return undef; } # Put all the files in $directory into @ARGV for processing. sub expand_glob { my ($directory) = @_; $directory =~ s:/$::; opendir DIR, $directory; foreach (readdir DIR) { next if ($_ eq '.' or $_ eq '..'); # expand_glob() is going to be called until $ARGV[0] isn't a # directory; so push directories, and unshift everything else. if (-d "$directory/$_") { push @ARGV, "$directory/$_" } else { unshift @ARGV, "$directory/$_" } } closedir DIR; } # Given $file, a symbolic link to a directory in the C include directory, # make an equivalent symbolic link in $Dest_dir, if we can figure out how. # Otherwise, just duplicate the file or directory. sub link_if_possible { my ($dirlink) = @_; my $target = eval 'readlink($dirlink)'; if ($target =~ m:^\.\./: or $target =~ m:^/:) { # The target of a parent or absolute link could leave the $Dest_dir # hierarchy, so let's put all of the contents of $dirlink (actually, # the contents of $target) into @ARGV; as a side effect down the # line, $dirlink will get created as an _actual_ directory. expand_glob($dirlink); } else { if (-l "$Dest_dir/$dirlink") { unlink "$Dest_dir/$dirlink" or print STDERR "Could not remove link $Dest_dir/$dirlink: $!\n"; } if (eval 'symlink($target, "$Dest_dir/$dirlink")') { print "Linking $target -> $Dest_dir/$dirlink\n"; # Make sure that the link _links_ to something: if (! -e "$Dest_dir/$target") { mkpath("$Dest_dir/$target", 0755) or print STDERR "Could not create $Dest_dir/$target/\n"; } } else { print STDERR "Could not symlink $target -> $Dest_dir/$dirlink: $!\n"; } } } # Push all #included files in $file onto our stack, except for STDIN # and files we've already processed. sub queue_includes_from { my ($file) = @_; my $line; return if ($file eq "-"); open HEADER, "<", $file or return; while (defined($line = <HEADER>)) { while (/\\$/) { # Handle continuation lines chop $line; $line .= <HEADER>; } if ($line =~ /^#\s*include\s+([<"])(.*?)[>"]/) { my ($delimiter, $new_file) = ($1, $2); # copy the prefix in the quote syntax (#include "x.h") case if ($delimiter eq q{"} && $file =~ m|^(.*)/|) { $new_file = "$1/$new_file"; } push(@ARGV, $new_file) unless $Is_converted{$new_file}; } } close HEADER; } # Determine include directories; $Config{usrinc} should be enough for (all # non-GCC?) C compilers, but gcc uses additional include directories. sub inc_dirs { my $from_gcc = `LC_ALL=C $Config{cc} -v -E - < /dev/null 2>&1 | awk '/^#include/, /^End of search list/' | grep '^ '`; length($from_gcc) ? (split(' ', $from_gcc), $Config{usrinc}) : ($Config{usrinc}); } # Create "_h2ph_pre.ph", if it doesn't exist or was built by a different # version of h2ph. sub build_preamble_if_necessary { # Increment $VERSION every time this function is modified: my $VERSION = 4; my $preamble = "$Dest_dir/_h2ph_pre.ph"; # Can we skip building the preamble file? if (-r $preamble) { # Extract version number from first line of preamble: open PREAMBLE, "<", $preamble or die "Cannot open $preamble: $!"; my $line = <PREAMBLE>; $line =~ /(\b\d+\b)/; close PREAMBLE or die "Cannot close $preamble: $!"; # Don't build preamble if a compatible preamble exists: return if $1 == $VERSION; } my (%define) = _extract_cc_defines(); open PREAMBLE, ">", $preamble or die "Cannot open $preamble: $!"; print PREAMBLE "# This file was created by h2ph version $VERSION\n"; # Prevent non-portable hex constants from warning. # # We still produce an overflow warning if we can't represent # a hex constant as an integer. print PREAMBLE "no warnings qw(portable);\n"; foreach (sort keys %define) { if ($opt_D) { print PREAMBLE "# $_=$define{$_}\n"; } if ($define{$_} =~ /^\((.*)\)$/) { # parenthesized value: d=(v) $define{$_} = $1; } if (/^(\w+)\((\w)\)$/) { my($macro, $arg) = ($1, $2); my $def = $define{$_}; $def =~ s/$arg/\$\{$arg\}/g; print PREAMBLE <<DEFINE; unless (defined &$macro) { sub $macro(\$) { my (\$$arg) = \@_; \"$def\" } } DEFINE } elsif ($define{$_} =~ /^([+-]?(\d+)?\.\d+([eE][+-]?\d+)?)[FL]?$/) { # float: print PREAMBLE "unless (defined &$_) { sub $_() { $1 } }\n\n"; } elsif ($define{$_} =~ /^([+-]?\d+)U?L{0,2}$/i) { # integer: print PREAMBLE "unless (defined &$_) { sub $_() { $1 } }\n\n"; } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) { # hex integer # Special cased, since perl warns on hex integers # that can't be represented in a UV. # # This way we get the warning at time of use, so the user # only gets the warning if they happen to use this # platform-specific definition. my $code = $1; $code = "hex('$code')" if length $code > 10; print PREAMBLE "unless (defined &$_) { sub $_() { $code } }\n\n"; } elsif ($define{$_} =~ /^\w+$/) { my $def = $define{$_}; if ($isatype{$def}) { print PREAMBLE "unless (defined &$_) { sub $_() { \"$def\" } }\n\n"; } else { print PREAMBLE "unless (defined &$_) { sub $_() { &$def } }\n\n"; } } else { print PREAMBLE "unless (defined &$_) { sub $_() { \"", quotemeta($define{$_}), "\" } }\n\n"; } } print PREAMBLE "\n1;\n"; # avoid 'did not return a true value' when empty close PREAMBLE or die "Cannot close $preamble: $!"; } # %Config contains information on macros that are pre-defined by the # system's compiler. We need this information to make the .ph files # function with perl as the .h files do with cc. sub _extract_cc_defines { my %define; my $allsymbols = join " ", @Config{'ccsymbols', 'cppsymbols', 'cppccsymbols'}; # If optimizing -O2 is used, add the definition if ($Config{'ccflags'} =~ /(?:\s+|^)-O([\d]+)(?:\s+|$)/) { $allsymbols .= " __OPTIMIZE__=$1"; } # Split compiler pre-definitions into 'key=value' pairs: while ($allsymbols =~ /([^\s]+)=((\\\s|[^\s])+)/g) { $define{$1} = $2; if ($opt_D) { print STDERR "$_: $1 -> $2\n"; } } return %define; } 1; ############################################################################## __END__ =head1 NAME h2ph - convert .h C header files to .ph Perl header files =head1 SYNOPSIS B<h2ph [-d destination directory] [-r | -a] [-l] [-h] [-e] [-D] [-Q] [headerfiles]> =head1 DESCRIPTION I<h2ph> converts any C header files specified to the corresponding Perl header file format. It is most easily run while in /usr/include: cd /usr/include; h2ph * sys/* or cd /usr/include; h2ph * sys/* arpa/* netinet/* or cd /usr/include; h2ph -r -l . The output files are placed in the hierarchy rooted at Perl's architecture dependent library directory. You can specify a different hierarchy with a B<-d> switch. If run with no arguments, filters standard input to standard output. =head1 OPTIONS =over 4 =item -d destination_dir Put the resulting B<.ph> files beneath B<destination_dir>, instead of beneath the default Perl library location (C<$Config{'installsitearch'}>). =item -r Run recursively; if any of B<headerfiles> are directories, then run I<h2ph> on all files in those directories (and their subdirectories, etc.). B<-r> and B<-a> are mutually exclusive. =item -a Run automagically; convert B<headerfiles>, as well as any B<.h> files which they include. This option will search for B<.h> files in all directories which your C compiler ordinarily uses. B<-a> and B<-r> are mutually exclusive. =item -l Symbolic links will be replicated in the destination directory. If B<-l> is not specified, then links are skipped over. =item -h Put 'hints' in the .ph files which will help in locating problems with I<h2ph>. In those cases when you B<require> a B<.ph> file containing syntax errors, instead of the cryptic [ some error condition ] at (eval mmm) line nnn you will see the slightly more helpful [ some error condition ] at filename.ph line nnn However, the B<.ph> files almost double in size when built using B<-h>. =item -e If an error is encountered during conversion, output file will be removed and a warning emitted instead of terminating the conversion immediately. =item -D Include the code from the B<.h> file as a comment in the B<.ph> file. This is primarily used for debugging I<h2ph>. =item -Q 'Quiet' mode; don't print out the names of the files being converted. =back =head1 ENVIRONMENT No environment variables are used. =head1 FILES /usr/include/*.h /usr/include/sys/*.h etc. =head1 AUTHOR Larry Wall =head1 SEE ALSO perl(1) =head1 DIAGNOSTICS The usual warnings if it can't read or write the files involved. =head1 BUGS Doesn't construct the %sizeof array for you. It doesn't handle all C constructs, but it does attempt to isolate definitions inside evals so that you can get at the definitions that it can translate. It's only intended as a rough tool. You may need to dicker with the files produced. You have to run this program by hand; it's not run as part of the Perl installation. Doesn't handle complicated expressions built piecemeal, a la: enum { FIRST_VALUE, SECOND_VALUE, #ifdef ABC THIRD_VALUE #endif }; Doesn't necessarily locate all of your C compiler's internally-defined symbols. =cut
Close