Fix bug with replace host zeroing out file.

This commit is contained in:
Jacob Windle 2020-01-15 09:58:00 -05:00
parent b7ca669b3a
commit fbe5e18f9d

28
main.c
View File

@ -85,7 +85,7 @@ void showHosts()
* Read the configuration file and give a return code to indicate any changes. * Read the configuration file and give a return code to indicate any changes.
* @return 1 if successful, 0 if otherwise. * @return 1 if successful, 0 if otherwise.
*/ */
int read_config_file() { int update_hosts_file() {
// increment the refcount for tmp. // increment the refcount for tmp.
FILE *config = fopen(CONFIG, "r"); FILE *config = fopen(CONFIG, "r");
LinkedList *ptr = hosts, *prev = NULL; LinkedList *ptr = hosts, *prev = NULL;
@ -163,7 +163,7 @@ void run_loop() {
} }
else if (signo == SIGALRM) { else if (signo == SIGALRM) {
fprintf(stderr, "Waking up and reading config..\n"); fprintf(stderr, "Waking up and reading config..\n");
read_config_file(); update_hosts_file();
alarm(HB_PERIOD); alarm(HB_PERIOD);
} }
} }
@ -206,7 +206,8 @@ int main(int argc, char **argv)
// Replaces a host // Replaces a host
else if (ARG_IS("edit")) else if (ARG_IS("edit"))
{ {
replacehost(argv[++i], argv[++i]); replacehost(argv[i + 1], argv[i + 2]);
i += 2;
} }
// Deletes a host. // Deletes a host.
else if (ARG_IS("delete")) else if (ARG_IS("delete"))
@ -251,16 +252,14 @@ int main(int argc, char **argv)
* @param hostsFile * @param hostsFile
*/ */
void replacehost(char *oldhost, char *newhost) { void replacehost(char *oldhost, char *newhost) {
FILE *hostsFile = fopenHostsFile("w+"); FILE *hostsFile = fopenHostsFile("r");
char buf[256]; char buf[256];
char *ptr, *f; char *ptr, *f;
char newHostsFile[4096]; char newHostsFile[4096];
memset(newHostsFile, 0, 4096); memset(newHostsFile, 0, 4096);
printf("Starting to read!\n"); // fseek(hostsFile, 0, SEEK_SET);
printf("Looking for host:%s\n", oldhost);
fseek(hostsFile, 0, SEEK_SET);
while (fgets(buf, 256, hostsFile) != NULL) while (fgets(buf, 256, hostsFile) != NULL)
{ {
@ -269,7 +268,6 @@ void replacehost(char *oldhost, char *newhost) {
memset(buf, 0, sizeof(buf)); memset(buf, 0, sizeof(buf));
sprintf(buf, "%s %s\n", blockString, newhost); sprintf(buf, "%s %s\n", blockString, newhost);
} }
strcat(newHostsFile, buf); strcat(newHostsFile, buf);
memset(buf, 0, sizeof(buf)); memset(buf, 0, sizeof(buf));
} }
@ -277,12 +275,14 @@ void replacehost(char *oldhost, char *newhost) {
// Ensure we have an EOF at the end of the file. // Ensure we have an EOF at the end of the file.
newHostsFile[strlen(newHostsFile)] = EOF; newHostsFile[strlen(newHostsFile)] = EOF;
// Seek to 0 // // Seek to 0
fseek(hostsFile, 0, SEEK_SET); // fseek(hostsFile, 0, SEEK_SET);
fclose(hostsFile);
// If this failed, write an error message to stderr // If this failed, write an error message to stderr
ONFAILED(0, (fwrite(newHostsFile, sizeof(char), sizeof(newHostsFile), hostsFile))) { // ONFAILED(0, (fwrite(newHostsFile, sizeof(char), sizeof(newHostsFile), hostsFile))) {
fprintf(stderr, "Did not write anything!\n"); // fprintf(stderr, "Did not write anything!\n");
} // }
fclose(hostsFile); fprintf(stderr, "New hosts file: \n%s\n", newHostsFile);
// fclose(hostsFile);
} }