gkrellm/server/glib.c

142 lines
2.6 KiB
C

/* GKrellM
| Copyright (C) 1999-2007 Bill Wilson
|
| Author: Bill Wilson billw@gkrellm.net
| Latest versions might be found at: http://gkrellm.net
|
|
| GKrellM is free software: you can redistribute it and/or modify it
| under the terms of the GNU General Public License as published by
| the Free Software Foundation, either version 3 of the License, or
| (at your option) any later version.
|
| GKrellM is distributed in the hope that it will be useful, but WITHOUT
| ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
| or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
| License for more details.
|
| You should have received a copy of the GNU General Public License
| along with this program. If not, see http://www.gnu.org/licenses/
*/
#include "gkrellmd.h"
#include "gkrellmd-private.h"
#if !GLIB_CHECK_VERSION(2,0,0)
/* glib2 compatibility functions for compiling gkrellmd under glib1.2
*/
GDir *
g_dir_open(gchar *path, guint flags, gpointer error)
{
GDir *gdir;
DIR *dir;
dir = opendir(path);
if (!dir)
return NULL;
gdir = g_new0(GDir, 1);
gdir->dir = dir;
return gdir;
}
gchar*
g_dir_read_name(GDir *dir)
{
struct dirent *entry;
while ((entry = readdir(dir->dir)) != NULL)
{
if ( !strcmp(entry->d_name, ".")
|| !strcmp(entry->d_name, "..")
)
continue;
return entry->d_name;
}
return NULL;
}
void
g_dir_close(GDir *dir)
{
closedir(dir->dir);
g_free(dir);
}
gboolean
g_file_test(gchar *filename, gint test)
{
struct stat s;
if ((test & G_FILE_TEST_EXISTS) && (access(filename, F_OK) == 0))
return TRUE;
if ( (test & G_FILE_TEST_IS_DIR)
&& stat(filename, &s) == 0
&& S_ISDIR(s.st_mode)
)
return TRUE;
if ( (test & G_FILE_TEST_IS_REGULAR)
&& stat(filename, &s) == 0
&& S_ISREG(s.st_mode)
)
return TRUE;
return FALSE;
}
gchar *
g_build_filename(gchar *first, ...)
{
gchar *str;
va_list args;
gchar *s, *element, *next_element;
gboolean is_first = TRUE;
va_start(args, first);
next_element = first;
str = g_strdup("");
while (1)
{
if (next_element)
{
element = next_element;
next_element = va_arg(args, gchar *);
}
else
break;
if (is_first)
{
is_first = FALSE;
g_free(str);
str = g_strdup(element);
}
else
{
s = str;
str = g_strconcat(str, G_DIR_SEPARATOR_S, element, NULL);
g_free(s);
}
}
va_end (args);
return str;
}
gchar *
g_path_get_basename(gchar *fname)
{
gchar *s;
if (!*fname)
return g_strdup(".");
s = strrchr(fname, G_DIR_SEPARATOR);
if (!s)
return g_strdup(fname);
return g_strdup(s + 1); /* don't handle paths ending in slash */
}
#endif