コード例 #1
0
ファイル: avl_tree.c プロジェクト: jashook/ev6
vector* breadth_first_traversal(avl_tree* _Tree)
{
   queue* _Queue = create_queue();
   vector* _Vector = create_vector();

   push_queue(_Queue, (void*)_m_root);

   while (size_queue(_Queue) != 0)
   {
      avl_node* _Node = pop_queue(_Queue);

      _Vector = _Node->m_value;

      if (_Node->m_left_child != 0) push_queue(_Node->m_left_child);

      if (_Node->m_right_child != 0) push_queue(_Node->m_right_child);
   }
 
   return _Vector;
        
}
コード例 #2
0
ファイル: s_functions.c プロジェクト: MKordo/File-Exchange
int find_files(char* dirname, int socket, int *number, pthread_mutex_t *mtx)
{
        int return_code, i, err;
        DIR *dir_ptr;
        struct dirent entry;
        struct dirent *result;

        struct stat mybuf;
        char buf[256];

        if ((dir_ptr = opendir (dirname)) == NULL) {
                fprintf(stderr,"find files: couldn't open folder");
                return -1;
        }
        else {

                while( ( return_code = readdir_r(dir_ptr, &entry, &result) ) == 0 && result!=NULL) {

                        if (entry.d_ino==0) continue;
                        if ( strcmp(entry.d_name,".")==0 || strcmp(entry.d_name,"..")==0) continue;

                        strcpy(buf,dirname);
                        strcat(buf,"/");
                        strcat(buf, entry.d_name);

                        if ( stat (buf, & mybuf ) < 0) {
                                perror ( buf ) ; continue ; }

                        if (( mybuf.st_mode & S_IFMT ) == S_IFDIR )  // directory encountered
                        {
//                                printf("\ndirectory: %s\n", buf);
                                if ( find_files(buf, socket, number, mtx) == -1)
                                { fprintf(stderr,"find files recursion error"); return -1; }
                        }

                        else  // file encountered
                        {
                                QueueNode *node;
                                int filesize = (strlen(dirname)+strlen(entry.d_name)+2);

                                node = create_node();

                                node->number = number;
                                node->mutex = mtx;
                                node->clientSock = socket;
                                node->filesize = mybuf.st_size;
                                node->mode = mybuf.st_mode;

                                node->filename = malloc( filesize * sizeof(char) );
                                for (i=0; i<filesize; i++) node->filename[i] = '\0';
                                for (i=0; i<strlen(dirname); i++) node->filename[i] = dirname[i];
                                strcat(node->filename, "/");
                                strcat(node->filename, entry.d_name);

                                node->filename_size = filesize-1;

                                if (err = pthread_mutex_lock (& queue_lock )) {
                                    perror2 ("insert queue pthread_mutex_lock ", err ); exit (1); }

                                while(size_queue(queue) == queue_size) {
                                    pthread_cond_wait ( &insert , &queue_lock );
                                }

                                insert_queue(queue, node);
                                pthread_cond_signal ( &worker_cond );

                                color_text(client_color);
                                printf("[Client Thread: %ld]: Just added to queue: %s\n", pthread_self(), node->filename);
                                if (err = pthread_mutex_unlock (& queue_lock )) {
                                    perror2 ("insernt queue pthread_mutex_unlock ", err ); exit (1) ; }

//                                printf("file: %d,       %s/%s\n", mybuf.st_size ,dirname, entry.d_name);
                        }
                }
                closedir(dir_ptr);
        }
        return 0;
}