示例#1
0
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;
}
示例#2
0
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;
}
示例#3
0
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;
}
示例#4
0
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);
}