// readtags int readtags(char *path, struct song_metadata *psong, struct stat *stat, char *lang, char *type) { char *fname; if(lang_index == -1) lang_index = _lang2cp(lang); memset((void*)psong, 0, sizeof(struct song_metadata)); psong->path = strdup(path); psong->type = type; fname = strrchr(psong->path, '/'); psong->basename = fname ? fname + 1 : psong->path; if(stat) { if(!psong->time_modified) psong->time_modified = stat->st_mtime; psong->file_size = stat->st_size; } // get tag if( _get_tags(path, psong) == 0 ) { _make_composite_tags(psong); } // get fileinfo return _get_fileinfo(path, psong); }
PetscErrorCode DataExTopologyFinalize(DataEx d) { PetscMPIInt symm_nn; PetscMPIInt *symm_procs; PetscMPIInt r0,n,st,rt; PetscMPIInt nprocs; PetscErrorCode ierr; PetscFunctionBegin; if (d->topology_status != DEOBJECT_INITIALIZED) SETERRQ(d->comm, PETSC_ERR_ARG_WRONGSTATE, "Topology must be intialised. Call DataExTopologyInitialize() first"); ierr = PetscLogEventBegin(PTATIN_DataExchangerTopologySetup,0,0,0,0);CHKERRQ(ierr); /* given infomation about all my neighbours, make map symmetric */ ierr = _DataExCompleteCommunicationMap( d->comm,d->n_neighbour_procs,d->neighbour_procs, &symm_nn, &symm_procs );CHKERRQ(ierr); /* update my arrays */ ierr = PetscFree(d->neighbour_procs);CHKERRQ(ierr); d->n_neighbour_procs = symm_nn; d->neighbour_procs = symm_procs; /* allocates memory */ if (!d->messages_to_be_sent) {ierr = PetscMalloc1(d->n_neighbour_procs+1, &d->messages_to_be_sent);CHKERRQ(ierr);} if (!d->message_offsets) {ierr = PetscMalloc1(d->n_neighbour_procs+1, &d->message_offsets);CHKERRQ(ierr);} if (!d->messages_to_be_recvieved) {ierr = PetscMalloc1(d->n_neighbour_procs+1, &d->messages_to_be_recvieved);CHKERRQ(ierr);} if (!d->pack_cnt) {ierr = PetscMalloc(sizeof(PetscInt) * d->n_neighbour_procs, &d->pack_cnt);CHKERRQ(ierr);} if (!d->_stats) {ierr = PetscMalloc(sizeof(MPI_Status) * 2*d->n_neighbour_procs, &d->_stats);CHKERRQ(ierr);} if (!d->_requests) {ierr = PetscMalloc(sizeof(MPI_Request) * 2*d->n_neighbour_procs, &d->_requests);CHKERRQ(ierr);} if (!d->send_tags) {ierr = PetscMalloc(sizeof(int) * d->n_neighbour_procs, &d->send_tags);CHKERRQ(ierr);} if (!d->recv_tags) {ierr = PetscMalloc(sizeof(int) * d->n_neighbour_procs, &d->recv_tags);CHKERRQ(ierr);} /* compute message tags */ ierr = MPI_Comm_size(d->comm,&nprocs);CHKERRQ(ierr); r0 = d->rank; for (n = 0; n < d->n_neighbour_procs; ++n) { PetscMPIInt r1 = d->neighbour_procs[n]; _get_tags( d->instance, nprocs, r0,r1, &st, &rt ); d->send_tags[n] = (int)st; d->recv_tags[n] = (int)rt; } d->topology_status = DEOBJECT_FINALIZED; ierr = PetscLogEventEnd(PTATIN_DataExchangerTopologySetup,0,0,0,0);CHKERRQ(ierr); PetscFunctionReturn(0); }