コード例 #1
0
ファイル: ino.c プロジェクト: jimenezrick/fast-move
void watch_events(void)
{
	GNode *modified_directory, *removed_file;
	File *new_file;
	gboolean refresh_request = FALSE;
	struct timeval time;
	struct inotify_event *event;
	int n, i;
	fd_set fds;

	CHECK_INOTIFY_ENABLED();
again:	time.tv_sec = 0;
	time.tv_usec = 0;
	FD_ZERO(&fds);
	FD_SET(inotify_descriptor, &fds);
	while ((n = select(inotify_descriptor + 1, &fds, NULL, NULL, &time)) == 1) {
again2:		if ((n = read(inotify_descriptor, events_buffer, BUFFER_LENGTH)) > 0) {
			for (i = 0; i < n; i += sizeof(struct inotify_event) + event->len) {
				event = (struct inotify_event *) (events_buffer + i);
				if (debug_inotify == TRUE)
					dump_event(event);
				modified_directory = (GNode *) g_hash_table_lookup(
						watches_table, &(event->wd));

				if (event->mask & IN_CREATE || event->mask & IN_MOVED_TO) {
					if ((new_file = create_new_file(event->name,
									get_path(modified_directory), FALSE)) != NULL)
						refresh_request |= insert_in_tree(modified_directory, new_file);
				} else if (event->mask & IN_DELETE || event->mask & IN_MOVED_FROM) {
					if ((removed_file = search_node_by_name(modified_directory,
									event->name)) != NULL)
						refresh_request |= remove_from_tree(removed_file, FALSE);
				} else if (event->mask & IN_UNMOUNT) {
					refresh_request |= remove_from_tree(modified_directory, TRUE);
				}
			}
		} else if (n == -1) {
			if (errno == EINTR)
				goto again2;
			else
				PRINT_ERRNO_AND_EXIT();
		}
	}
	if (n == -1) {
		if (errno == EINTR)
			goto again;
		else
			PRINT_ERRNO_AND_EXIT();
	}
	if (refresh_request == TRUE)
		refresh_screen();
}
コード例 #2
0
ファイル: test.c プロジェクト: LeroiSam/Data-Structures
int main(){
    Tree * tree;        /*Tree ADT - holds integer values in AVL tree being tested*/
    int * entry;        /*Temporary variable when adding to, removing from and searching tree*/
    int * result;       /*Result of search*/
    int i;              /*Controls loops*/

    tree = init_tree(&compare, &compare, &destroy, &print, &collision);

    printf("Adding the numbers to the tree in an out of sequence order :\n");
    for (i = 0; i < 12; i++){
        entry = malloc(sizeof(int));
        *entry = (3 * i) % 10;
        printf("%d, ", *entry);
        tree = add_to_tree(tree, entry);
    }
    putchar('\n');
    printf("Repeated some entries to test collision resolution.\n");

    printf("Tree after insertions.\n");

    print_tree(tree);
    for (i = 0; i < 10; i = i + 3){
        entry = malloc(sizeof(int));
        *entry = i;
        remove_from_tree(tree, entry);
        free(entry);

        printf("%d is removed...\n", i);
        print_tree(tree);

        putchar('\n');
    }

    
    printf("Testing search_tree_closest...\n");
    printf("Searching for 3 (no longer in tree), should return 4.\n");
    entry = malloc(sizeof(int));
    *entry = 3;
    result = search_tree_closest(tree, entry);
    printf("Returned : %d\n", *result);
    free(entry);

    printf("Note : Because the search_tree_closest function works, \n");
    printf("it follows that the search_tree function must also work.\n");
    printf("In the context of only integers, this function doesn't \n");
    printf("really make sense though.\n");

    printf("Destroying tree...\n");
    destroy_tree(tree);

    printf("\n\nAll tests passed.\n");
    return 0;
}