static void copy_event_system(const char *sys, struct tracepoint_path *tps) { unsigned long long size, check_size; struct dirent *dent; struct stat st; char *format; DIR *dir; int count = 0; int ret; dir = opendir(sys); if (!dir) die("can't read directory '%s'", sys); while ((dent = readdir(dir))) { if (dent->d_type != DT_DIR || strcmp(dent->d_name, ".") == 0 || strcmp(dent->d_name, "..") == 0 || !name_in_tp_list(dent->d_name, tps)) continue; format = malloc_or_die(strlen(sys) + strlen(dent->d_name) + 10); sprintf(format, "%s/%s/format", sys, dent->d_name); ret = stat(format, &st); free(format); if (ret < 0) continue; count++; } write_or_die(&count, 4); rewinddir(dir); while ((dent = readdir(dir))) { if (dent->d_type != DT_DIR || strcmp(dent->d_name, ".") == 0 || strcmp(dent->d_name, "..") == 0 || !name_in_tp_list(dent->d_name, tps)) continue; format = malloc_or_die(strlen(sys) + strlen(dent->d_name) + 10); sprintf(format, "%s/%s/format", sys, dent->d_name); ret = stat(format, &st); if (ret >= 0) { /* unfortunately, you can not stat debugfs files for size */ size = get_size(format); write_or_die(&size, 8); check_size = copy_file(format); if (size != check_size) die("error in size of file '%s'", format); } free(format); } closedir(dir); }
static void copy_event_system(const char *sys, struct tracepoint_path *tps) { struct dirent *dent; struct stat st; char *format; DIR *dir; int count = 0; int ret; dir = opendir(sys); if (!dir) die("can't read directory '%s'", sys); while ((dent = readdir(dir))) { if (dent->d_type != DT_DIR || strcmp(dent->d_name, ".") == 0 || strcmp(dent->d_name, "..") == 0 || !name_in_tp_list(dent->d_name, tps)) continue; format = malloc_or_die(strlen(sys) + strlen(dent->d_name) + 10); sprintf(format, "%s/%s/format", sys, dent->d_name); ret = stat(format, &st); free(format); if (ret < 0) continue; count++; } write_or_die(&count, 4); rewinddir(dir); while ((dent = readdir(dir))) { if (dent->d_type != DT_DIR || strcmp(dent->d_name, ".") == 0 || strcmp(dent->d_name, "..") == 0 || !name_in_tp_list(dent->d_name, tps)) continue; format = malloc_or_die(strlen(sys) + strlen(dent->d_name) + 10); sprintf(format, "%s/%s/format", sys, dent->d_name); ret = stat(format, &st); if (ret >= 0) record_file(format, 8); free(format); } closedir(dir); }
static int copy_event_system(const char *sys, struct tracepoint_path *tps) { struct dirent *dent; struct stat st; char *format; DIR *dir; int count = 0; int ret; int err; dir = opendir(sys); if (!dir) { pr_debug("can't read directory '%s'", sys); return -errno; } for_each_event(dir, dent, tps) { if (!name_in_tp_list(dent->d_name, tps)) continue; if (asprintf(&format, "%s/%s/format", sys, dent->d_name) < 0) { err = -ENOMEM; goto out; } ret = stat(format, &st); free(format); if (ret < 0) continue; count++; } if (write(output_fd, &count, 4) != 4) { err = -EIO; pr_debug("can't write count\n"); goto out; } rewinddir(dir); for_each_event(dir, dent, tps) { if (!name_in_tp_list(dent->d_name, tps)) continue; if (asprintf(&format, "%s/%s/format", sys, dent->d_name) < 0) { err = -ENOMEM; goto out; } ret = stat(format, &st); if (ret >= 0) { err = record_file(format, 8); if (err) { free(format); goto out; } } free(format); } err = 0; out: closedir(dir); return err; }
static int copy_event_system(const char *sys, struct tracepoint_path *tps) { struct dirent *dent; struct stat st; char *format; DIR *dir; int count = 0; int ret; int err; dir = opendir(sys); if (!dir) { pr_debug("can't read directory '%s'", sys); return -errno; } while ((dent = readdir(dir))) { if (dent->d_type != DT_DIR || strcmp(dent->d_name, ".") == 0 || strcmp(dent->d_name, "..") == 0 || !name_in_tp_list(dent->d_name, tps)) continue; format = malloc(strlen(sys) + strlen(dent->d_name) + 10); if (!format) { err = -ENOMEM; goto out; } sprintf(format, "%s/%s/format", sys, dent->d_name); ret = stat(format, &st); free(format); if (ret < 0) continue; count++; } if (write(output_fd, &count, 4) != 4) { err = -EIO; pr_debug("can't write count\n"); goto out; } rewinddir(dir); while ((dent = readdir(dir))) { if (dent->d_type != DT_DIR || strcmp(dent->d_name, ".") == 0 || strcmp(dent->d_name, "..") == 0 || !name_in_tp_list(dent->d_name, tps)) continue; format = malloc(strlen(sys) + strlen(dent->d_name) + 10); if (!format) { err = -ENOMEM; goto out; } sprintf(format, "%s/%s/format", sys, dent->d_name); ret = stat(format, &st); if (ret >= 0) { err = record_file(format, 8); if (err) { free(format); goto out; } } free(format); } err = 0; out: closedir(dir); return err; }