home *** CD-ROM | disk | FTP | other *** search
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
- /* |_o_o|\\ Copyright (c) 1987, 1988 The Software Distillery. All Rights */
- /* |. o.| || Reserved. This program may not be distributed without the */
- /* | . | || permission of the authors: BBS: */
- /* | o | || John Toebes Doug Walker Dave Baker */
- /* | . |// */
- /* ====== */
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
- /* File Manipulation */
- /* ActDelete ActRename ActSetProtection ActSetComment */
- #include "handler.h"
-
- void ActDelete(global, pkt)
- GLOBAL global;
- struct DosPacket *pkt; /* a pointer to the dos packet sent */
- /* Arg1: Lock */
- /* Arg2: Name */
- {
- NETPTR nlock;
- struct FileLock *flock;
- BUG(("ActDelete\n"));
-
- /* Can't delete in the root of NET: */
- if((!(flock=(struct FileLock *)pkt->dp_Arg1) ||
- !(nlock=(NETPTR)flock->fl_Key)->RDevice))
- {
- if(ParseName(global, (char *)pkt->dp_Arg2, &nlock, global->RP.Data) ||
- !nlock)
- {
- /* Either he is trying to delete a node or he got the name wrong */
- pkt->dp_Res1 = DOS_FALSE;
- pkt->dp_Res2 = (nlock ? ERROR_OBJECT_IN_USE
- : ERROR_WRITE_PROTECTED);
- return;
- }
- BUGBSTR("RmtDelete: Sending to node ", nlock->NetNode->name);
- }
- else
- MBSTR(pkt->dp_Arg2, global->RP.Data);
-
- BUGBSTR("RmtDelete: remote node name =", global->RP.Data);
-
- global->RP.Type = pkt->dp_Type;
- global->RP.Arg1 = (LONG)nlock->RPtr;
- global->RP.DLen = BSTRLEN(global->RP.Data)+1;
- if(global->RP.DLen == 1) global->RP.DLen = 0;
-
- RemotePacket(global, nlock);
- }
-
- void ActRename(global,pkt)
- GLOBAL global;
- struct DosPacket *pkt; /* a pointer to the dos packet sent */
- /* Arg1: FromLock */
- /* Arg2: FromName */
- /* Arg3: ToLock */
- /* Arg4: ToName */
- {
- NETPTR nlock, nlock2;
- struct FileLock *flock;
- char *tmpchar;
-
- BUG(("ActRename\n"));
-
- /* See if it is a local lock */
- if((!(flock=(struct FileLock *)pkt->dp_Arg1) ||
- !(nlock=(NETPTR)flock->fl_Key)->RDevice))
- {
- if(ParseName(global, (char *)pkt->dp_Arg2, &nlock, global->RP.Data) ||
- !nlock)
- {
- /* Trying to rename a node, or something that doesn't exist */
- pkt->dp_Res1 = DOS_FALSE;
- pkt->dp_Res2 = ERROR_OBJECT_NOT_FOUND;
- return;
- }
- }
- else
- MBSTR(pkt->dp_Arg2, global->RP.Data);
-
- /* See if the second lock is a local lock */
- if((!(flock=(struct FileLock *)pkt->dp_Arg3) ||
- !(nlock2=(NETPTR)flock->fl_Key)->RDevice))
- {
- if(ParseName(global, (char *)pkt->dp_Arg4, &nlock,
- global->RP.Data+FILENAMELEN) || !nlock2)
- {
- /* See if they are trying to rename a node */
- if(global->RP.Data[0] == 1 && global->RP.Data[1] == ':')
- {
- tmpchar = global->RP.Data+FILENAMELEN;
- if(tmpchar[0] > RNAMELEN) tmpchar[0] = RNAMELEN;
- MBSTR(tmpchar, nlock->NetNode->name);
- }
- else
- {
- pkt->dp_Res1 = DOS_FALSE;
- pkt->dp_Res2 = (nlock2 ? ERROR_OBJECT_EXISTS
- : ERROR_RENAME_ACROSS_DEVICES);
- }
- return;
- }
- }
- else
- MBSTR(pkt->dp_Arg4, global->RP.Data+FILENAMELEN);
-
- /* Check for rename across devices */
- if(nlock->NetNode != nlock2->NetNode)
- {
- pkt->dp_Res1 = DOS_FALSE;
- pkt->dp_Res2 = ERROR_RENAME_ACROSS_DEVICES;
- return;
- }
-
- global->RP.Type = pkt->dp_Type;
- global->RP.Arg1 = (LONG)nlock->RPtr;
- global->RP.Arg3 = (LONG)nlock2->RPtr;
- global->RP.DLen = FILENAMELEN + BSTRLEN(global->RP.Data+FILENAMELEN)+1;
-
- RemotePacket(global, nlock);
- }
-
- void ActSetProtection(global, pkt)
- GLOBAL global;
- struct DosPacket *pkt; /* a pointer to the dos packet sent */
- /* Arg1: Unused */
- /* Arg2: Lock */
- /* Arg3: Name */
- /* Arg4: Mask of protection */
- {
- struct FileLock *flock;
- NETPTR nlock;
-
- BUG(("ActSetProtection\n"));
-
- BUGBSTR("File to protect: ", pkt->dp_Arg3);
-
- if((!(flock=(struct FileLock *)pkt->dp_Arg2) ||
- !(nlock=(NETPTR)flock->fl_Key)->RDevice))
- {
- /* Local lock - protection not implemented yet */
- pkt->dp_Res1 = DOS_TRUE;
- return;
- }
-
- global->RP.Type = pkt->dp_Type;
- global->RP.Arg2 = (LONG)nlock->RPtr;
- MBSTR(pkt->dp_Arg3, global->RP.Data);
- global->RP.Arg4 = pkt->dp_Arg4;
- global->RP.DLen = BSTRLEN(global->RP.Data)+1;
- if(global->RP.DLen == 1) global->RP.DLen = 0;
-
- RemotePacket(global, nlock);
- }
-
- void ActSetComment(global,pkt)
- GLOBAL global;
- struct DosPacket *pkt; /* a pointer to the dos packet sent */
- /* Arg1: Unused */
- /* Arg2: Lock */
- /* Arg3: Name */
- /* Arg4: Comment */
- {
- struct FileLock *flock;
- NETPTR nlock;
-
- BUG(("ActSetComment\n"));
-
- BUGBSTR("File to Comment: ", pkt->dp_Arg3);
- BUGBSTR("New Comment Str: ", pkt->dp_Arg4);
-
- if((!(flock=(struct FileLock *)pkt->dp_Arg2) ||
- !(nlock=(NETPTR)flock->fl_Key)->RDevice))
- {
- /* Can't SetComment local nodes */
- pkt->dp_Res1 = DOS_TRUE;
- return;
- }
-
- global->RP.Type = pkt->dp_Type;
- global->RP.Arg2 = (LONG)nlock->RPtr;
- MBSTR(pkt->dp_Arg3, global->RP.Data);
- MBSTR(pkt->dp_Arg4, global->RP.Data+FILENAMELEN);
- global->RP.DLen = FILENAMELEN + BSTRLEN(global->RP.Data+FILENAMELEN)+1;
-
- RemotePacket(global, nlock);
- }
-
- void ActSetFileDate(global, pkt)
- GLOBAL global;
- struct DosPacket *pkt;
- {
- pkt->dp_Res1 = DOS_FALSE;
- pkt->dp_Res2 = ERROR_NODE_DOWN;
- }
-