ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/enametoolong/genwrap
Revision: 1.2
Committed: Wed May 7 10:35:57 2025 UTC (2 months, 1 week ago) by root
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +0 -1 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 #!/usr/bin/perl
2
3 while (<DATA>) {
4 /^(\S+)\s+(\S+)\s+\((.*)\)$/
5 or (/^\s*$/ and next)
6 or die "$_: parse error\n";
7
8 my ($ret, $name, $args) = ($1, $2, $3);
9 my @args = split /\s*,\s*/, $args;
10
11 # $ret MUST be int, or something that is < 0 on error
12
13 my @cargs = map { $_ eq "path" ? "const char *" : $_ } @args;
14 my $cargs = join ", ", @cargs;
15
16 print "\nstatic $ret (*orig_$name)($cargs);\n";
17 print "\nextern \"C\" $ret ($name) (", (join ", ", map "$cargs[$_] a$_", 0..$#args), ")\n";
18 print "{\n";
19 for (0..$#args) {
20 if ($args[$_] eq "path") {
21 print " if (toolong (a$_))\n";#
22 print " a$_ = shorten (a$_);\n";
23 print "\n";
24 }
25 }
26 print " if (!orig_$name)\n";
27 print " orig_$name = ($ret (*)($cargs))dlsym (RTLD_NEXT, \"$name\");\n";
28 print "\n";
29 print " return orig_$name (", (join ", ", map "a$_", 0..$#args), ");\n";
30 print "}\n";
31 }
32
33 __END__
34 int open (path, int, mode_t)
35 int creat (path, mode_t)
36 int openat (int, path, int, mode_t)
37 int open64 (path, int, mode_t)
38 int creat64 (path, mode_t)
39 int openat64 (int, path, int, mode_t)
40 int unlink (path)
41 int unlinkat (int, path, int)
42 int mkdir (path, mode_t)
43 int mkdirat (int, path, mode_t)
44 ssize_t readlink (path, char *, size_t)
45 ssize_t readlinkat (int, path, char *, size_t)
46 int stat (path, struct stat *)
47 int lstat (path, struct stat *)
48 int fstatat (int, path, struct stat *, int)
49 int stat64 (path, struct stat64 *)
50 int lstat64 (path, struct stat64 *)
51 int fstatat64 (int, path, struct stat64 *, int)
52 int rename (path, path)
53 int renameat (int, path, int, path)
54 int renameat2 (int, path, int, path, unsigned int)