# MEDunvCr.c

Aller à la documentation de ce fichier.

    00001 /*  This file is part of MED.
    00002  *
    00003  *  COPYRIGHT (C) 1999 - 2012  EDF R&D, CEA/DEN
    00004  *  MED is free software: you can redistribute it and/or modify
    00005  *  it under the terms of the GNU Lesser General Public License as published by
    00006  *  the Free Software Foundation, either version 3 of the License, or
    00007  *  (at your option) any later version.
    00008  *
    00009  *  MED is distributed in the hope that it will be useful,
    00010  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
    00011  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    00012  *  GNU Lesser General Public License for more details.
    00013  *
    00014  *  You should have received a copy of the GNU Lesser General Public License
    00015  *  along with MED.  If not, see <http://www.gnu.org/licenses/>.
    00016  */
    00017
    00018
    00019 #include <med.h>
    00020 #include <med_config.h>
    00021 #include <med_outils.h>
    00022
    00023 #include <stdlib.h>
    00024 #include <stdio.h>
    00025 #include <string.h>
    00026
    00027 #ifdef PPRO_NT
    00028 // Windows Header Files:
    00029 #include <windows.h>
    00030 #include <Lmcons.h>
    00031 #include <sys/timeb.h>
    00032 #else
    00033
    00034 #if TIME_WITH_SYS_TIME
    00035 # include <sys/time.h>
    00036 # include <time.h>
    00037 #else
    00038 # if HAVE_SYS_TIME_H
    00039 #  include <sys/time.h>
    00040 # else
    00041 #  include <time.h>
    00042 # endif
    00043 #endif
    00044
    00045 #ifndef HAVE_UNISTD_H
    00046 #error "unistd.h required."
    00047 #endif
    00048
    00049 # include <unistd.h>
    00050
    00051 #if defined(HAVE_GETPWUID) && defined(HAVE_GETEUID)
    00052 # include <sys/types.h>
    00053 # include <pwd.h>
    00054 #endif
    00055
    00056 #endif
    00057
    00058 med_err
    00059 MEDunvCr(med_idt fid, char *maa)
    00060 {
    00061   med_idt maaid;
    00062   char chemin [MED_TAILLE_MAA+MED_TAILLE_NOM+1]="";
    00063   char nomu   [MED_TAILLE_LNOM+1]="";
    00064   time_t  temps;
    00065 #ifdef PPRO_NT
    00066   struct timeb   tp;
    00067   char   lpBuffer [UNLEN+1]="";
    00068   long   nSize   = UNLEN+1;
    00069 #else
    00070   struct passwd* mypasswd;
    00071   struct timeval tp;
    00072 #endif
    00073   med_err ret=-1;
    00074
    00075   /*
    00076    * On inhibe le gestionnaire d'erreur
    00077    */
    00078   _MEDmodeErreurVerrouiller();
    00079 if (MEDcheckVersion(fid) < 0) return -1;
    00080
    00081
    00082   /*
    00083    * Si le maillage n'existe pas => erreur
    00084    */
    00085   strcpy(chemin,MED_MAA);
    00086   strcat(chemin,maa);
    00087   if ((maaid = _MEDdatagroupOuvrir(fid,chemin)) < 0) goto ERROR_;
    00088
    00089   /*
    00090    * Creation/Ecriture de l'attribut nom universel
    00091    */
    00092
    00093 #ifdef PPRO_NT
    00094   if ( GetUserName(lpBuffer,&nSize) == 0 ) goto ERROR_;
    00095   if ( nSize > MED_TAILLE_NOM ) nSize = MED_TAILLE_NOM;
    00096   strncpy(nomu,lpBuffer,nSize);
    00097   strcat(nomu," ");
    00098   temps=time(&temps);
    00099   strcat(nomu,ctime(&temps));
    00100   ftime(&tp);
    00101   nSize = strlen(nomu)-1;
    00102   if ( sprintf(&nomu[nSize]," %hu",tp.millitm) < 0 ) goto ERROR_;
    00103 #else
    00104 #if defined(HAVE_GETPWUID) && defined(HAVE_GETEUID)
    00105   mypasswd=getpwuid(geteuid());
    00106   if ( mypasswd == NULL ) {
    00107     MESSAGE("Impossible d'obtenir le nom de l'utilisateur effectif");
    00108     goto ERROR_;
    00109   }
    00110   strcat(nomu,mypasswd->pw_name);
    00111 #elif defined(HAVE_CUSERID)
    00112   if ( !cuserid(nomu) ) {
    00113    MESSAGE("Impossible d'obtenir le nom de l'utilisateur effectif");
    00114    goto ERROR_;
    00115   }
    00116 #else
    00117 #error "There is no ( getpwuid && geteuid) nor cuserid"
    00118 #endif
    00119   strcat(nomu," ");
    00120   temps=time(&temps);
    00121   strcat(nomu,ctime(&temps));
    00122   if ( gettimeofday(&tp,NULL) < 0 ) goto ERROR_;
    00123   if ( sprintf(&nomu[strlen(nomu)-1]," %li",tp.tv_usec) < 0 ) {
    00124    MESSAGE("Erreur à la construction du nom universel.");
    00125    goto ERROR_;
    00126   }
    00127 #endif
    00128   if ((ret = _MEDattrStringEcrire(maaid,MED_NOM_UNV,MED_TAILLE_LNOM,nomu)) < 0)
    00129    goto ERROR_;
    00130
    00131   /*
    00132    * Nettoyages divers
    00133    */
    00134 ret = 0;
    00135 ERROR_:
    00136   if ( maaid > 0) if (_MEDdatagroupFermer(maaid) < 0) {
    00137     MESSAGE("Impossible de fermer le datagroup : ");
    00138     ISCRUTE_int(maaid); ret = -1;
    00139   }
    00140
    00141   return ret;
    00142 }
    00143