int duet_print_list(int numtasks) { int duet_fd, i, ret = 0; struct duet_ioctl_status_args *args; size_t args_size; if (numtasks <= 0 || numtasks > 65535) { fprintf(stderr, "duet_print_list: invalid number of tasks\n"); return 1; } args_size = sizeof(struct duet_ioctl_status_args) + (numtasks * sizeof(struct duet_task_attrs)); args = malloc(args_size); if (!args) { perror("duet_print_list: task list allocation failed"); return 1; } memset(args, 0, args_size); args->size = sizeof(*args); args->flags = DUET_STATUS_PRINT_LIST; args->numtasks = numtasks; /* Open the duet device */ duet_fd = open_duet_dev(); if (duet_fd == -1) { fprintf(stderr, "Error: failed to open duet device\n"); return -1; } ret = ioctl(duet_fd, DUET_IOC_STATUS, args); if (ret < 0) { perror("duet_print_list: ioctl failed"); close_duet_dev(duet_fd); goto out; } /* Print out the list we received */ fprintf(stdout, "Duet task listing:\n\n"); for (i = 0; i < args->numtasks; i++) { if (!args->tasks[i].id) break; fprintf(stdout, "Task Id: %d\n", args->tasks[i].id); fprintf(stdout, "Task fd: %d\n", args->tasks[i].fd); fprintf(stdout, "Task name: %s\n", args->tasks[i].name); PRINT_MASK(args->tasks[i].regmask); fprintf(stdout, "Reg. path: %s\n\n", args->tasks[i].path); } fprintf(stdout, "Listed %d tasks.\n", i); out: free(args); close_duet_dev(duet_fd); return ret; }
int duet_print_list(int numtasks) { int i, ret = 0; struct duet_status_args *args; size_t args_size; if (numtasks <= 0 || numtasks > 65535) { fprintf(stderr, "duet_print_list: invalid number of tasks\n"); return 1; } args_size = sizeof(struct duet_status_args) + (numtasks * sizeof(struct duet_task_attrs)); args = malloc(args_size); if (!args) { perror("duet_print_list: task list allocation failed"); return 1; } memset(args, 0, args_size); args->size = sizeof(*args); args->numtasks = numtasks; /* Call syscall x86_64 #329: duet_status */ ret = syscall(329, DUET_STATUS_PRINT_LIST, args); if (ret < 0) { perror("duet_print_list: syscall failed"); goto out; } /* Print out the list we received */ fprintf(stdout, "Duet task listing:\n\n"); for (i = 0; i < args->numtasks; i++) { if (!args->tasks[i].id) break; fprintf(stdout, "Task Id: %d\n", args->tasks[i].id); fprintf(stdout, "Task fd: %d\n", args->tasks[i].fd); fprintf(stdout, "Task name: %s\n", args->tasks[i].name); PRINT_MASK(args->tasks[i].regmask); fprintf(stdout, "Reg. path: %s\n\n", args->tasks[i].path); } fprintf(stdout, "Listed %d tasks.\n", i); out: free(args); return ret; }