getting with the times, we dont need to wrap snprintf anymore
[citadel.git] / citadel / file_ops.c
index 69e49c45e9625c9a543128ca45fbe87f8d862fd6..b52915e70ae0da62f4ca41e07d4b1a7f9dac9a29 100644 (file)
 #include "msgbase.h"
 #include "citserver.h"
 #include "threads.h"
-
-#ifndef HAVE_SNPRINTF
-#include "snprintf.h"
-#endif
-
 #include "ctdl_module.h"
 #include "user_ops.h"
 
-/*
- * network_talking_to()  --  concurrency checker
- */
-static HashList *nttlist = NULL;
-int network_talking_to(const char *nodename, long len, int operation) {
-
-       int retval = 0;
-       HashPos *Pos = NULL;
-       void *vdata;
-
-       begin_critical_section(S_NTTLIST);
-
-       switch(operation) {
-
-               case NTT_ADD:
-                       if (nttlist == NULL) 
-                               nttlist = NewHash(1, NULL);
-                       Put(nttlist, nodename, len, NewStrBufPlain(nodename, len), HFreeStrBuf);
-                       syslog(LOG_DEBUG, "nttlist: added <%s>\n", nodename);
-                       break;
-               case NTT_REMOVE:
-                       if ((nttlist == NULL) ||
-                           (GetCount(nttlist) == 0))
-                               break;
-                       Pos = GetNewHashPos(nttlist, 1);
-                       if (GetHashPosFromKey (nttlist, nodename, len, Pos))
-                               DeleteEntryFromHash(nttlist, Pos);
-                       DeleteHashPos(&Pos);
-                       syslog(LOG_DEBUG, "nttlist: removed <%s>\n", nodename);
-
-                       break;
-
-               case NTT_CHECK:
-                       if ((nttlist == NULL) ||
-                           (GetCount(nttlist) == 0))
-                               break;
-                       if (!GetHash(nttlist, nodename, len, &vdata))
-                               retval ++;
-                       syslog(LOG_DEBUG, "nttlist: have [%d] <%s>\n", retval, nodename);
-                       break;
-       }
-
-       end_critical_section(S_NTTLIST);
-       return(retval);
-}
-
-void cleanup_nttlist(void)
-{
-        begin_critical_section(S_NTTLIST);
-       DeleteHash(&nttlist);
-        end_critical_section(S_NTTLIST);
-}
-
 
 
 /*
@@ -156,7 +98,6 @@ void cmd_movf(char *cmdbuf)
        char buf[PATH_MAX];
        int a;
        struct ctdlroom qrbuf;
-       int rv = 0;
 
        extract_token(filename, cmdbuf, 0, '|', sizeof filename);
        extract_token(newroom, cmdbuf, 1, '|', sizeof newroom);
@@ -210,7 +151,7 @@ void cmd_movf(char *cmdbuf)
        snprintf(buf, sizeof buf,
                 "cat ./files/%s/filedir |grep \"%s\" >>./files/%s/filedir",
                 CC->room.QRdirname, filename, qrbuf.QRdirname);
-       rv = system(buf);
+       system(buf);
        cprintf("%d File '%s' has been moved.\n", CIT_OK, filename);
 }
 
@@ -642,10 +583,15 @@ void cmd_read(char *cmdbuf)
        long start_pos;
        size_t bytes;
        char buf[SIZ];
+       int rc;
 
        /* The client will transmit its requested offset and byte count */
        start_pos = extract_long(cmdbuf, 0);
        bytes = extract_int(cmdbuf, 1);
+       if ((start_pos < 0) || (bytes <= 0)) {
+               cprintf("%d you have to specify a value > 0.\n", ERROR + ILLEGAL_VALUE);
+               return;
+       }
 
        if (CC->download_fp == NULL) {
                cprintf("%d You don't have a download file open.\n",
@@ -658,7 +604,16 @@ void cmd_read(char *cmdbuf)
                bytes = sizeof(buf);
        }
 
-       fseek(CC->download_fp, start_pos, 0);
+       rc = fseek(CC->download_fp, start_pos, 0);
+       if (rc < 0) {
+               cprintf("%d your file is smaller then %ld.\n", ERROR + ILLEGAL_VALUE, start_pos);
+               syslog(LOG_ALERT, "your file %s is smaller then %ld. [%s]\n", 
+                      CC->upl_path, 
+                      start_pos,
+                      strerror(errno));
+
+               return;
+       }
        bytes = fread(buf, 1, bytes, CC->download_fp);
        if (bytes > 0) {
                /* Tell the client the actual byte count and transmit it */
@@ -688,11 +643,13 @@ void cmd_writ(char *cmdbuf)
                cprintf("%d You don't have an upload file open.\n", ERROR + RESOURCE_NOT_OPEN);
                return;
        }
+       if (bytes <= 0) {
+               cprintf("%d you have to specify a value > 0.\n", ERROR + ILLEGAL_VALUE);
+               return;
+       }
 
        if (bytes > 100000) {
-               cprintf("%d You may not write more than 100000 bytes.\n",
-                       ERROR + TOO_BIG);
-               return;
+               bytes = 100000;
        }
 
        cprintf("%d %d\n", SEND_BINARY, bytes);
@@ -814,6 +771,7 @@ void cmd_nuop(char *cmdbuf)
 CTDL_MODULE_INIT(file_ops)
 {
        if (!threading) {
+
                CtdlRegisterProtoHook(cmd_delf, "DELF", "Delete a file");
                CtdlRegisterProtoHook(cmd_movf, "MOVF", "Move a file");
                CtdlRegisterProtoHook(cmd_open, "OPEN", "Open a download file transfer");
@@ -826,7 +784,6 @@ CTDL_MODULE_INIT(file_ops)
                CtdlRegisterProtoHook(cmd_nuop, "NUOP", "Open a network spool file for upload");
                CtdlRegisterProtoHook(cmd_oimg, "OIMG", "Open an image file for download");
                CtdlRegisterProtoHook(cmd_uimg, "UIMG", "Upload an image file");
-               CtdlRegisterCleanupHook(cleanup_nttlist);
        }
         /* return our Subversion id for the Log */
        return "file_ops";