main.c

来自「IPcop软路由防火墙 FREE 开源源代码」· C语言 代码 · 共 325 行

C
325
字号
/* SmoothWall libsmooth. * * This program is distributed under the terms of the GNU General Public * Licence.  See the file COPYING for details. * * (c) Lawrence Manning, 2001 * Contains library functions. *  * $Id: main.c,v 1.6.2.7 2005/10/30 23:25:35 franck78 Exp $ *  */ #include "libsmooth.h"extern FILE *flog;extern char *mylog;extern char **ctr;  /* reboot().  reboots. */void reboot(void){	mysystem("/etc/halt");}/* stripnl().  Replaces \n with \0 */void stripnl(char *s){	char *t = strchr(s, '\n');	if (t) *t = '\0';}/* Little wrapper. */int mysystem(char *command){	char mycommand[STRING_SIZE];		snprintf(mycommand, STRING_SIZE, "%s >>%s 2>>%s", command, mylog, mylog);	fprintf(flog, "Running command: %s\n", command);	return system(mycommand);}void errorbox(char *message){	newtWinMessage(ctr[TR_ERROR], ctr[TR_OK], message);}void statuswindow(int width, int height, char *title, char *text, ...){	newtComponent t, f;	char *buf = NULL;	int size = 0;	int i = 0;	va_list args;	va_start(args, text);	do {		size += 1000;		if (buf) free(buf);		buf = malloc(size);		i = vsnprintf(buf, size, text, args);	} while (i == size);	va_end(args);	newtCenteredWindow(width, height, title);	t = newtTextbox(1, 1, width - 2, height - 2, NEWT_TEXTBOX_WRAP);	newtTextboxSetText(t, buf);	f = newtForm(NULL, NULL, 0);	free(buf);	newtFormAddComponent(f, t);	newtDrawForm(f);	newtRefresh();	newtFormDestroy(f);}int runcommandwithstatus(char *command, char *message){	int rc;	char title[STRING_SIZE];		sprintf (title, "%s v%s - %s", NAME, VERSION, SLOGAN);	statuswindow(60, 4, title, message);	rc = mysystem(command);	newtPopWindow();		return rc;}int runhiddencommandwithstatus(char *command, char *message){	int rc;	char title[STRING_SIZE];	char mycommand[STRING_SIZE];		sprintf (title, "%s v%s - %s", NAME, VERSION, SLOGAN);	statuswindow(60, 4, title, message);	snprintf(mycommand, STRING_SIZE, "%s >>%s 2>>%s", command, mylog, mylog);	fprintf(flog, "Running command: ***** HIDDEN *****\n");	rc = system(mycommand);	newtPopWindow();		return rc;}/* This one borrowed from redhat installer. */int runcommandwithprogress(int width, int height, char *title, char *command,	int lines, char *text, ...){	newtComponent t, f, s;	char *buf = NULL;	int size = 0;	int i = 0;	va_list args;	int rc = 0;	FILE *p;	char buffer[STRING_SIZE];	int progress = 0;	char mycommand[STRING_SIZE];	va_start(args, text);	do {		size += 1000;		if (buf) free(buf);		buf = malloc(size);		i = vsnprintf(buf, size, text, args);	} while (i == size);	va_end(args);	newtCenteredWindow(width, height, title);	t = newtTextbox(1, 1, width - 2, height - 2, NEWT_TEXTBOX_WRAP);	newtTextboxSetText(t, buf);	f = newtForm(NULL, NULL, 0);	free(buf);	newtFormAddComponent(f, t);		s = newtScale(1, 3, width - 2, lines);	newtScaleSet(s, progress);		newtFormAddComponent(f, s);	newtDrawForm(f);	newtRefresh();		snprintf(mycommand, STRING_SIZE, "%s 2>>%s", command, mylog);	fprintf(flog, "Running command: %s\n", command);		if (!(p = popen(command, "r")))	{		rc = 1;		goto EXIT;	}	setvbuf(p, NULL, _IOLBF, 255);		while (fgets(buffer, STRING_SIZE, p))	{		newtScaleSet(s, ++progress);		newtRefresh();			fprintf(flog, "%s", buffer);	}			rc = pclose(p);	EXIT:	newtFormDestroy(f);	newtPopWindow();			return rc;}int checkformodule(char *module){	FILE *file;	char buffer[STRING_SIZE];	int result = 0;		if (!(file = fopen("/proc/modules", "r")))	{		fprintf(flog, "Unable to open /proc/modules in checkformodule()\n");		return 0;	}		while (fgets(buffer, STRING_SIZE, file))	{		if (strncmp(buffer, module, strlen(module)) == 0)		{			if (buffer[strlen(module)] == ' ')			{				result = 1;				goto EXIT;			}		}	}	EXIT:	fclose(file);		return result;}			int _replace_string(char string[], char *from, char *to){	int fromlen = strlen(from);	int tolen = strlen(to);	char *start, *p1, *p2;	for(start = string; *start != '\0'; start++)	{		p1 = from;		p2 = start;		while(*p1 != '\0')		{			if(*p1 != *p2)				break;			p1++;			p2++;		}		if(*p1 == '\0')		{			if(fromlen != tolen)			{				memmove(start + tolen, start + fromlen,					strlen(start + fromlen) + 1);			}			for(p1 = to; *p1 != '\0'; p1++)				*start++ = *p1;			return 1;		}	}	return 0;}int replace(char filename1[], char *from, char *to){	FILE *file1, *file2;	char filename2[1000];	char temp[1000];	int ret = 0;	/* Open the source and destination files */	strcpy (filename2, filename1);	strcat (filename2, ".new");	if (!(file1 = fopen (filename1, "r"))) return 1;	if (!(file2 = fopen (filename2, "w"))) {		fclose(file1);		return -1;	}	/* Start reading in lines */	while (fgets (temp, 1000, file1) != NULL) {		if (strlen(to) > 0) {			/* Replace string */			ret = _replace_string (temp, from, to);					/* Write string to new file */			fputs(temp, file2);		} else {			/* Remove string when to is NULL */			if (!strstr(temp, from)) 				fputs(temp, file2);		}	}	/* Close source and destination */	fclose (file1);	fclose (file2);	/* Move the file */	rename (filename2, filename1);		return (ret);}/* Include enabled languages */#ifdef  LANG_EN_ONLY        #include "lang_en.c"#else	#include "lang_bz.c"	#include "lang_cs.c"	#include "lang_da.c"	#include "lang_de.c"	#include "lang_en.c"	#include "lang_es.c"	#include "lang_fi.c"	#include "lang_fr.c"	#include "lang_el.c"	#include "lang_it.c"	#include "lang_hu.c"	#include "lang_la.c"	#include "lang_nl.c"	#include "lang_no.c"	#include "lang_pl.c"	#include "lang_pt.c"	#include "lang_so.c"	#include "lang_sv.c"	#include "lang_tr.c"	#include "lang_vi.c"#endif// returns a pointer to the actual running version number of IPCop.// Successive updates increase effective version but not VERSION !char g_title[STRING_SIZE] = "";char* get_version(void) {	FILE *f_title;	if (f_title = fopen ("/etc/issue", "r")) {		fgets (g_title, STRING_SIZE, f_title);		fclose (f_title);		if (g_title[strlen(g_title) - 1] == '\n') g_title[strlen(g_title) - 1] = '\0';	} else {	        sprintf (g_title, "%s v%s - %s", NAME, VERSION, SLOGAN);	}	return g_title;}

⌨️ 快捷键说明

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