int WritePrivateProfileString(char *Section, char *Name, char *Value, char *File)
params.c
des Projektes Transfermatrixsimulation.Falls die Parameterdatei noch nicht existiert, wird versucht, sie zu erzeugen und mit dem neuen Eintrag und seinem Abschnitt als einzigem Inhalt zu füllen. Gelingt dies nicht, wird die Routine fehlerhaft beendet.
Existiert die Datei schon, so wird eine neue Datei mit der
zusätzlichen Erweiterung .bkp
erzeugt,
in die alle Einträge aus der Originaldatei kopiert werden,
bis der gewünschte Abschnitt in der Originaldatei gefunden
ist. Existiert der Abschnitt noch gar nicht, so wird an das
Ende der kopierten Datei der gewünschte Abschnitt mit
dem angegebenen Eintrag ergänzt.
Existiert der Abschnitt, so wird dieser nach dem angegebenen Namen durchsucht. Wird das Ende des Abschnitts erreicht, ohne daß der Name gefunden wurde, so wird ein entsprechender Eintrag ergänzt und der Rest der Originaldatei in die Kopie übertragen. Existiert auch der Name, so wird statt der entsprechenden Zeile der neue Eintrag eingefügt und ebenfalls der Rest der Originaldatei übertragen.
Am Schluß wird die neue Datei in die alte Datei umbenannt, so daß die alte Datei gleichzeitig gelöscht wird.
Section, char *
Name, char *
Value, char *
File, char *
int
):WritePrivateProfileInt, WritePrivateProfileFloat, GetPrivateProfileString
int WritePrivateProfileString(char *Section,char *Name,char *Value, char *File) { int rc; /* Ergebnis des File-Holens */ int qfh,dfh; /* Filehandles */ char FName[255]; /* Name for copied File */ char Line[255]; /* One Line of the source file */ struct stat mystat; /* Statistics of the s. file */ if ((qfh=open(File,O_RDONLY))==-1) { if ((dfh=open(File,O_WRONLY|O_CREAT|O_TRUNC,0644))==-1) return(0); write(dfh,"[",1); write(dfh,Section,strlen(Section)); write(dfh,"]\n",2); write(dfh,Name,strlen(Name)); write(dfh,"=",1); write(dfh,Value,strlen(Value)); write(dfh,"\n",1); close(dfh); return(1); } if (strlen(File)+4>sizeof(FName)) { close(qfh); return(0); } if (fstat(qfh,&mystat)) mystat.st_mode=0644; strcpy(FName,File); strcat(FName,".bkp"); if ((dfh=open(FName,O_WRONLY|O_CREAT|O_TRUNC,mystat.st_mode))==-1) { close(qfh); return(0); } while ((rc=GetLine(Line,sizeof(Line),qfh))!=0 && (Line[0]!='[' || strlen(Line)<strlen(Section)+2 || strncmp(Line+1,Section,strlen(Section)) || Line[strlen(Section)+1]!=']')) { write(dfh,Line,strlen(Line)); write(dfh,"\n",1); } if (!rc) { write(dfh,"\n[",2); write(dfh,Section,strlen(Section)); write(dfh,"]\n",2); write(dfh,Name,strlen(Name)); write(dfh,"=",1); write(dfh,Value,strlen(Value)); write(dfh,"\n",1); } else { write(dfh,Line,strlen(Line)); write(dfh,"\n",1); while ((rc=GetLine(Line,sizeof(Line),qfh))!=0 && Line[0]!='[' && Line[0] && (strlen(Line)<strlen(Name)+1 || strncmp(Line,Name,strlen(Name)) || Line[strlen(Name)]!='=')) { write(dfh,Line,strlen(Line)); write(dfh,"\n",1); } if (rc) { if (Line[0]!='[' && Line[0]) { write(dfh,Name,strlen(Name)); write(dfh,"=",1); write(dfh,Value,strlen(Value)); write(dfh,"\n",1); } else { write(dfh,Name,strlen(Name)); write(dfh,"=",1); write(dfh,Value,strlen(Value)); write(dfh,"\n",1); write(dfh,Line,strlen(Line)); write(dfh,"\n",1); } while(GetLine(Line,sizeof(Line),qfh)) { write(dfh,Line,strlen(Line)); write(dfh,"\n",1); } } else { write(dfh,Name,strlen(Name)); write(dfh,"=",1); write(dfh,Value,strlen(Value)); write(dfh,"\n",1); } } close(qfh); close(dfh); rename(FName,File); return(1); }