/* * Refer to file UPDNODES.H for copyright and version information */ #include #include #include #include #include "updnodes.h" #ifdef oldcc #include #endif /* oldcc */ #ifndef oldcc void write_node(NODE_ENTRY * maj) #else void write_node(maj) NODE_ENTRY * maj; #endif /* oldcc */ { TAG_ENTRY * min; static char line[255]; static char temp[255]; int checksum_needed; checksum_needed = TRUE; if (!maj) return; validate_checksum(maj, "for output information", &new_checksum); sprintf(line, ":%s.%s", major_tag, maj->name); for (min = maj->tags; min->name[0]; min++) { if (!min->value[0]) continue; if (!strcmp(min->name, "cks")) { sprintf(temp, " :cks.%u", maj->checksum); checksum_needed = FALSE; } else { sprintf(temp, " :%s.%s", min->name, min->value); } if (strlen(temp) + strlen(line) >= (unsigned int) linemax) { fputs(line, out); fputc('\n', out); strcpy(line, " "); } strcat(line, temp); } if (checksum_needed) { if (sprintf(temp, " :cks.%u", maj->checksum) + strlen(line) >= linemax) { fputs(line, out); fputc('\n', out); strcpy(line, " "); } strcat(line, temp); } fputs(line, out); fputc('\n', out); log_line(LOG_MUNDANE, "Entry %s done.\n", maj->name); } #ifndef oldcc void read_delta_line(void) #else void read_delta_line() #endif /* oldcc */ { if (!feof(delta)) { fgets(deltaline, 255, delta); } trim(deltaline); } #ifndef oldcc void read_base_line(void) #else void read_base_line() #endif /* oldcc */ { if (!feof(base)) { fgets(baseline, 255, base); } trim(baseline); } #ifndef oldcc int get_delta_tag(NODE_ENTRY * major) #else int get_delta_tag(major) NODE_ENTRY * major; #endif /* oldcc */ { char * p; char * q; static int last_read_eof = FALSE; memset((char *) major, 0, sizeof(NODE_ENTRY)); if (last_read_eof) { return(FALSE); } strncpy(major->action, deltaline, 3); p = deltaline + 4; q = strchr(p, ' '); if (!q) { q = deltaline + strlen(deltaline); *(q+1) = '\0'; } strncpy(major->name, p, q - p); p = q + 1; do { parse_line(major, p); read_delta_line(); p = deltaline; if (feof(delta)) { last_read_eof = TRUE; return(TRUE); } } while (isspace(*deltaline)); return (TRUE); } #ifndef oldcc int get_base_tag(NODE_ENTRY * major) #else int get_base_tag(major) NODE_ENTRY * major; #endif /* oldcc */ { char * p; char * q; static int last_read_eof = FALSE; if (!major_tag_length) { major_tag_length = strlen(major_tag); } memset((char *) major, 0, sizeof(NODE_ENTRY)); if (last_read_eof) { return (FALSE); } if (strlen(baseline) <= (unsigned) major_tag_length) { error("get_base_tag: Ooops! Base line shorter than major tag name.\n"); exit(SYSERROR); } p = baseline + major_tag_length + 2; q = strchr(p, ' '); /* Find end of major tag */ if (!q) { q = baseline + strlen(baseline); *(q+1) = '\0'; } strncpy(major->name, p, q - p); p = q + 1; /* Point to beginning of next tag */ do { parse_line(major, p); read_base_line(); p = baseline; if (feof(base)) { last_read_eof = TRUE; break; } } while (*baseline != ':'); validate_checksum(major, "for original base", &old_checksum); return (TRUE); } /* * Remove trailing whitespace */ #ifndef oldcc char * trim(char * s) #else char * trim(s) char * s; #endif /* oldcc */ { int t; for (t = strlen(s) - 1; t && isspace(s[t]); t--); if (!t && isspace(s[t])) { *s = '\0'; } else { s[++t] = '\0'; } return(s); }