tag: static directory name

While parsing the tag cache, don't allocate the directory name from
the heap, but copy it into a buffer on the stack.  This reduces heap
fragmentation by 1%.
This commit is contained in:
Max Kellermann 2008-08-29 09:39:12 +02:00
parent 1aa3457346
commit 5bd5551630

View File

@ -901,7 +901,7 @@ static void readDirectoryInfo(FILE * fp, Directory * directory)
{ {
char buffer[MPD_PATH_MAX * 2]; char buffer[MPD_PATH_MAX * 2];
int bufferSize = MPD_PATH_MAX * 2; int bufferSize = MPD_PATH_MAX * 2;
char *key; char key[MPD_PATH_MAX * 2];
Directory *subDirectory; Directory *subDirectory;
int strcmpRet; int strcmpRet;
char *name; char *name;
@ -911,7 +911,7 @@ static void readDirectoryInfo(FILE * fp, Directory * directory)
while (myFgets(buffer, bufferSize, fp) while (myFgets(buffer, bufferSize, fp)
&& 0 != strncmp(DIRECTORY_END, buffer, strlen(DIRECTORY_END))) { && 0 != strncmp(DIRECTORY_END, buffer, strlen(DIRECTORY_END))) {
if (0 == strncmp(DIRECTORY_DIR, buffer, strlen(DIRECTORY_DIR))) { if (0 == strncmp(DIRECTORY_DIR, buffer, strlen(DIRECTORY_DIR))) {
key = xstrdup(&(buffer[strlen(DIRECTORY_DIR)])); strcpy(key, &(buffer[strlen(DIRECTORY_DIR)]));
if (!myFgets(buffer, bufferSize, fp)) if (!myFgets(buffer, bufferSize, fp))
FATAL("Error reading db, fgets\n"); FATAL("Error reading db, fgets\n");
/* for compatibility with db's prior to 0.11 */ /* for compatibility with db's prior to 0.11 */
@ -925,7 +925,7 @@ static void readDirectoryInfo(FILE * fp, Directory * directory)
strlen(DIRECTORY_BEGIN))) { strlen(DIRECTORY_BEGIN))) {
FATAL("Error reading db at line: %s\n", buffer); FATAL("Error reading db at line: %s\n", buffer);
} }
name = xstrdup(&(buffer[strlen(DIRECTORY_BEGIN)])); name = &(buffer[strlen(DIRECTORY_BEGIN)]);
while (nextDirNode && (strcmpRet = while (nextDirNode && (strcmpRet =
strcmp(key, strcmp(key,
@ -951,8 +951,6 @@ static void readDirectoryInfo(FILE * fp, Directory * directory)
(void *)subDirectory); (void *)subDirectory);
} }
free(name);
free(key);
readDirectoryInfo(fp, subDirectory); readDirectoryInfo(fp, subDirectory);
} else if (0 == strncmp(SONG_BEGIN, buffer, strlen(SONG_BEGIN))) { } else if (0 == strncmp(SONG_BEGIN, buffer, strlen(SONG_BEGIN))) {
readSongInfoIntoList(fp, directory->songs, directory); readSongInfoIntoList(fp, directory->songs, directory);