int open(const char *path, int flags, ...) { int ret; char *newpath = NULL; init_syms(); if (STRPREFIX(path, SYSFS_PREFIX)) { init_sysfs(); if (asprintf(&newpath, "%s/%s", fakesysfsdir, path + strlen(SYSFS_PREFIX)) < 0) { errno = ENOMEM; return -1; } } if (flags & O_CREAT) { va_list ap; mode_t mode; va_start(ap, flags); mode = va_arg(ap, mode_t); va_end(ap); ret = realopen(newpath ? newpath : path, flags, mode); } else { ret = realopen(newpath ? newpath : path, flags); } free(newpath); return ret; }
static int make_file(const char *path, const char *name, const char *value) { int fd = -1; int ret = -1; char *filepath = NULL; if (asprintf(&filepath, "%s/%s", path, name) < 0) return -1; if ((fd = realopen(filepath, O_CREAT|O_WRONLY, 0600)) < 0) goto cleanup; if (write(fd, value, strlen(value)) != strlen(value)) goto cleanup; ret = 0; cleanup: if (fd != -1 && close(fd) < 0) ret = -1; free(filepath); return ret; }
int open(const char *filename, int flags, mode_t mode) { int ret; static int (*realopen)(const char *, int , mode_t ); if (!realopen) { realopen = dlsym((void *)-1, "open"); } ret = realopen(filename, flags, mode); if (ret != -1 && strncmp(filename, "/dev/dsp", 8) == 0) { dsp_fd = ret; } return ret; }
int open(__const char *__file, int __oflag, mode_t __mode) { if(strncmp(__file, "/dev/dvb/adapter", 16) == 0) __oflag |= (O_SYNC | O_ASYNC); printf("flags: %04x",__oflag); return realopen(__file, __oflag, __mode); }