Exemplo n.º 1
0
Arquivo: ini.c Projeto: Codyle/pcsx2
int INIFindSection(ACTUALHANDLE infile, char *section)
{
	int charcount;
	int i;
	int retflag;
	int retval;
	char scanbuffer[INIMAXLEN + 1];
#ifdef VERBOSE_FUNCTION_INI
	PrintLog("CDVDiso ini: FindSection(%s)", section);
#endif /* VERBOSE_FUNCTION_INI */
	charcount = 0;
	retflag = 0;
	while (retflag == 0) {
		retval = INIReadLine(infile, scanbuffer);
		if (retval == 0)  return (-1); // EOF? Stop here.
		if (scanbuffer[0] == '[') {
			i = 0;
			while ((i < INIMAXLEN) &&
			       (*(section + i) != 0) &&
			       (*(section + i) == scanbuffer[i + 1]))  i++;
			if ((i < INIMAXLEN - 2) && (*(section + i) == 0)) {
				if ((scanbuffer[i + 1] == ']') && (scanbuffer[i + 2] == 0))
					retflag = 1; // ENDIF- End marks look good? Return successful.
			} // ENDIF- Do we have a section match?
		} // ENDIF- Does this look like a section header?
		if (retflag == 0)  charcount += retval;
	} // ENDWHILE- Scanning lines for the correct [Section] header.
	return (charcount);
} // END INIFindSection()
Exemplo n.º 2
0
// Returns: number of bytes to get to start of keyword (or -1)
int INIFindKeyword(ACTUALHANDLE infile, const char *keyword, char *buffer) {
  int charcount;
  int i;
  int j;
  int retflag;
  int retval;
  char scanbuffer[INIMAXLEN+1];

#ifdef VERBOSE_FUNCTION_INI
  PrintLog("USBqemu ini: FindKeyword(%s)", keyword);
#endif /* VERBOSE_FUNCTION_INI */

  charcount = 0;
  retflag = 0;

  while(retflag == 0) {
    retval = INIReadLine(infile, scanbuffer);
    if(retval == 0)  return(-1); // EOF? Stop here.
    if(scanbuffer[0] == '[')  return(-1); // New section? Stop here.

    i = 0;
    while((i < INIMAXLEN) &&
          (*(keyword + i) != 0) &&
          (*(keyword + i) == scanbuffer[i]))  i++;
    if((i < INIMAXLEN - 2) && (*(keyword + i) == 0)) {
      if(scanbuffer[i] == '=') {
        retflag = 1;
        if(buffer != NULL) {
          i++;
          j = 0;
          while((i < INIMAXLEN) && (scanbuffer[i] != 0)) {
            *(buffer + j) = scanbuffer[i];
            i++;
            j++;
          } // ENDWHILE- Copying the value out to the outbound buffer.
          *(buffer + j) = 0; // And 0-terminate.
        } // ENDIF- Return the value as well?
      } // ENDIF- End marks look good? Return successful.
    } // ENDIF- Do we have a section match?

    if(retflag == 0)  charcount += retval;
  } // ENDWHILE- Scanning lines for the correct [Section] header.

#ifdef VERBOSE_FUNCTION_INI
  PrintLog("USBqemu ini:   Value: %s", buffer);
#endif /* VERBOSE_FUNCTION_INI */

  return(charcount);
} // END INIFindKeyWord()
Exemplo n.º 3
0
Arquivo: ini.c Projeto: Codyle/pcsx2
int INIRemove(char *file, char *section, char *keyword)
{
	char inname[INIMAXLEN + 1];
	char outname[INIMAXLEN + 1];
	int filepos;
	ACTUALHANDLE infile;
	ACTUALHANDLE outfile;
	char templine[INIMAXLEN + 1];
	int i;
	int retval;
	if (file == NULL)  return (-1);
	if (section == NULL)  return (-1);
#ifdef VERBOSE_FUNCTION_INI
	PrintLog("CDVDiso ini: Remove(%s, %s, %s)",
	         file, section, keyword);
#endif /* VERBOSE_FUNCTION_INI */
	filepos = INIRemoveExt(file, inname);
	for (i = 0; i <= filepos; i++)  outname[i] = inname[i];
	INIAddInExt(inname, filepos);
	INIAddOutExt(outname, filepos);
	infile = ActualFileOpenForRead(inname);
	if (infile == ACTUALHANDLENULL)  return (-1);
	retval = INIFindSection(infile, section);
	if (retval == -1) {
		ActualFileClose(infile);
		infile = ACTUALHANDLENULL;
		return (-1);
	} // ENDIF- Couldn't even find the section? Abort
	filepos = retval;
	if (keyword == NULL) {
#ifdef VERBOSE_FUNCTION_INI
		PrintLog("CDVDiso ini:   removing section");
#endif /* VERBOSE_FUNCTION_INI */
		outfile = ActualFileOpenForWrite(outname);
		if (outfile == ACTUALHANDLENULL) {
			ActualFileClose(infile);
			infile = ACTUALHANDLENULL;
			return (-1);
		} // ENDIF- Couldn't open a temp file? Abort
		ActualFileSeek(infile, 0);
		retval = INICopy(infile, outfile, filepos);
		if (retval > 0) {
			ActualFileClose(infile);
			infile = ACTUALHANDLENULL;
			ActualFileClose(outfile);
			outfile = ACTUALHANDLENULL;
			ActualFileDelete(outname);
			return (-1);
		} // ENDIF- Trouble writing everything up to the section? Abort.
		templine[0] = 0;
		retval = 1;
		while ((retval > 0) && (templine[0] != '['))
			retval = INIReadLine(infile, templine); // ENDWHILE- Read to the start of the next section... or EOF.
		if (templine[0] == '[') {
			i = 0;
			while ((i < INIMAXLEN) && (templine[i] != 0)) i++;
			retval = ActualFileWrite(outfile, i, templine);
			if (retval < i) {
				ActualFileClose(infile);
				infile = ACTUALHANDLENULL;
				ActualFileClose(outfile);
				outfile = ACTUALHANDLENULL;
				ActualFileDelete(outname);
				return (-1);
			} // ENDIF- Trouble writing it out? Abort.
		} // ENDIF- Are there other sections after this one? Save them then.
	} else {
		filepos = retval;
		ActualFileSeek(infile, filepos);
		filepos += INIReadLine(infile, templine); // Get section line's byte count
		retval = INIFindKeyword(infile, keyword, NULL);
		if (retval == -1) {
			ActualFileClose(infile);
			infile = ACTUALHANDLENULL;
			return (-1);
		} // ENDIF- Couldn't find the keyword? Abort
		filepos += retval;
#ifdef VERBOSE_FUNCTION_INI
		PrintLog("CDVDiso ini:   removing keyword");
#endif /* VERBOSE_FUNCTION_INI */
		outfile = ActualFileOpenForWrite(outname);
		if (outfile == ACTUALHANDLENULL) {
			ActualFileClose(infile);
			infile = ACTUALHANDLENULL;
			return (-1);
		} // ENDIF- Couldn't open a temp file? Abort
		ActualFileSeek(infile, 0);
		retval = INICopy(infile, outfile, filepos);
		if (retval > 0) {
			ActualFileClose(infile);
			infile = ACTUALHANDLENULL;
			ActualFileClose(outfile);
			outfile = ACTUALHANDLENULL;
			ActualFileDelete(outname);
			return (-1);
		} // ENDIF- Trouble writing everything up to keyword? Abort.
		INIReadLine(infile, templine); // Read (and discard) the keyword line
	} // ENDIF- Wipe out the whole section? Or just a keyword?
	INICopy(infile, outfile, 0xFFFFFFF); // Write out rest of file
	ActualFileClose(infile);
	infile = ACTUALHANDLENULL;
	ActualFileClose(outfile);
	outfile = ACTUALHANDLENULL;
	ActualFileDelete(inname);
	ActualFileRename(outname, inname);
	return (0);
} // END INIRemove()
Exemplo n.º 4
0
Arquivo: ini.c Projeto: Codyle/pcsx2
int INISaveString(char *file, char *section, char *keyword, char *value)
{
	char inname[INIMAXLEN + 1];
	char outname[INIMAXLEN + 1];
	int filepos;
	ACTUALHANDLE infile;
	ACTUALHANDLE outfile;
	int i;
	int retval;
	char templine[INIMAXLEN + 1];
	if (file == NULL)  return (-1);
	if (section == NULL)  return (-1);
	if (keyword == NULL)  return (-1);
	if (value == NULL)  return (-1);
#ifdef VERBOSE_FUNCTION_INI
	PrintLog("CDVDiso ini: SaveString(%s, %s, %s, %s)",
	         file, section, keyword, value);
#endif /* VERBOSE_FUNCTION_INI */
	filepos = INIRemoveExt(file, inname);
	for (i = 0; i <= filepos; i++)  outname[i] = inname[i];
	INIAddInExt(inname, filepos);
	INIAddOutExt(outname, filepos);
	filepos = 0;
	infile = ActualFileOpenForRead(inname);
	if (infile == ACTUALHANDLENULL) {
#ifdef VERBOSE_FUNCTION_INI
		PrintLog("CDVDiso ini:   creating new file");
#endif /* VERBOSE_FUNCTION_INI */
		outfile = ActualFileOpenForWrite(inname);
		if (outfile == ACTUALHANDLENULL)  return (-1); // Just a bad name? Abort.
		sprintf(templine, "[%s]\r\n", section);
		i = 0;
		while ((i < INIMAXLEN) && (templine[i] != 0)) i++;
		retval = ActualFileWrite(outfile, i, templine);
		if (retval < i) {
			ActualFileClose(outfile);
			outfile = ACTUALHANDLENULL;
			ActualFileDelete(inname);
			return (-1);
		} // ENDIF- Trouble writing it out? Abort.
		sprintf(templine, "%s=%s\r\n", keyword, value);
		i = 0;
		while ((i < INIMAXLEN) && (templine[i] != 0)) i++;
		retval = ActualFileWrite(outfile, i, templine);
		ActualFileClose(outfile);
		outfile = ACTUALHANDLENULL;
		if (retval < i) {
			ActualFileDelete(inname);
			return (-1);
		} // ENDIF- Trouble writing it out? Abort.
		return (0);
	} // ENDIF- No input file? Create a brand new .ini file then.
	retval = INIFindSection(infile, section);
	if (retval < 0) {
#ifdef VERBOSE_FUNCTION_INI
		PrintLog("CDVDiso ini:   creating new section");
#endif /* VERBOSE_FUNCTION_INI */
		outfile = ActualFileOpenForWrite(outname);
		if (outfile == ACTUALHANDLENULL) {
			ActualFileClose(infile);
			infile = ACTUALHANDLENULL;
			return (-1);
		} // ENDIF- Couldn't open a temp file? Abort
		ActualFileSeek(infile, 0); // Move ini to beginning of file...
		INICopy(infile, outfile, 0x0FFFFFFF); // Copy the whole file out...
		sprintf(templine, "\r\n[%s]\r\n", section);
		i = 0;
		while ((i < INIMAXLEN) && (templine[i] != 0)) i++;
		retval = ActualFileWrite(outfile, i, templine);
		if (retval < i) {
			ActualFileClose(infile);
			infile = ACTUALHANDLENULL;
			ActualFileClose(outfile);
			outfile = ACTUALHANDLENULL;
			ActualFileDelete(outname);
			return (-1);
		} // ENDIF- Trouble writing it out? Abort.
		sprintf(templine, "%s=%s\r\n", keyword, value);
		i = 0;
		while ((i < INIMAXLEN) && (templine[i] != 0)) i++;
		retval = ActualFileWrite(outfile, i, templine);
		ActualFileClose(infile);
		infile = ACTUALHANDLENULL;
		ActualFileClose(outfile);
		outfile = ACTUALHANDLENULL;
		if (retval < i) {
			ActualFileDelete(outname);
			return (-1);
		} // ENDIF- Trouble writing it out? Abort.
		ActualFileDelete(inname);
		ActualFileRename(outname, inname);
		return (0);
	} // ENDIF- Couldn't find the section? Make a new one!
	filepos = retval;
	ActualFileSeek(infile, filepos);
	filepos += INIReadLine(infile, templine); // Get section line's byte count
	retval = INIFindKeyword(infile, keyword, NULL);
	if (retval < 0) {
#ifdef VERBOSE_FUNCTION_INI
		PrintLog("CDVDiso ini:   creating new keyword");
#endif /* VERBOSE_FUNCTION_INI */
		ActualFileSeek(infile, filepos);
		retval = INIReadLine(infile, templine);
		i = 0;
		while ((i < INIMAXLEN) && (templine[i] != 0) && (templine[i] != '='))  i++;
		while ((retval > 0) && (templine[i] == '=')) {
			filepos += retval;
			retval = INIReadLine(infile, templine);
			i = 0;
			while ((i < INIMAXLEN) && (templine[i] != 0) && (templine[i] != '='))  i++;
		} // ENDWHILE- skimming to the bottom of the section
		outfile = ActualFileOpenForWrite(outname);
		if (outfile == ACTUALHANDLENULL) {
			ActualFileClose(infile);
			infile = ACTUALHANDLENULL;
			return (-1);
		} // ENDIF- Couldn't open a temp file? Abort
		ActualFileSeek(infile, 0);
		retval = INICopy(infile, outfile, filepos);
		if (retval > 0) {
			ActualFileClose(infile);
			infile = ACTUALHANDLENULL;
			ActualFileClose(outfile);
			outfile = ACTUALHANDLENULL;
			ActualFileDelete(outname);
			return (-1);
		} // ENDIF- Trouble writing everything up to keyword? Abort.
		sprintf(templine, "%s=%s\r\n", keyword, value);
		i = 0;
		while ((i < INIMAXLEN) && (templine[i] != 0)) i++;
		retval = ActualFileWrite(outfile, i, templine);
		if (retval < i) {
			ActualFileClose(infile);
			infile = ACTUALHANDLENULL;
			ActualFileClose(outfile);
			outfile = ACTUALHANDLENULL;
			ActualFileDelete(outname);
			return (-1);
		} // ENDIF- Trouble writing it out? Abort.
	} else {
#ifdef VERBOSE_FUNCTION_INI
		PrintLog("CDVDiso ini:   replacing keyword");
#endif /* VERBOSE_FUNCTION_INI */
		filepos += retval; // Position just before old version of keyword
		outfile = ActualFileOpenForWrite(outname);
		if (outfile == ACTUALHANDLENULL) {
			ActualFileClose(infile);
			infile = ACTUALHANDLENULL;
			return (-1);
		} // ENDIF- Couldn't open a temp file? Abort
		ActualFileSeek(infile, 0);
		retval = INICopy(infile, outfile, filepos);
		if (retval > 0) {
			ActualFileClose(infile);
			infile = ACTUALHANDLENULL;
			ActualFileClose(outfile);
			outfile = ACTUALHANDLENULL;
			ActualFileDelete(outname);
			return (-1);
		} // ENDIF- Trouble writing everything up to keyword? Abort.
		INIReadLine(infile, templine); // Read past old keyword/value...
		// Replace with new value
		sprintf(templine, "%s=%s\r\n", keyword, value);
		i = 0;
		while ((i < INIMAXLEN) && (templine[i] != 0)) i++;
		retval = ActualFileWrite(outfile, i, templine);
		if (retval < i) {
			ActualFileClose(infile);
			infile = ACTUALHANDLENULL;
			ActualFileClose(outfile);
			outfile = ACTUALHANDLENULL;
			ActualFileDelete(outname);
			return (-1);
		} // ENDIF- Trouble writing it out? Abort.
	} // ENDIF- Need to add a new keyword?
	INICopy(infile, outfile, 0xFFFFFFF); // Write out rest of file
	ActualFileClose(infile);
	infile = ACTUALHANDLENULL;
	ActualFileClose(outfile);
	outfile = ACTUALHANDLENULL;
	ActualFileDelete(inname);
	ActualFileRename(outname, inname);
	return (0);
} // END INISaveString()