ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/enametoolong/genwrap
Revision: 1.3
Committed: Wed Dec 24 15:26:21 2025 UTC (6 months, 3 weeks ago) by root
Branch: MAIN
CVS Tags: HEAD
Changes since 1.2: +29 -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 " const char *orig_a$_ = a$_;\n";
22 print " if (toolong (a$_))\n";#
23 print " a$_ = shorten (a$_);\n";
24 print "\n";
25 }
26 }
27 if ($name eq "readlink") {
28 print " MAGIC_READLINK (a0, a1, a2);\n\n";
29 } elsif ($name eq "readlinkat") {
30 print " MAGIC_READLINK (a1, a2, a3);\n\n";
31 }
32 print " if (!orig_$name)\n";
33 print " orig_$name = ($ret (*)($cargs))dlsym (RTLD_NEXT, \"$name\");\n";
34 print "\n";
35 print " return orig_$name (", (join ", ", map "a$_", 0..$#args), ");\n";
36 print "}\n";
37 }
38
39 __END__
40 int open (path, int, mode_t)
41 int creat (path, mode_t)
42 int openat (int, path, int, mode_t)
43 int open64 (path, int, mode_t)
44 int openat64 (int, path, int, mode_t)
45 int unlink (path)
46 int unlinkat (int, path, int)
47 int chdir (path)
48 int mkdir (path, mode_t)
49 int mkdirat (int, path, mode_t)
50 int rmdir (path)
51 ssize_t readlink (path, char *, size_t)
52 ssize_t readlinkat (int, path, char *, size_t)
53 int mknod (path, mode_t, dev_t)
54 int mknodat (int, path, mode_t, dev_t)
55 int stat (path, struct stat *)
56 int lstat (path, struct stat *)
57 int fstatat (int, path, struct stat *, int)
58 int stat64 (path, struct stat64 *)
59 int lstat64 (path, struct stat64 *)
60 int fstatat64 (int, path, struct stat64 *, int)
61 int statx (int, path, int, unsigned int, struct statx *)
62 int rename (path, path)
63 int renameat (int, path, int, path)
64 int renameat2 (int, path, int, path, unsigned int)
65 int access (path, int)
66 int faccessat (int, path, int, int)
67 int chmod (path, mode_t)
68 int fchmodat (int, path, mode_t, int)
69 int chown (path, uid_t, gid_t)
70 int lchown (path, uid_t, gid_t)
71 int fchownat (int, path, uid_t, gid_t, int)
72 int utime (path, const struct utimebuf *)
73 int utimes (path, const struct timeval *)
74 int futimesat (int, path, const struct timeval *)
75 int utimensat (int, path, const struct timespec *, int)
76 int symlink (path, path)
77 int symlinkat (path, int, path)
78 int link (path, path)
79 int linkat (int, path, int, path, int)
80 int truncate (path, off_t)
81 int truncate64 (path, off64_t)
82