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;
}
Пример #2
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);
}