Annotation of researchv9/jerq/sgs/libsdp/readpage.c, revision 1.1.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.