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 + -
显示快捷键?