int __xstat(int vers, const char *name, void *st) { double xx[32]; int ret; if (smbw_path(name)) { return smbw_stat(name, st); } ret = real_stat(name, xx); xstat_convert(vers, st, xx); return ret; }
int stat(const char *path, struct stat *sb) { char *newpath = NULL; int ret; init_syms(); if (STREQ(path, SYSFS_CPU_PRESENT)) { init_sysfs(); if (asprintf(&newpath, "%s/%s", fakesysfscgroupdir, SYSFS_CPU_PRESENT_MOCKED) < 0) { errno = ENOMEM; return -1; } } else if (STRPREFIX(path, SYSFS_CGROUP_PREFIX)) { init_sysfs(); if (asprintf(&newpath, "%s/%s", fakesysfscgroupdir, path + strlen(SYSFS_CGROUP_PREFIX)) < 0) { errno = ENOMEM; return -1; } } else if (STRPREFIX(path, fakedevicedir0)) { sb->st_mode = S_IFBLK; sb->st_rdev = makedev(8, 0); return 0; } else if (STRPREFIX(path, fakedevicedir1)) { sb->st_mode = S_IFBLK; sb->st_rdev = makedev(9, 0); return 0; } else { if (!(newpath = strdup(path))) return -1; } ret = real_stat(newpath, sb); free(newpath); return ret; }