X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=src%2Finstall%2Bsetup%2Flibsmooth%2Fmain.c;fp=src%2Finstall%2Bsetup%2Flibsmooth%2Fmain.c;h=d54a89c60e2161f3664cc48e9eb9f0ef321fc3c5;hb=3d6e1202853dbb798d6a63fab878d7c09a1f650e;hp=e2d6d70a5df5b6563506784b760b0863c54e946b;hpb=015342979470435419d8d10e9a8516ebe545893c;p=ipfire-2.x.git diff --git a/src/install+setup/libsmooth/main.c b/src/install+setup/libsmooth/main.c index e2d6d70a5d..d54a89c60e 100644 --- a/src/install+setup/libsmooth/main.c +++ b/src/install+setup/libsmooth/main.c @@ -1,327 +1,327 @@ -/* 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.9 2005/12/09 22:31:41 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" -#elifdef LANG_ALL - #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_sk.c" - #include "lang_so.c" - #include "lang_sv.c" - #include "lang_tr.c" - #include "lang_vi.c" -#else - #include "lang_de.c" - #include "lang_en.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; -} +/* 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.9 2005/12/09 22:31:41 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" +#elifdef LANG_ALL + #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_sk.c" + #include "lang_so.c" + #include "lang_sv.c" + #include "lang_tr.c" + #include "lang_vi.c" +#else + #include "lang_de.c" + #include "lang_en.c" + +#endif +// returns a pointer to the actual running version number of IPFire. +// 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; +}