/********************* ****************************************/ int voole_open (const char *path, struct fuse_file_info *finfo) { int err = 0 ; if ((finfo->flags & O_ACCMODE) == O_RDONLY || (finfo->flags & O_ACCMODE) == O_WRONLY || (finfo->flags & O_ACCMODE) == O_RDWR) err = 0; else { printf("open mask error\n"); return -EINVAL; } session_t *psession; tcp_cin_init(&psession); if (!psession) return -ENOSYS; finfo_t *fi = mpcalloc(sizeof(finfo_t)); fi->list_session = gdsl_list_alloc(NULL,NULL,NULL); fi->list_result = gdsl_list_alloc(NULL,NULL,NULL); fi->hash_session = gdsl_hash_alloc(NULL,NULL,NULL,(gdsl_key_func_t)keyHash, /* Session Table */ (gdsl_hash_func_t)hashHash, (gdsl_comp_func_t)compHash, 200); pthread_mutex_init(&fi->flock,NULL); finfo->fh = (uint64_t)fi; psession->iscin = 1; vfs_get_fid(path,psession->fid,sizeof(psession->fid)); gdsl_list_insert_head(fi->list_session,psession); return err; }
int main (void) { int choix = 0; gdsl_list_t l = gdsl_list_alloc ("MY LIST", alloc_string, free_string); do { printf ("\t\tMENU - LIST\n\n"); printf ("\t 1> Create a cell\n"); printf ("\t 2> Remove the first cell\n"); printf ("\t 3> Remove the last cell\n"); printf ("\t 4> Remove a cell\n"); printf ("\t 5> Display list in forward order\n"); printf ("\t 6> Display list in backward order\n"); printf ("\t 7> Flush list\n"); printf ("\t 8> Size of list\n"); printf ("\t 9> Dump list\n"); printf ("\t10> XML dump of list\n"); printf ("\t11> Search for a place\n"); printf ("\t12> Search for an element\n"); printf ("\t13> Sort of list\n"); printf ("\t14> Greatest element of list\n"); printf ("\t 0> Quit\n\n"); printf ("\t\tYour choice: "); scanf ("%d", &choix); switch (choix) { case 1: { char nom[100]; int done = 0; printf ("Nom: "); scanf ("%s", nom); do { int choix; printf ("\t\tMENU - CELL INSERTION\n\n"); printf ("\t1> Insert cell at the beginning of the list\n"); printf ("\t2> Insert cell at end of list\n"); printf ("\t3> Insert cell after another cell\n"); printf ("\t4> Insert cell before another cell\n"); printf ("\t5> Display the list\n"); printf ("\t0> RETURN TO MAIN MENU\n\n"); printf ("\t\tYour choice: "); scanf ("%d", &choix ); switch (choix) { case 1: { gdsl_list_insert_head (l, nom); done = 1; } break; case 2: { gdsl_list_insert_tail (l, nom); done = 1; } break; case 3: if (gdsl_list_is_empty (l)) { printf ("The list is empty.\n"); } else { char Nom[100]; gdsl_list_cursor_t c = gdsl_list_cursor_alloc (l); printf ("Name of cell after which you want to insert: "); scanf ("%s", Nom); if (!gdsl_list_cursor_move_to_value (c, compare_strings, Nom)) { printf ("The cell '%s' doesn't exist\n", Nom); } else { gdsl_list_cursor_insert_after (c, nom); done = 1; } gdsl_list_cursor_free (c); } break; case 4: if (gdsl_list_is_empty (l)) { printf ("The list is empty.\n"); } else { char Nom[100]; gdsl_list_cursor_t c = gdsl_list_cursor_alloc (l); printf ("Name of cell before which you want to insert: "); scanf ("%s", Nom); if (!gdsl_list_cursor_move_to_value (c, compare_strings, Nom)) { printf ("The cell '%s' doesn't exist\n", Nom); } else { gdsl_list_cursor_insert_before (c, nom); done = 1; } gdsl_list_cursor_free (c); } break; case 5: if (gdsl_list_is_empty (l)) { printf ("The list is empty.\n"); } else { affiche_liste_chaines_fwd (l); } break; case 0: done = 1; break; } } while (!done); } break; case 2: if (gdsl_list_is_empty (l)) { printf ("The list is empty.\n"); } else { gdsl_list_delete_head (l); } break; case 3: if (gdsl_list_is_empty (l)) { printf ("The list is empty.\n"); } else { gdsl_list_delete_tail (l); } break; case 4: { char nom[100]; if (gdsl_list_is_empty (l)) { printf ("The list is empty.\n"); } else { printf ("Name of cell to remove: "); scanf ("%s", nom); if (!gdsl_list_delete (l, compare_strings, nom)) { printf ("The cell '%s' doesn't exist\n", nom); } else { printf ("The cell '%s' is removed from list\n", nom); } } } break; case 5: if (gdsl_list_is_empty (l)) { printf ("The list is empty.\n"); } else { affiche_liste_chaines_fwd (l); } break; case 6: if (gdsl_list_is_empty (l)) { printf ("The list is empty.\n"); } else { affiche_liste_chaines_bwd (l); } break; case 7: if (gdsl_list_is_empty (l)) { printf ("The list is empty.\n"); } else { gdsl_list_flush (l); } break; case 8: printf ("Card( %s ) = %ld\n", gdsl_list_get_name (l), gdsl_list_get_size (l)); break; case 9: if (gdsl_list_is_empty (l)) { printf ("The list is empty.\n"); } else { gdsl_list_dump (l, print_string, stdout, NULL); } break; case 10: if (gdsl_list_is_empty (l)) { printf ("The list is empty.\n"); } else { gdsl_list_write_xml (l, print_string, stdout, NULL); } break; case 11: { int pos; gdsl_element_t e; printf ("Enter the position of the place to search for: "); scanf ("%d", & pos); e = gdsl_list_search_by_position (l, (ulong) pos); if (e != NULL) { print_string (e, stdout, GDSL_LOCATION_UNDEF, NULL); } } break; case 12: { char nom [100]; gdsl_element_t e; printf ("Name of cell to search for: "); scanf ("%s", nom); e = gdsl_list_search (l, compare_strings, nom); if (e == NULL) { printf ("The cell '%s' doesn't exist\n", nom); } else { printf ("The cell '%s' was found: ", nom); print_string (e, stdout, GDSL_LOCATION_UNDEF, NULL); printf ("\n"); } } break; case 13: gdsl_list_sort (l, compare_strings); break; case 14: if (gdsl_list_is_empty (l)) { printf ("The list is empty.\n"); } else { printf ("Max Element: %s\n", (char*) gdsl_list_search_max (l, compare_strings)); } break; case 15: /* case for my own tests... */ { int i; gdsl_perm_t p = gdsl_perm_alloc ("p", PERMUTATION_NB); gdsl_list_t g = gdsl_list_alloc ("MY LIST 2", alloc_string, free_string); gdsl_perm_randomize (p); for (i = 0; i < PERMUTATION_NB; i++) { char c[2]; c[0] = 65 + gdsl_perm_get_element (p, i); c[1] = '\0'; gdsl_list_insert_tail (g, c); } gdsl_perm_free (p); affiche_liste_chaines_fwd (g); affiche_liste_chaines_bwd (g); printf ("SORT\n"); gdsl_list_sort (g, compare_strings); affiche_liste_chaines_fwd (g); affiche_liste_chaines_bwd (g); gdsl_list_free (g); } { int i = 0; gdsl_list_cursor_t c = gdsl_list_cursor_alloc (l); for (gdsl_list_cursor_move_to_head (c); gdsl_list_cursor_get_content (c); gdsl_list_cursor_step_forward (c)) { char toto[50]; sprintf (toto, "%d", i++); gdsl_list_cursor_insert_before (c, toto); gdsl_list_cursor_step_backward (c); gdsl_list_cursor_delete_after (c); } gdsl_list_cursor_free (c); } break; } } while (choix != 0); gdsl_list_free (l); exit (EXIT_SUCCESS); }