int main() { List *ls = ls_make(); S_t *val1 = malloc(sizeof(S_t)); val1->num = 5; S_t *val2 = malloc(sizeof(S_t)); val2->num = 7; S_t *val3 = malloc(sizeof(S_t)); val3->num = 9; S_t *val4 = malloc(sizeof(S_t)); val4->num = 14; S_t *val5 = malloc(sizeof(S_t)); val5->num = 2; S_t *val6 = malloc(sizeof(S_t)); val6->num = 12; S_t *val7 = malloc(sizeof(S_t)); val7->num = 6; S_t *val8 = malloc(sizeof(S_t)); val8->num = 1; ls = ls_cons(ls_cons(ls_cons(ls_cons(ls_cons(ls_cons(ls_cons(ls_cons(ls, val6), val7), val8), val5), val4), val3), val2), val1); printf("list\n"); ls_walk(ls, printer); printf("sorted C\n"); ls_sort(ls, comparator); ls_walk(ls, printer); printf("list reverse\n"); ls_reverse(ls); ls_walk(ls, printer); printf("list mapped\n"); List *cp = ls_map(ls, copy_num); ls_walk(cp, printer); //clean up ls_free(ls, 1); ls = NULL; return 0; }
char * list_files(char *prefix, int n, char **files, int *need_newline) { int i; struct ls_entry *ls = malloc(sizeof(struct ls_entry) * n); struct gfs_stat *stats = NULL; char *e = NULL; if (ls == NULL) return (GFARM_ERR_NO_MEMORY); if (option_output_format == OF_LONG || option_sort_order != SO_NAME || option_type_suffix) { stats = malloc(sizeof(struct gfs_stat) * n); if (stats == NULL) { free(ls); return (GFARM_ERR_NO_MEMORY); } e = do_stats(prefix, &n, files, stats, ls); } else { for (i = 0; i < n; i++) { ls[i].path = files[i]; ls[i].st = NULL; } } ls_sort(n, ls); if (option_output_format == OF_MULTI_COLUMN) { int j, k, columns, lines, column_width, max_width = 0; for (i = 0; i < n; i++) if (max_width < strlen(ls[i].path)) max_width = strlen(ls[i].path); column_width = option_type_suffix ? max_width + 1 : max_width; columns = screen_width / (column_width + 1); lines = n / columns; if (lines * columns < n) lines++; for (i = 0; i < lines; i++) { for (j = 0; j < columns; j++) { int len_suffix = 0; k = i + j * lines; if (k >= n) break; fputs(ls[k].path, stdout); if (option_type_suffix) len_suffix = put_suffix(&ls[k]); printf("%*s", (int)(column_width - strlen(ls[k].path)) - len_suffix + 1, ""); } putchar('\n'); } } else { for (i = 0; i < n; i++) { if (option_output_format == OF_LONG) put_stat(ls[i].st); fputs(ls[i].path, stdout); if (option_type_suffix) (void)put_suffix(&ls[i]); putchar('\n'); } } if (n > 0 || e != NULL) *need_newline = 1; if (stats != NULL) free(stats); free(ls); return (e); }