MEDmeshUniversalNameWr.c
Aller à la documentation de ce fichier.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
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
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
00066 med_err
00067 MEDmeshUniversalNameWr(const med_idt fid,
00068 const char * const meshname)
00069 {
00070 med_access_mode _MED_ACCESS_MODE;
00071 med_err _ret=-1;
00072 med_idt _meshid=0;
00073 char _path [MED_TAILLE_MAA+MED_NAME_SIZE+1]=MED_MAA;
00074 char _unvname [MED_LNAME_SIZE+1]="";
00075 time_t _time;
00076 #ifdef PPRO_NT
00077 struct timeb _tp;
00078 char _lpBuffer [UNLEN+1]="";
00079 long _nSize = UNLEN+1;
00080 #else
00081 struct timeval _tp;
00082 struct passwd* mypasswd;
00083 #endif
00084
00085
00086
00087
00088
00089 _MEDmodeErreurVerrouiller();
00090 if (_MEDcheckVersion30(fid) < 0) goto ERROR_;
00091
00092 if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) {
00093 MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG);
00094 goto ERROR_;
00095 }
00096
00097 if ( _MED_ACCESS_MODE == MED_ACC_RDONLY) {
00098 MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG);
00099 ISCRUTE_int(_MED_ACCESS_MODE);
00100 goto ERROR_;
00101 }
00102
00103
00104
00105
00106 strcat(_path,meshname);
00107 if ((_meshid = _MEDdatagroupOuvrir(fid,_path)) < 0) {
00108 MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,_path);
00109 ISCRUTE_id(_meshid);goto ERROR_;
00110 }
00111
00112
00113
00114
00115
00116 #ifdef PPRO_NT
00117
00118 if ( GetUserName(_lpBuffer,&_nSize) == 0 ) goto ERROR_;
00119 if ( _nSize > MED_NAME_SIZE ) _nSize = MED_NAME_SIZE;
00120 strncpy(_unvname,_lpBuffer,_nSize);
00121 strcat(_unvname," ");
00122 _time=time(&_time);
00123 strcat(_unvname,ctime(&_time));
00124 ftime(&_tp);
00125 _nSize = strlen(_unvname)-1;
00126 if ( sprintf(&_unvname[_nSize]," %hu",_tp.millitm) < 0 ) goto ERROR_;
00127
00128 #else
00129 #if defined(HAVE_GETPWUID) && defined(HAVE_GETEUID)
00130 mypasswd=getpwuid(geteuid());
00131 if ( mypasswd == NULL ) {
00132 MESSAGE("Impossible d'obtenir le nom de l'utilisateur effectif");
00133 goto ERROR_;
00134 }
00135 strcat(_unvname,mypasswd->pw_name);
00136 #elif defined(HAVE_CUSERID)
00137 if ( !cuserid(_unvname) ) {
00138 MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"cuserid");
00139 SSCRUTE(_path); goto ERROR_;
00140 }
00141 #else
00142 #error "There is no ( getpwuid && geteuid) nor cuserid"
00143 #endif
00144 strcat(_unvname," ");
00145 _time=time(&_time);
00146 strcat(_unvname,ctime(&_time));
00147 if ( gettimeofday(&_tp,NULL) < 0 ) {
00148 MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"gettimeofday");
00149 SSCRUTE(_path); goto ERROR_;
00150 }
00151 if ( sprintf(&_unvname[strlen(_unvname)-1]," %li",_tp.tv_usec) < 0 ) {
00152 MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"sprintf");
00153 SSCRUTE(_path); goto ERROR_;
00154 }
00155 #endif
00156
00157 if ( _MEDattributeStringWr(_meshid,MED_NOM_UNV,MED_LNAME_SIZE,_unvname) < 0) {
00158 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG);
00159 SSCRUTE(meshname);SSCRUTE(MED_NOM_UNI);
00160 SSCRUTE(_unvname);goto ERROR_;
00161 }
00162
00163 _ret = 0;
00164 ERROR_:
00165
00166 if (_meshid>0) if (_MEDdatagroupFermer(_meshid) < 0) {
00167 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_path);
00168 ISCRUTE_id(_meshid);
00169 }
00170
00171 return _ret;
00172 }
00173