fvwm1/libs/findIconFile.c
2019-08-26 23:33:33 +01:00

82 lines
1.7 KiB
C

#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <string.h>
#include <stdlib.h>
#include "fvwmlib.h"
/****************************************************************************
*
* Find the specified icon file somewhere along the given path.
*
* There is a possible race condition here: We check the file and later
* do something with it. By then, the file might not be accessible.
* Oh well.
*
****************************************************************************/
char *findIconFile(char *icon, char *pathlist, int type)
{
char *path;
char *dir_end;
int l1,l2;
if(icon != NULL)
l1 = strlen(icon);
else
l1 = 0;
if(pathlist != NULL)
l2 = strlen(pathlist);
else
l2 = 0;
path = safemalloc(l1 + l2 + 10);
*path = '\0';
if (*icon == '/')
{
/* No search if icon begins with a slash */
strcpy(path, icon);
return path;
}
if ((pathlist == NULL) || (*pathlist == '\0'))
{
/* No search if pathlist is empty */
strcpy(path, icon);
return path;
}
/* Search each element of the pathlist for the icon file */
while ((pathlist)&&(*pathlist))
{
dir_end = strchr(pathlist, ':');
if (dir_end != NULL)
{
strncpy(path, pathlist, dir_end - pathlist);
path[dir_end - pathlist] = 0;
}
else
strcpy(path, pathlist);
strcat(path, "/");
strcat(path, icon);
if (access(path, type) == 0)
return path;
strcat(path, ".gz");
if (access(path, type) == 0)
return path;
/* Point to next element of the path */
if(dir_end == NULL)
pathlist = NULL;
else
pathlist = dir_end + 1;
}
/* Hmm, couldn't find the file. Return NULL */
free(path);
return NULL;
}