Annotation of 43BSD/contrib/cpm/src/cclose.c, revision 1.1.1.1

1.1       root        1: /*     cclose.c        1.10    83/05/13        */
                      2: #include <stdio.h>
                      3: #include "cpmio.h"
                      4: #include "cpmfio.h"
                      5: 
                      6: /*
                      7:  * Close cp/m file
                      8:  * If the file was opened for write, flush 
                      9:  * buffer to disk and update directory 
                     10:  */
                     11: 
                     12: c_close(fptr)
                     13:        register C_FILE *fptr;
                     14: {
                     15:        int     scts = 0;
                     16: 
                     17: #ifdef DEBUG
                     18:        printf("c_close: cnt: %d\n", fptr->c_cnt);
                     19: #endif
                     20:        if (fptr->c_flag & WRITE) {
                     21:                scts = (blksiz - fptr->c_cnt)/seclth + 1;
                     22:                if (fptr->c_cnt%seclth == 0)
                     23:                        scts--;
                     24:                fptr->c_dirp->blkcnt = scts + fptr->c_seccnt;
                     25:                if (fptr->c_cnt < blksiz) {
                     26:                        /*
                     27:                         * zero fill to end, and flush 
                     28:                         * the block to disk
                     29:                         */
                     30:                        if ((fptr->c_flag&BINARY) == 0) {
                     31:                                /*
                     32:                                 * add cp/m eof mark (ctrl-z) if the file
                     33:                                 * is not a binary file
                     34:                                 */
                     35:                                *(fptr->c_buf++) = '\032';
                     36:                                fptr->c_cnt--;
                     37:                        }
                     38:                        while (fptr->c_cnt-- > 0)
                     39:                                *(fptr->c_buf++) = '\0';
                     40:                }
                     41:                if (putblock(0xff&(int)fptr->c_dirp->pointers[fptr->c_blk],
                     42:                                                fptr->c_base, scts) == EOF)
                     43:                        return (EOF);
                     44:        }
                     45:        savedir();
                     46: 
                     47:        /* deallocate buffer memory and file descriptor */
                     48:        fptr->c_flag = 0;
                     49:        free(fptr->c_base);
                     50:        return (NULL);
                     51: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.