⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 glib.c

📁 The major functionality added in this release includes: - Rootless mode in X11 - Widget Templt
💻 C
字号:
/* some routines copied from glib, just the ones we need */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <stdarg.h>#include "../../config.h"		  /* for HAVE_VSNPRINTF */#include "myglib.h"int glib_major_version = 6;int glib_minor_version = 6;int glib_micro_version = 6;char *g_get_user_name (){	static char *username = 0;	if (!username)	{		username = getenv ("USER");		if (!username)		{			fprintf (stderr, "$USER not set\n");			exit (0);		}	}	return username;}char *g_get_home_dir (){	static char *homedir = 0;	if (!homedir)	{		homedir = getenv ("HOME");		if (!homedir)		{			fprintf (stderr, "$HOME not set\n");			exit (0);		}	}	return homedir;}GSList *g_slist_alloc (void){	GSList *list;	list = malloc (sizeof (GSList));	list->next = NULL;	return list;}voidg_slist_free (GSList * list){	if (list)	{		free (list);	}}GSList *g_slist_last (GSList * list){	if (list)	{		while (list->next)			list = list->next;	}	return list;}GSList *g_slist_append (GSList * list, gpointer data){	GSList *new_list;	GSList *last;	new_list = g_slist_alloc ();	new_list->data = data;	if (list)	{		last = g_slist_last (list);		last->next = new_list;		return list;	} else		return new_list;}GSList *g_slist_prepend (GSList * list, gpointer data){	GSList *new_list;	new_list = g_slist_alloc ();	new_list->data = data;	new_list->next = list;	return new_list;}GSList *g_slist_insert (GSList * list, gpointer data, gint position){	GSList *prev_list;	GSList *tmp_list;	GSList *new_list;	if (position < 0)		return g_slist_append (list, data);	else if (position == 0)		return g_slist_prepend (list, data);	new_list = g_slist_alloc ();	new_list->data = data;	if (!list)		return new_list;	prev_list = NULL;	tmp_list = list;	while ((position-- > 0) && tmp_list)	{		prev_list = tmp_list;		tmp_list = tmp_list->next;	}	if (prev_list)	{		new_list->next = prev_list->next;		prev_list->next = new_list;	} else	{		new_list->next = list;		list = new_list;	}	return list;}GSList *g_slist_remove (GSList * list, gpointer data){	GSList *tmp;	GSList *prev;	prev = NULL;	tmp = list;	while (tmp)	{		if (tmp->data == data)		{			if (prev)				prev->next = tmp->next;			if (list == tmp)				list = list->next;			tmp->next = NULL;			g_slist_free (tmp);			break;		}		prev = tmp;		tmp = tmp->next;	}	return list;}voidg_slist_foreach (GSList * list, GFunc func, gpointer user_data){	while (list)	{		(*func) (list->data, user_data);		list = list->next;	}}#ifndef HAVE_SNPRINTF/*#define G_VA_COPY(ap1, ap2)     memmove ((ap1), (ap2), sizeof (va_list)) */gchar *g_strdup_vprintf (const gchar * format, va_list args1){	gchar *buffer;	/*va_list args2; */	/*G_VA_COPY (args2, args1); */	buffer = malloc (strlen (format) + 1024);	vsprintf (buffer, format, args1);	va_end (args2);	return buffer;}gint g_snprintf (gchar * str, gulong n, gchar const *fmt,...){#ifdef  HAVE_VSNPRINTF	va_list args;	gint retval;	va_start (args, fmt);	retval = vsnprintf (str, n, fmt, args);	va_end (args);	if (retval < 0)	{		str[n - 1] = '\0';		retval = strlen (str);	}	return retval;#else	/* !HAVE_VSNPRINTF */	gchar *printed;	va_list args;	va_start (args, fmt);	printed = g_strdup_vprintf (fmt, args);	va_end (args);	strncpy (str, printed, n);	str[n - 1] = '\0';	free (printed);	return strlen (str);#endif /* !HAVE_VSNPRINTF */}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -