+ return comm->attr_put<simgrid::smpi::Comm>(keyval, attr_value);
+}
+
+int PMPI_Errhandler_free(MPI_Errhandler* errhandler){
+ CHECK_NULL(1, MPI_ERR_ARG, errhandler)
+ CHECK_MPI_NULL(1, MPI_ERRHANDLER_NULL, MPI_ERR_ARG, *errhandler)
+ simgrid::smpi::Errhandler::unref(*errhandler);
+ *errhandler = MPI_ERRHANDLER_NULL;
+ return MPI_SUCCESS;
+}
+
+int PMPI_Errhandler_create(MPI_Handler_function* function, MPI_Errhandler* errhandler){
+ CHECK_NULL(2, MPI_ERR_ARG, errhandler)
+ *errhandler=new simgrid::smpi::Errhandler(function);
+ (*errhandler)->add_f();
+ return MPI_SUCCESS;
+}
+
+int PMPI_Errhandler_get(MPI_Comm comm, MPI_Errhandler* errhandler){
+ CHECK_COMM(1)
+ CHECK_NULL(1, MPI_ERR_ARG, errhandler)
+ *errhandler=comm->errhandler();
+ return MPI_SUCCESS;
+}
+
+int PMPI_Errhandler_set(MPI_Comm comm, MPI_Errhandler errhandler){
+ CHECK_COMM(1)
+ CHECK_NULL(1, MPI_ERR_ARG, errhandler)
+ comm->set_errhandler(errhandler);
+ return MPI_SUCCESS;
+}
+
+int PMPI_Comm_call_errhandler(MPI_Comm comm,int errorcode){
+ CHECK_COMM(1)
+ MPI_Errhandler err = comm->errhandler();
+ err->call(comm, errorcode);
+ simgrid::smpi::Errhandler::unref(err);
+ return MPI_SUCCESS;
+}
+
+MPI_Errhandler PMPI_Errhandler_f2c(MPI_Fint errhan){
+ if(errhan==-1)
+ return MPI_ERRHANDLER_NULL;
+ return simgrid::smpi::Errhandler::f2c(errhan);
+}
+
+MPI_Fint PMPI_Errhandler_c2f(MPI_Errhandler errhan){
+ if(errhan==MPI_ERRHANDLER_NULL)
+ return -1;
+ return errhan->c2f();
+}
+
+int PMPI_Comm_create_errhandler( MPI_Comm_errhandler_fn *function, MPI_Errhandler *errhandler){
+ return MPI_Errhandler_create(function, errhandler);
+}
+int PMPI_Comm_get_errhandler(MPI_Comm comm, MPI_Errhandler* errhandler){
+ return PMPI_Errhandler_get(comm, errhandler);
+}
+int PMPI_Comm_set_errhandler(MPI_Comm comm, MPI_Errhandler errhandler){
+ return PMPI_Errhandler_set(comm, errhandler);