ipv6 wildcard code
[mirrors/Programs.git] / c / cano / old / cano4.c
CommitLineData
d3b2d1a7
TM
1#define _GNU_SOURCE
2#include <stdlib.h>
3#include <stdio.h>
4#include <sys/types.h>
5#include <sys/syscall.h>
6#include <dlfcn.h>
7//#include <unistd.h>
8#include <stdarg.h>
9#include <time.h>
10#include <string.h>
11#include <linux/limits.h>
12
13#define i { srand(23); fprintf(stderr,"%s();\n",__func__); }
14//Catch open() calls (while redirecting filename):
15
16static const char *fd_to_path(int fd) {
17 static char path[PATH_MAX];
18 sprintf(path,"/proc/self/fd/%d",fd);
19 int l = (int) readlink((char * __restrict__) path, path, PATH_MAX);
20 path[l]=0;
21 return path;
22}
23
24
25int pipe_read() {
26 /*
27 int pipefd[2];
28 pipe(pipefd);
29 if(!fork()) {
30 //write(pipefd[1],"ahoj\n",5);
31 syscall(SYS_write,pipefd[1],"ahoj\n",5);
32 close(pipefd[1]);
33 exit(0);
34 }
35 return pipefd[0];
36 */
37 return dup(fileno(popen("echo lolpajp", "r")));
38}
39int fdd;
40ssize_t read(int fd, void *buf, size_t count) {
41 fprintf(stderr,"%s(%d,%d,%s);\n",__func__,fd,count,fd_to_path(fd));
42 if(!fdd) fdd=pipe_read();
43 if(strcmp(fd_to_path(fd),"/usr/share/terminfo/x/xterm")!=0) {
44 return syscall(SYS_read,fdd,buf,count);
45 } else {
46 return syscall(SYS_read,fd,buf,count);
47 }
48}
49size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream) {
50 fprintf(stderr,"%s(%d,%d);\n",__func__,stream,fileno(stream));
51 return read(fileno(stream),ptr,size*nmemb);
52}
53/*
54ssize_t write(int fd, void *buf, size_t count) {
55 fprintf(stderr,"%s(%d,%d);\n",__func__,fd,count);
56 return syscall(SYS_write,fd,buf,count);
57}
58size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) {
59 return write(fileno(stream),(void *)ptr,size*nmemb);
60}
61*/
62/*
63int open(const char *filename, int flags, ...)
64{
65 //srand(23);
66 static int (*open_orig)(const char *, int, mode_t);
67 int ret;
68 va_list ap;
69 mode_t mode;
70
71 if (!open_orig) {
72 open_orig = dlsym(RTLD_NEXT, "open");
73 }
74
75 va_start(ap, flags);
76 mode = va_arg(ap, mode_t);
77 va_end(ap);
78
79 if(strcmp(filename,"/tmp/a") != 0) {
80 ret = open_orig(redirect_name(filename), flags, mode);
81 //ret = syscall(SYS_open,redirect_name(filename),flags,mode);
82 } else {
83 //ret = fileno(popen("cat aaaa", "r"));
84 int pipefd[2];
85 pipe(pipefd);
86 ret = pipefd[0];
87 //ssize_t write(int fd, const void *buf, size_t count);
88 if(!fork()) { write(pipefd[1],"ahoj\n",5); close(pipefd[1]); exit(0); }
89 }
90
91 //printf("open(\"%s\", 0x%x, %o) -> %d\n", filename, flags, mode, ret);
92
93 return ret;
94}
95
96int open64(const char *filename, int flags, ...)
97{
98 //srand(23);
99 static int (*open64_orig)(const char *, int, mode_t);
100 int ret;
101 va_list ap;
102 mode_t mode;
103
104 if (!open64_orig) {
105 open64_orig = dlsym(RTLD_NEXT, "open64");
106 }
107
108 va_start(ap, flags);
109 mode = va_arg(ap, mode_t);
110 va_end(ap);
111
112 if(strcmp(filename,"/tmp/a") != 0) {
113 ret = open64_orig(redirect_name(filename), flags, mode);
114 //ret = syscall(SYS_open64,redirect_name(filename),flags,mode);
115 } else {
116 //ret = fileno(popen("cat aaaa", "r"));
117 int pipefd[2];
118 pipe(pipefd);
119 ret = pipefd[0];
120 //ssize_t write(int fd, const void *buf, size_t count);
121 if(!fork()) { write(pipefd[1],"ahoj\n",5); close(pipefd[1]); exit(0); }
122 }
123
124 //printf("open64(\"%s\", 0x%x, %o) -> %d\n", filename, flags, mode, ret);
125
126 return ret;
127}
128*/
This page took 0.236589 seconds and 4 git commands to generate.