Annotation of researchv9/jerq/sgs/libsdp/readpage.c, revision 1.1

1.1     ! root        1: static char ID[] = "@(#) readpage.c: 1.1 3/16/82";
        !             2: #include <stdio.h>
        !             3: #include "sdp.h"
        !             4: #include "define3.h"
        !             5: 
        !             6: #ifdef SHORT
        !             7: #define RP01   "RP01 "
        !             8: #define RP02   "RP02 "
        !             9: #define RP03   "RP03 "
        !            10: #define RP04   "RP04 "
        !            11: #define RP05   "RP05 "
        !            12: #define RP06   "RP06 "
        !            13: #define RP07   "RP07 "
        !            14: #else
        !            15: #define RP01   "RP01 -- attempt to read id beyond maximum allottment\n%lo\t%lo\n",id,sp->maxpage
        !            16: #define RP02   "RP02 -- attempt to read beyond file configuration\n%d\t%d\n",i,sp->numbfile
        !            17: #define RP03   "RP03 -- fail to build file name\n%s%d\n",sp->head_name,i
        !            18: #define RP04   "RP04 -- error return from open\n%s\n",file_name
        !            19: #define RP05   "RP05 -- fail to seek\n%s\n",file_name
        !            20: #define RP06   "RP06 -- fail to read\n%s\n",file_name
        !            21: #define RP07   "RP07 -- unexpected number of bytes read\n%d\n",byterd
        !            22: #endif
        !            23: 
        !            24: extern struct LIBFILE *Glib_file ;
        !            25: extern char *BUILDNAME() ;
        !            26: extern FATAL() ;
        !            27: 
        !            28: int                                    /* SUCCESS or ERROR */
        !            29: readpage(sp,id,frame)
        !            30: register struct SPACE  *sp ;
        !            31: register ITEMID                id ;
        !            32: int                    frame;
        !            33: {
        !            34:        struct MANAGER          *manager ;
        !            35:        register int            i ;
        !            36:        register long           floor ;
        !            37:        register int            byterd ;
        !            38:        long                    offset ;
        !            39:        char                    *file_name ;
        !            40: 
        !            41:        if(id >= sp->maxpage)
        !            42:                ERR_RET(RP01,ERROR)
        !            43: 
        !            44:        id -=  id % (sp->environ)->frame_size ;
        !            45: 
        !            46:        for(floor=i=0; id >= (floor += sp->fileinfo[i].leng) ;)
        !            47:                if(++i == sp->numbfile)
        !            48:                        ERR_RET(RP02,ERROR)
        !            49:        offset = id - (floor - sp->fileinfo[i].leng);
        !            50: 
        !            51:        switch(sp->fileinfo[i].desc)
        !            52:        {
        !            53:                case NOTMADE:
        !            54:                        return(SUCCESS) ;
        !            55: 
        !            56:                case CLOSED:
        !            57:                        if( (file_name = MBUILDNAME(sp->head_name,i)) == NULL )
        !            58:                                ERR_RET(RP03,ERROR)
        !            59:                        if( (sp->fileinfo[i].desc = MOPEN(file_name,sp->perms)) == ERROR )
        !            60:                                ERR_RET(RP04,ERROR)
        !            61:                        FREE(file_name) ;
        !            62:                        break ;
        !            63: 
        !            64:                default:
        !            65:                        break ;
        !            66:        }
        !            67: 
        !            68:        if(MSEEK(sp->fileinfo[i].desc,offset) == ERROR)
        !            69:                ERR_RET(RP05,ERROR)
        !            70: 
        !            71:        manager = (sp->environ)->manp ;
        !            72:        if( (byterd = MREAD(sp->fileinfo[i].desc,manager[frame].frame_pntr,(sp->environ)->frame_size)) == ERROR )
        !            73:                ERR_RET(RP06,ERROR)
        !            74: 
        !            75:        if( (byterd > sp->environ->frame_size) || (byterd % sp->page_size != 0) )
        !            76:                ERR_RET(RP07,ERROR)
        !            77: 
        !            78:        (sp->environ)->stats.faults++ ;
        !            79:        return(SUCCESS) ;
        !            80: }

unix.superglobalmegacorp.com

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