]> code.citadel.org Git - citadel.git/blobdiff - citadel/file_ops.c
* strlen holy war: loops. in loops it's very evil. the easy ones go away now.
[citadel.git] / citadel / file_ops.c
index 7595fd853a765ed9ddeb3d17b82bf965fce5ca4e..1ef2b979cfdcb00c39a2c25871fc118e1de8ae94 100644 (file)
@@ -5,10 +5,6 @@
  *
  */
 
-#ifdef DLL_EXPORT
-#define IN_LIBCIT
-#endif
-
 #include "sysdep.h"
 #include <stdlib.h>
 #include <unistd.h>
@@ -34,7 +30,6 @@
 #include <limits.h>
 #include "citadel.h"
 #include "server.h"
-#include "serv_extensions.h"
 #include "config.h"
 #include "file_ops.h"
 #include "sysdep_decls.h"
@@ -75,13 +70,13 @@ int network_talking_to(char *nodename, int operation) {
 
                case NTT_REMOVE:
                        if (nttlist == NULL) break;
-                       if (strlen(nttlist) == 0) break;
+                       if (IsEmptyStr(nttlist)) break;
                        ptr = malloc(strlen(nttlist));
                        if (ptr == NULL) break;
                        strcpy(ptr, "");
                        for (i = 0; i < num_tokens(nttlist, '|'); ++i) {
                                extract_token(buf, nttlist, i, '|', sizeof buf);
-                               if ( (strlen(buf) > 0)
+                               if ( (!IsEmptyStr(buf))
                                     && (strcasecmp(buf, nodename)) ) {
                                                strcat(ptr, buf);
                                                strcat(ptr, "|");
@@ -93,7 +88,7 @@ int network_talking_to(char *nodename, int operation) {
 
                case NTT_CHECK:
                        if (nttlist == NULL) break;
-                       if (strlen(nttlist) == 0) break;
+                       if (IsEmptyStr(nttlist)) break;
                        for (i = 0; i < num_tokens(nttlist, '|'); ++i) {
                                extract_token(buf, nttlist, i, '|', sizeof buf);
                                if (!strcasecmp(buf, nodename)) ++retval;
@@ -126,18 +121,20 @@ void cmd_delf(char *filename)
                return;
        }
 
-       if (strlen(filename) == 0) {
+       if (IsEmptyStr(filename)) {
                cprintf("%d You must specify a file name.\n",
                        ERROR + FILE_NOT_FOUND);
                return;
        }
-       for (a = 0; a < strlen(filename); ++a) {
+       for (a = 0; !IsEmptyStr(&filename[a]); ++a) {
                if (filename[a] == '/') {
                        filename[a] = '_';
                }
        }
-       snprintf(pathname, sizeof pathname, "./files/%s/%s",
-                CC->room.QRdirname, filename);
+       snprintf(pathname, sizeof pathname,
+                        "%s/%s/%s",
+                        ctdl_file_dir,
+                        CC->room.QRdirname, filename);
        a = unlink(pathname);
        if (a == 0) {
                cprintf("%d File '%s' deleted.\n", CIT_OK, pathname);
@@ -175,13 +172,13 @@ void cmd_movf(char *cmdbuf)
                return;
        }
 
-       if (strlen(filename) == 0) {
+       if (IsEmptyStr(filename)) {
                cprintf("%d You must specify a file name.\n",
                        ERROR + FILE_NOT_FOUND);
                return;
        }
 
-       for (a = 0; a < strlen(filename); ++a) {
+       for (a = 0; !IsEmptyStr(&filename[a]); ++a) {
                if (filename[a] == '/') {
                        filename[a] = '_';
                }
@@ -244,13 +241,13 @@ void cmd_netf(char *cmdbuf)
                return;
        }
 
-       if (strlen(filename) == 0) {
+       if (IsEmptyStr(filename)) {
                cprintf("%d You must specify a file name.\n",
                        ERROR + FILE_NOT_FOUND);
                return;
        }
 
-       for (a = 0; a < strlen(filename); ++a) {
+       for (a = 0; !IsEmptyStr(&filename[a]); ++a) {
                if (filename[a] == '/') {
                        filename[a] = '_';
                }
@@ -270,8 +267,9 @@ void cmd_netf(char *cmdbuf)
                return;
        }
        snprintf(outfile, sizeof outfile,
-                "%s/network/spoolin/nsf.%04lx.%04x",
-                CTDLDIR, (long)getpid(), ++seq);
+                        "%s/nsf.%04lx.%04x",
+                        ctdl_netin_dir,
+                        (long)getpid(), ++seq);
        ofp = fopen(outfile, "a");
        if (ofp == NULL) {
                cprintf("%d internal error\n", ERROR + INTERNAL_ERROR);
@@ -281,7 +279,7 @@ void cmd_netf(char *cmdbuf)
        putc(255, ofp);
        putc(MES_NORMAL, ofp);
        putc(0, ofp);
-       fprintf(ofp, "Pcit%ld", CC->user.usernum);
+       fprintf(ofp, "P%s", CC->user.fullname);
        putc(0, ofp);
        time(&now);
        fprintf(ofp, "T%ld", (long) now);
@@ -300,8 +298,10 @@ void cmd_netf(char *cmdbuf)
        fclose(ofp);
 
        snprintf(buf, sizeof buf,
-                "cd ./files/%s; uuencode %s <%s 2>/dev/null >>%s",
-                CC->room.QRdirname, filename, filename, outfile);
+                        "cd %s/%s; uuencode %s <%s 2>/dev/null >>%s",
+                        ctdl_file_dir,
+                        /* FIXME: detect uuencode while installation? or inline */
+                        CC->room.QRdirname, filename, filename, outfile);
        system(buf);
 
        ofp = fopen(outfile, "a");
@@ -355,7 +355,7 @@ void cmd_open(char *cmdbuf)
                return;
        }
 
-       if (strlen(filename) == 0) {
+       if (IsEmptyStr(filename)) {
                cprintf("%d You must specify a file name.\n",
                        ERROR + FILE_NOT_FOUND);
                return;
@@ -367,14 +367,16 @@ void cmd_open(char *cmdbuf)
                return;
        }
 
-       for (a = 0; a < strlen(filename); ++a) {
+       for (a = 0; !IsEmptyStr(&filename[a]); ++a) {
                if (filename[a] == '/') {
                        filename[a] = '_';
                }
        }
 
        snprintf(pathname, sizeof pathname,
-                "./files/%s/%s", CC->room.QRdirname, filename);
+                        "%s/%s/%s",
+                        ctdl_file_dir,
+                        CC->room.QRdirname, filename);
        CC->download_fp = fopen(pathname, "r");
 
        if (CC->download_fp == NULL) {
@@ -400,7 +402,7 @@ void cmd_oimg(char *cmdbuf)
 
        extract_token(filename, cmdbuf, 0, '|', sizeof filename);
 
-       if (strlen(filename) == 0) {
+       if (IsEmptyStr(filename)) {
                cprintf("%d You must specify a file name.\n",
                        ERROR + FILE_NOT_FOUND);
                return;
@@ -419,23 +421,28 @@ void cmd_oimg(char *cmdbuf)
                                ERROR + NO_SUCH_USER);
                        return;
                }
-               snprintf(pathname, sizeof pathname, "./userpics/%ld.gif",
-                        usbuf.usernum);
+               snprintf(pathname, sizeof pathname, 
+                                "%s/%ld.gif",
+                                ctdl_usrpic_dir,
+                                usbuf.usernum);
        } else if (!strcasecmp(filename, "_floorpic_")) {
                which_floor = extract_int(cmdbuf, 1);
                snprintf(pathname, sizeof pathname,
-                        "./images/floor.%d.gif", which_floor);
+                                "%s/floor.%d.gif",
+                                ctdl_image_dir, which_floor);
        } else if (!strcasecmp(filename, "_roompic_")) {
-               assoc_file_name(pathname, sizeof pathname, &CC->room, "images");
+               assoc_file_name(pathname, sizeof pathname, &CC->room, ctdl_image_dir);
        } else {
-               for (a = 0; a < strlen(filename); ++a) {
+               for (a = 0; !IsEmptyStr(&filename[0]); ++a) {
                        filename[a] = tolower(filename[a]);
                        if (filename[a] == '/') {
                                filename[a] = '_';
                        }
                }
-               snprintf(pathname, sizeof pathname, "./images/%s.gif",
-                        filename);
+               snprintf(pathname, sizeof pathname,
+                                "%s/%s.gif",
+                                ctdl_image_dir,
+                                filename);
        }
 
        CC->download_fp = fopen(pathname, "rb");
@@ -466,7 +473,7 @@ void cmd_uopn(char *cmdbuf)
                return;
        }
 
-       if (strlen(CC->upl_file) == 0) {
+       if (IsEmptyStr(CC->upl_file)) {
                cprintf("%d You must specify a file name.\n",
                        ERROR + FILE_NOT_FOUND);
                return;
@@ -478,15 +485,19 @@ void cmd_uopn(char *cmdbuf)
                return;
        }
 
-       for (a = 0; a < strlen(CC->upl_file); ++a) {
+       for (a = 0; !IsEmptyStr(&CC->upl_file[a]); ++a) {
                if (CC->upl_file[a] == '/') {
                        CC->upl_file[a] = '_';
                }
        }
-       snprintf(CC->upl_path, sizeof CC->upl_path, "./files/%s/%s",
-                CC->room.QRdirname, CC->upl_file);
+       snprintf(CC->upl_path, sizeof CC->upl_path, 
+                        "%s/%s/%s",
+                        ctdl_file_dir,
+                        CC->room.QRdirname, CC->upl_file);
        snprintf(CC->upl_filedir, sizeof CC->upl_filedir,
-                "./files/%s/filedir", CC->room.QRdirname);
+                        "%s/%s/filedir", 
+                        ctdl_file_dir,
+                        CC->room.QRdirname);
 
        CC->upload_fp = fopen(CC->upl_path, "r");
        if (CC->upload_fp != NULL) {
@@ -533,7 +544,7 @@ void cmd_uimg(char *cmdbuf)
 
        strcpy(CC->upl_path, "");
 
-       for (a = 0; a < strlen(basenm); ++a) {
+       for (a = 0; !IsEmptyStr(&basenm[a]); ++a) {
                basenm[a] = tolower(basenm[a]);
                if (basenm[a] == '/') {
                        basenm[a] = '_';
@@ -541,27 +552,33 @@ void cmd_uimg(char *cmdbuf)
        }
 
        if (CC->user.axlevel >= 6) {
-               snprintf(CC->upl_path, sizeof CC->upl_path, "./images/%s",
-                        basenm);
+               snprintf(CC->upl_path, sizeof CC->upl_path, 
+                                "%s/%s",
+                                ctdl_image_dir,
+                                basenm);
        }
 
        if (!strcasecmp(basenm, "_userpic_")) {
                snprintf(CC->upl_path, sizeof CC->upl_path,
-                        "./userpics/%ld.gif", CC->user.usernum);
+                                "%s/%ld.gif",
+                                ctdl_usrpic_dir,
+                                CC->user.usernum);
        }
 
        if ((!strcasecmp(basenm, "_floorpic_"))
            && (CC->user.axlevel >= 6)) {
                which_floor = extract_int(cmdbuf, 2);
                snprintf(CC->upl_path, sizeof CC->upl_path,
-                        "./images/floor.%d.gif", which_floor);
+                                "%s/floor.%d.gif",
+                                ctdl_image_dir,
+                                which_floor);
        }
 
        if ((!strcasecmp(basenm, "_roompic_")) && (is_room_aide())) {
-               assoc_file_name(CC->upl_path, sizeof CC->upl_path, &CC->room, "images");
+               assoc_file_name(CC->upl_path, sizeof CC->upl_path, &CC->room, ctdl_image_dir);
        }
 
-       if (strlen(CC->upl_path) == 0) {
+       if (IsEmptyStr(CC->upl_path)) {
                cprintf("%d Higher access required.\n",
                        ERROR + HIGHER_ACCESS_REQUIRED);
                return;
@@ -601,8 +618,10 @@ void cmd_clos(void)
 
        if (CC->dl_is_net == 1) {
                CC->dl_is_net = 0;
-               snprintf(buf, sizeof buf, "%s/network/spoolout/%s", CTDLDIR,
-                        CC->net_node);
+               snprintf(buf, sizeof buf, 
+                                "%s/%s",
+                                ctdl_netout_dir,
+                                CC->net_node);
                unlink(buf);
        }
 
@@ -665,7 +684,7 @@ void cmd_ucls(char *cmd)
                snprintf(upload_notice, sizeof upload_notice,
                        "NEW UPLOAD: '%s'\n %s\n",
                        CC->upl_file, CC->upl_comment);
-               quickie_message(CC->curr_user, NULL, CC->room.QRname,
+               quickie_message(CC->curr_user, NULL, NULL, CC->room.QRname,
                                upload_notice, 0, NULL);
        } else {
                abort_upl(CC);
@@ -747,7 +766,7 @@ void cmd_ndop(char *cmdbuf)
        char pathname[256];
        struct stat statbuf;
 
-       if (strlen(CC->net_node) == 0) {
+       if (IsEmptyStr(CC->net_node)) {
                cprintf("%d Not authenticated as a network node.\n",
                        ERROR + NOT_LOGGED_IN);
                return;
@@ -759,8 +778,10 @@ void cmd_ndop(char *cmdbuf)
                return;
        }
 
-       snprintf(pathname, sizeof pathname, "%s/network/spoolout/%s",
-                CTDLDIR, CC->net_node);
+       snprintf(pathname, sizeof pathname, 
+                        "%s/%s",
+                        ctdl_netout_dir,
+                        CC->net_node);
 
        /* first open the file in append mode in order to create a
         * zero-length file if it doesn't already exist 
@@ -794,7 +815,7 @@ void cmd_nuop(char *cmdbuf)
 {
        static int seq = 1;
 
-       if (strlen(CC->net_node) == 0) {
+       if (IsEmptyStr(CC->net_node)) {
                cprintf("%d Not authenticated as a network node.\n",
                        ERROR + NOT_LOGGED_IN);
                return;
@@ -807,8 +828,11 @@ void cmd_nuop(char *cmdbuf)
        }
 
        snprintf(CC->upl_path, sizeof CC->upl_path,
-                "%s/network/spoolin/%s.%04lx.%04x",
-                CTDLDIR, CC->net_node, (long)getpid(), ++seq);
+                        "%s/%s.%04lx.%04x",
+                        ctdl_netin_dir,
+                        CC->net_node, 
+                        (long)getpid(), 
+                        ++seq);
 
        CC->upload_fp = fopen(CC->upl_path, "r");
        if (CC->upload_fp != NULL) {