Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
FileIni.c
00001 #include "mbed.h" 00002 #include "FileIni.h " 00003 00004 #ifndef _POSIX_VERSION 00005 00006 int _strupr(char* ptrSource) 00007 { 00008 int i=0; 00009 while(ptrSource[i]!='\0') 00010 { 00011 if (ptrSource[i]>='a' && ptrSource[i]<='z') ptrSource[i]=ptrSource[i]-48; 00012 i++; 00013 } 00014 return 0; 00015 } 00016 #endif 00017 00018 00019 LPINI IniLoad (char* ptrFileName) 00020 { 00021 /** declaration des variables */ 00022 FILE* ptrFile=NULL; 00023 INI *lpinStart=NULL, *lpinCurrent=NULL, *lpinTmp=NULL; 00024 INIKEY *lpikKey=NULL, *lpikTmp=NULL; 00025 char ligne[MAX_PATH]; 00026 char isSectionNew=2; 00027 char *ptrToken=NULL, *ptrLine=NULL; 00028 /** initialisation */ 00029 lpinStart=(LPINI)malloc(sizeof(INI)); 00030 if (lpinStart==NULL) return NULL; 00031 INI_ZERO(lpinStart); 00032 if (ptrFileName==NULL) return lpinStart; 00033 ptrFile=fopen(ptrFileName, "r"); 00034 if (ptrFile==NULL) return NULL; 00035 lpinCurrent=lpinStart; 00036 /** parsage */ 00037 wait(1); 00038 while (fgets(ligne, MAX_PATH, ptrFile)!=NULL) 00039 { 00040 /* on nettoie la ligne */ 00041 if ((ptrToken=strchr(ligne, 13))) *ptrToken='\0'; 00042 /* on supprime les commentaires */ 00043 if ((ptrToken=strchr(ligne, ';'))) *ptrToken='\0'; 00044 wait(0.5); 00045 if (*ligne=='[') 00046 { 00047 ptrLine=ligne+1; 00048 ptrToken=strchr(ptrLine, ']'); 00049 if (ptrToken!=NULL) *ptrToken='\0'; 00050 _strupr(ptrLine); 00051 /** On alloue une nouvelle structure */ 00052 if (!(lpinTmp=(LPINI)malloc(sizeof(INI)))) EXIT_FREE 00053 INI_ZERO(lpinTmp); 00054 lpinCurrent->lpinNext=lpinTmp; 00055 lpinCurrent=lpinTmp; 00056 if (!(lpinCurrent->ptrSectionName=(char*)malloc(strlen(ptrLine)+1))) EXIT_FREE 00057 _strupr(ptrLine); 00058 strcpy(lpinCurrent->ptrSectionName, ptrLine); 00059 isSectionNew=1; 00060 /* il s'agit d'une Nouvelle Section */ 00061 } 00062 else if (*ligne!='\0') 00063 { 00064 /* il s'agit d'une cl�� */ 00065 if (ptrToken=strchr(ligne, '=')) *ptrToken='\0'; 00066 ptrLine=ptrToken+1; 00067 if (!(lpikTmp=(LPINIKEY)malloc(sizeof(INIKEY)))) EXIT_FREE; 00068 INIKEY_ZERO(lpikTmp); 00069 if (isSectionNew==1) 00070 { 00071 lpinCurrent->lpikKey=lpikTmp; /* si il s'agit de la premi�re cl�e */ 00072 lpikKey=lpikTmp; 00073 } 00074 else 00075 { 00076 lpikKey->lpikNext=lpikTmp; 00077 lpikKey=lpikTmp; 00078 } 00079 _strupr(ligne); 00080 if (((lpikKey->ptrValue=(char*)malloc(strlen(ptrLine)+1)) && (lpikKey->ptrKeyName=(char*)malloc(strlen(ligne)+1)))==0) EXIT_FREE 00081 strcpy(lpikKey->ptrValue, ptrLine); 00082 strcpy(lpikKey->ptrKeyName, ligne); 00083 isSectionNew=0; 00084 } 00085 } 00086 fclose(ptrFile); 00087 return lpinStart; 00088 } 00089 00090 LPINI IniGetSection (char* ptrSectionName, LPINI lpinIni) 00091 { 00092 while (lpinIni!=NULL) 00093 { 00094 if (lpinIni->ptrSectionName) 00095 { 00096 if (!strcmp(lpinIni->ptrSectionName, ptrSectionName)) return lpinIni; 00097 } 00098 lpinIni=lpinIni->lpinNext; 00099 } 00100 return NULL; 00101 } 00102 00103 LPINIKEY IniGetKey(char* ptrVarName, LPINI lpinSection) 00104 { 00105 LPINIKEY lpikSection=lpinSection->lpikKey; 00106 while (lpikSection) 00107 { 00108 if (lpikSection->ptrKeyName) 00109 { 00110 if(!strcmp(lpikSection->ptrKeyName, ptrVarName)) return lpikSection; 00111 } 00112 lpikSection=lpikSection->lpikNext; 00113 } 00114 return NULL; 00115 } 00116 00117 int IniGetValue(char* ptrValue, int iLength, LPINIKEY lpikIniKey) 00118 { 00119 if (lpikIniKey==NULL) return EXIT_FAILURE; 00120 strncpy(ptrValue, lpikIniKey->ptrValue, iLength); 00121 return 0; 00122 } 00123 00124 int IniSetValue(char* ptrValue, LPINIKEY lpikIniKey) 00125 { 00126 char* ptrTmp=NULL; 00127 if (lpikIniKey==NULL) return EXIT_FAILURE; 00128 ptrTmp=(char*)realloc(lpikIniKey->ptrValue, strlen(ptrValue)); 00129 if (ptrTmp==NULL) return EXIT_FAILURE; 00130 strcpy(ptrTmp, ptrValue); 00131 lpikIniKey->ptrValue=ptrTmp; 00132 return 0; 00133 } 00134 00135 LPINIKEY IniCreateKey(char* ptrKeyName, char* ptrValue, LPINI lpinSection) 00136 { 00137 INIKEY *lpikTmp=NULL; 00138 LPINIKEY lpikSection=lpinSection->lpikKey; 00139 lpikTmp=(LPINIKEY)malloc(sizeof(INIKEY)); 00140 if (lpikTmp==NULL) return NULL; 00141 INIKEY_ZERO(lpikTmp); 00142 if (lpinSection->lpikKey==NULL) 00143 { 00144 lpinSection->lpikKey=lpikTmp; 00145 } 00146 else 00147 { 00148 lpikTmp->lpikNext=lpikSection->lpikNext; 00149 lpikSection->lpikNext=lpikTmp; 00150 } 00151 lpikSection=lpikTmp; 00152 lpikSection->ptrKeyName=(char*)malloc(strlen(ptrKeyName)+1); 00153 lpikSection->ptrValue=(char*)malloc(strlen(ptrValue)+1); 00154 if (!(lpikSection->ptrValue && lpikSection->ptrKeyName)) return NULL; 00155 strcpy(lpikSection->ptrValue, ptrValue); 00156 strcpy(lpikSection->ptrKeyName, ptrKeyName); 00157 return lpikSection; 00158 } 00159 00160 LPINI IniCreateSection(char* ptrSectionName, LPINI lpinIni) 00161 { 00162 LPINI lpinTmp=NULL; 00163 if (lpinIni->ptrSectionName!=NULL) 00164 { 00165 lpinTmp=(LPINI)malloc(sizeof(INI)); 00166 if (lpinTmp==NULL) return NULL; 00167 INI_ZERO(lpinTmp); 00168 lpinTmp->lpinNext=lpinIni->lpinNext; 00169 lpinIni->lpinNext=lpinTmp; 00170 lpinIni=lpinTmp; 00171 } 00172 lpinIni->ptrSectionName=(char*)malloc(strlen(ptrSectionName)); 00173 if (lpinIni->ptrSectionName==NULL) 00174 { 00175 return 0; 00176 } 00177 strcpy(lpinIni->ptrSectionName, ptrSectionName); 00178 return lpinIni; 00179 } 00180 00181 int IniSave(char* ptrFileName, LPINI lpinIni) 00182 { 00183 FILE* ptrFile=NULL; 00184 LPINIKEY lpikKey=NULL; 00185 ptrFile=fopen(ptrFileName, "w"); 00186 if (ptrFile==NULL) return EXIT_FAILURE; 00187 while (lpinIni) 00188 { 00189 if (lpinIni->ptrSectionName) 00190 { 00191 fprintf(ptrFile, "[%s]%c%c", lpinIni->ptrSectionName, 13 ,10); 00192 lpikKey=lpinIni->lpikKey; 00193 while (lpikKey) 00194 { 00195 if (lpikKey->ptrKeyName) fprintf(ptrFile, "%s=%s%c%c", lpikKey->ptrKeyName, lpikKey->ptrValue, 13,10); 00196 lpikKey=lpikKey->lpikNext; 00197 } 00198 } 00199 lpinIni=lpinIni->lpinNext; 00200 } 00201 fclose(ptrFile); 00202 return EXIT_SUCCESS; 00203 } 00204 00205 void IniDeleteSection(LPINI lpinSection) 00206 { 00207 free(lpinSection->ptrSectionName); 00208 lpinSection->ptrSectionName=NULL; 00209 } 00210 00211 void IniDeleteKey(LPINIKEY lpikKey) 00212 { 00213 free(lpikKey->ptrKeyName); 00214 lpikKey->ptrKeyName=NULL; 00215 } 00216 00217 void IniFree(LPINI lpinIni) 00218 { 00219 LPINIKEY lpikKey; 00220 LPINIKEY lpikTmp; 00221 LPINI lpinTmp; 00222 while (lpinIni!=NULL) 00223 { 00224 lpikKey=lpinIni->lpikKey; 00225 while (lpikKey!=NULL) 00226 { 00227 free(lpikKey->ptrKeyName); 00228 free(lpikKey->ptrValue); 00229 lpikTmp=lpikKey->lpikNext; 00230 free(lpikKey); 00231 lpikKey=lpikTmp; 00232 } 00233 free(lpinIni->ptrSectionName); 00234 lpinTmp=lpinIni->lpinNext; 00235 free(lpinIni); 00236 lpinIni=lpinTmp; 00237 } 00238 }
Generated on Sat Jul 16 2022 22:00:53 by
1.7.2