]> code.citadel.org Git - citadel.git/blobdiff - citadel/modules/migrate/serv_migrate.c
Escape single and double quotes in export format
[citadel.git] / citadel / modules / migrate / serv_migrate.c
index cf8512916f0a6e8699380e33d3fb52ed4ff61487..4eeb576e5955ac9ebbe8d59362c80a88147dc0ab 100644 (file)
@@ -86,8 +86,11 @@ void xml_strout(char *str) {
        char *c = str;
 
        while (*c != 0) {
-               if (*c == '&') {
-                       client_write("&", 5);
+               if (*c == '\"') {
+                       client_write(""", 4);
+               }
+               else if (*c == '\'') {
+                       client_write("'", 4);
                }
                else if (*c == '<') {
                        client_write("&lt;", 4);
@@ -95,6 +98,9 @@ void xml_strout(char *str) {
                else if (*c == '>') {
                        client_write("&gt;", 4);
                }
+               else if (*c == '&') {
+                       client_write("&amp;", 5);
+               }
                else {
                        client_write(c, 1);
                }
@@ -182,7 +188,7 @@ void migr_export_rooms(void) {
         * this will be handled by exporting the reference count, not by
         * exporting the message multiple times.)
         */
-       snprintf(cmd, sizeof cmd, "sort <%s >%s", migr_tempfilename1, migr_tempfilename2);
+       snprintf(cmd, sizeof cmd, "sort -n <%s >%s", migr_tempfilename1, migr_tempfilename2);
        if (system(cmd) != 0) CtdlLogPrintf(CTDL_ALERT, "Error %d\n", errno);
        snprintf(cmd, sizeof cmd, "uniq <%s >%s", migr_tempfilename2, migr_tempfilename1);
        if (system(cmd) != 0) CtdlLogPrintf(CTDL_ALERT, "Error %d\n", errno);
@@ -213,16 +219,16 @@ void migr_export_floors(void) {
  *  Traverse the visits file...
  */
 void migr_export_visits(void) {
-       struct visit vbuf;
+       visit vbuf;
        struct cdbdata *cdbv;
 
        cdb_rewind(CDB_VISIT);
 
        while (cdbv = cdb_next_item(CDB_VISIT), cdbv != NULL) {
-               memset(&vbuf, 0, sizeof(struct visit));
+               memset(&vbuf, 0, sizeof(visit));
                memcpy(&vbuf, cdbv->ptr,
-                      ((cdbv->len > sizeof(struct visit)) ?
-                       sizeof(struct visit) : cdbv->len));
+                      ((cdbv->len > sizeof(visit)) ?
+                       sizeof(visit) : cdbv->len));
                cdb_free(cdbv);
 
                client_write("<visit>\n", 8);
@@ -497,7 +503,7 @@ long openid_usernum = 0;
 char FRname[ROOMNAMELEN];
 struct floor flbuf;
 int floornum = 0;
-struct visit vbuf;
+visit vbuf;
 struct MetaData smi;
 long import_msgnum = 0;
 char *decoded_msg = NULL;
@@ -549,7 +555,7 @@ void migr_xml_start(void *data, const char *el, const char **attr) {
        }
 
        if (citadel_migrate_data != 1) {
-               CtdlLogPrintf(CTDL_ALERT, "Out-of-sequence tag <%s> detected.  Warning: ODD-DATA!\n");
+               CtdlLogPrintf(CTDL_ALERT, "Out-of-sequence tag <%s> detected.  Warning: ODD-DATA!\n", el);
                return;
        }
 
@@ -561,7 +567,7 @@ void migr_xml_start(void *data, const char *el, const char **attr) {
        else if (!strcasecmp(el, "room"))               memset(&qrbuf, 0, sizeof (struct ctdlroom));
        else if (!strcasecmp(el, "room_messages"))      memset(FRname, 0, sizeof FRname);
        else if (!strcasecmp(el, "floor"))              memset(&flbuf, 0, sizeof (struct floor));
-       else if (!strcasecmp(el, "visit"))              memset(&vbuf, 0, sizeof (struct visit));
+       else if (!strcasecmp(el, "visit"))              memset(&vbuf, 0, sizeof (visit));
 
        else if (!strcasecmp(el, "message")) {
                memset(&smi, 0, sizeof (struct MetaData));
@@ -594,7 +600,7 @@ void migr_xml_end(void *data, const char *el) {
        }
 
        if (citadel_migrate_data != 1) {
-               CtdlLogPrintf(CTDL_ALERT, "Out-of-sequence tag <%s> detected.  Warning: ODD-DATA!\n");
+               CtdlLogPrintf(CTDL_ALERT, "Out-of-sequence tag <%s> detected.  Warning: ODD-DATA!\n", el);
                return;
        }