From 8045056474943addfe83beb1c22218aee1e8897d Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Thu, 15 Oct 2009 15:13:20 +0000 Subject: [PATCH] * more work on the wiki revision control engine --- citadel/modules/wiki/serv_wiki.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/citadel/modules/wiki/serv_wiki.c b/citadel/modules/wiki/serv_wiki.c index 52ce12821..04f0c966b 100644 --- a/citadel/modules/wiki/serv_wiki.c +++ b/citadel/modules/wiki/serv_wiki.c @@ -60,11 +60,12 @@ int wiki_upload_beforesave(struct CtdlMessage *msg) { char diff_new_filename[PATH_MAX]; char diff_cmd[PATH_MAX]; FILE *fp; - char buf[1024]; int rv; char history_page[1024]; char boundary[256]; - int nbytes; + int nbytes = 0; + char *diffbuf = NULL; + size_t diffbuf_len = 0; if (!CCC->logged_in) return(0); /* Only do this if logged in. */ @@ -116,22 +117,35 @@ int wiki_upload_beforesave(struct CtdlMessage *msg) { rv = fwrite(msg->cm_fields['M'], strlen(msg->cm_fields['M']), 1, fp); fclose(fp); + diffbuf_len = 0; + diffbuf = NULL; snprintf(diff_cmd, sizeof diff_cmd, "diff -u %s %s", diff_old_filename, diff_new_filename); fp = popen(diff_cmd, "r"); if (fp != NULL) { do { - nbytes = fread(buf, 1, sizeof buf, fp); - if (nbytes > 0) { - /* FIXME now do something with it */ - CtdlLogPrintf(CTDL_DEBUG, "\033[32mREAD %d BYTES\033[0m\n", nbytes); - } - } while (nbytes == sizeof(buf)); + diffbuf = realloc(diffbuf, diffbuf_len + 1025); + nbytes = fread(&diffbuf[diffbuf_len], 1, 1024, fp); + diffbuf_len += nbytes; + } while (nbytes == 1024); + diffbuf[diffbuf_len] = 0; pclose(fp); } + CtdlLogPrintf(CTDL_DEBUG, "diff length is %d bytes\n", diffbuf_len); unlink(diff_old_filename); unlink(diff_new_filename); + /* Determine whether this was a bogus (empty) edit */ + if ((diffbuf_len = 0) && (diffbuf != NULL)) { + free(diffbuf); + diffbuf = NULL; + } + if (diffbuf == NULL) { + return(1); /* No changes at all? Abandon the post entirely! */ + } + + free(diffbuf); /* FIXME do something with it */ + /* Now look for the existing edit history */ history_msgnum = locate_message_by_euid(history_page, &CCC->room); -- 2.30.2