home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD1.bin / useful / comm / tcp / amitcp / src / netlib / _close.c < prev    next >
C/C++ Source or Header  |  1994-04-12  |  2KB  |  94 lines

  1. RCS_ID_C="$Id: _close.c,v 1.5 1994/04/12 20:48:06 jraja Exp $";
  2. /*
  3.  * _close.c -- close a file
  4.  *
  5.  * Author: jraja <Jarno.Rajahalme@hut.fi>
  6.  *
  7.  * This file is part of the AmiTCP/IP Network Support Library.
  8.  *
  9.  * Copyright © 1993 AmiTCP/IP Group, <amitcp-group@hut.fi>
  10.  *                  Helsinki University of Technology, Finland.
  11.  *                  All rights reserved.
  12.  *
  13.  * Created      : Tue Mar  8 01:39:01 1994 jraja
  14.  * Last modified: Wed Mar 30 10:28:08 1994 jraja
  15.  *
  16.  */
  17.  
  18. #include <ios1.h>
  19. #include <stdlib.h>
  20. #include <stdio.h>
  21. #include <dos.h>
  22. #include <proto/dos.h>
  23. #include <errno.h>
  24. #include <bsdsocket.h>
  25.  
  26. int 
  27. __close(int fd)
  28. {
  29.   struct UFB *ufb;
  30.  
  31.   /*
  32.    * Check for the break signals
  33.    */
  34.   __chkabort();
  35.  
  36.   /*
  37.    * Find the ufb *
  38.    */
  39.   if ((ufb = __chkufb(fd)) == NULL) {
  40.     /* __chkufb sets the errno to EBADF */
  41.     return -1;
  42.   }
  43.  
  44.   /*
  45.    * Check if close is not needed
  46.    */
  47.   if ((ufb->ufbflg & (UFB_NC | UFB_CLO)) != UFB_NC) {
  48.  
  49.     /*
  50.      * Empty flags mean empty ufb
  51.      */
  52.     if (ufb->ufbflg == 0) {
  53.       errno = EBADF;
  54.       return -1;
  55.     }
  56.  
  57.     /*
  58.      * Close the file
  59.      */
  60.     if (!(ufb->ufbflg & UFB_SOCK) && ufb->ufbfh != NULL) {
  61.       Close(ufb->ufbfh);
  62.       
  63.       /*
  64.        * Remove the file if it was temporary
  65.        */
  66.       if (ufb->ufbflg & UFB_TEMP && ufb->ufbfn != NULL) 
  67.     remove(ufb->ufbfn);
  68.     }
  69.  
  70.   }
  71.  
  72.   /*
  73.    * Free the file name
  74.    */
  75.   if (ufb->ufbfn != NULL) {
  76.     free(ufb->ufbfn);
  77.     ufb->ufbfn = NULL;
  78.   }
  79.  
  80.   /*
  81.    * Clear the flags to free this ufb
  82.    */
  83.   ufb->ufbflg = 0;
  84.   ufb->ufbfh = NULL; /* just in case */
  85.  
  86.   /* 
  87.    * closes the socket OR the file mark
  88.    */
  89.   CloseSocket(fd);
  90.   
  91.   return 0;
  92. }
  93.  
  94.