bool IniConfig::readString (ini_fd_t ini, const char *key, char *&str) { char *ret; size_t length; if (ini_locateKey (ini, key) < 0) { // Dosen't exist, add it (void) ini_writeString (ini, ""); } length = (size_t) ini_dataLength (ini); if (!length) return 0; ret = (char *) malloc (++length); if (!ret) return false; if (ini_readString (ini, ret, (uint) length) < 0) goto IniCofig_readString_error; str = ret; return true; IniCofig_readString_error: if (str) free (str); return false; }
int_least32_t SidDatabase::length (const char *md5, uint_least16_t song) { int_least32_t time = 0; if (!database) { errorString = ERR_NO_DATABASE_LOADED; return -1; } // Now set up array access if (ini_listDelims (database, " ") == -1) { errorString = ERR_MEM_ALLOC; return -1; } // Read Time (and check times before hand) (void) ini_locateHeading (database, "Database"); (void) ini_locateKey (database, md5); // If length return is -1 then no entry found in database if (ini_dataLength (database) != -1) { char timeStamp[10]; for (uint_least16_t i = 0; i < song; i++) { if (ini_readString (database, timeStamp, sizeof (timeStamp)) == -1) { // No time found errorString = ERR_DATABASE_CORRUPT; return -1; } // Validate Time if (timesFound (timeStamp) != 1) { errorString = ERR_DATABASE_CORRUPT; return -1; } } // Parse timestamp time = parseTimeStamp (timeStamp); } return time; }