cache_safe_filename() needs more buffers
The single static buffer makes it impossible to use the result of two different calls to this function simultaneously. Fix it by using 4 buffers. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
This commit is contained in:
parent
30ccdcaa74
commit
72fa5c63f8
11
cache.c
11
cache.c
@ -12,10 +12,15 @@ const int NOLOCK = -1;
|
|||||||
|
|
||||||
char *cache_safe_filename(const char *unsafe)
|
char *cache_safe_filename(const char *unsafe)
|
||||||
{
|
{
|
||||||
static char buf[PATH_MAX];
|
static char buf[4][PATH_MAX];
|
||||||
char *s = buf;
|
static int bufidx;
|
||||||
|
char *s;
|
||||||
char c;
|
char c;
|
||||||
|
|
||||||
|
bufidx++;
|
||||||
|
bufidx &= 3;
|
||||||
|
s = buf[bufidx];
|
||||||
|
|
||||||
while(unsafe && (c = *unsafe++) != 0) {
|
while(unsafe && (c = *unsafe++) != 0) {
|
||||||
if (c == '/' || c == ' ' || c == '&' || c == '|' ||
|
if (c == '/' || c == ' ' || c == '&' || c == '|' ||
|
||||||
c == '>' || c == '<' || c == '.')
|
c == '>' || c == '<' || c == '.')
|
||||||
@ -23,7 +28,7 @@ char *cache_safe_filename(const char *unsafe)
|
|||||||
*s++ = c;
|
*s++ = c;
|
||||||
}
|
}
|
||||||
*s = '\0';
|
*s = '\0';
|
||||||
return buf;
|
return buf[bufidx];
|
||||||
}
|
}
|
||||||
|
|
||||||
int cache_exist(struct cacheitem *item)
|
int cache_exist(struct cacheitem *item)
|
||||||
|
Loading…
Reference in New Issue
Block a user