BSD 4 release
[unix-history] / usr / src / cmd / sdb / access.c
index 2f74c4c..7764f69 100644 (file)
@@ -1,3 +1,4 @@
+static char sccsid[] = "@(#)access.c 4.1 10/9/80";
 #
 /*
  *
 #
 /*
  *
@@ -27,12 +28,12 @@ int dmask[5] = {0, 0xff, 0xffff, 0xffffff, 0xffffffff};
 
 /* get data at loc using descriptor format d */
 long
 
 /* get data at loc using descriptor format d */
 long
-getval(loc, d)
+getval(loc, d, space)
 ADDR loc;
 char d; {
        register int val;
        
 ADDR loc;
 char d; {
        register int val;
        
-       val = get(loc, DSP);
+       val = get(loc, space);
        val &= dmask[dtol(d)];
        return(val);
 }
        val &= dmask[dtol(d)];
        return(val);
 }
@@ -75,6 +76,9 @@ L_INT adr;
 {
        INT     pmode,rd,file;
        ADDR    w;
 {
        INT     pmode,rd,file;
        ADDR    w;
+       if (debug) 
+               printf("access(mode=%d,adr=%d,space=%d,value=%d) with pid %d\n",
+                       mode, adr, space, value, pid);
        rd = mode==RD;
 
        IF space == NSP THEN return(0); FI
        rd = mode==RD;
 
        IF space == NSP THEN return(0); FI
@@ -86,6 +90,9 @@ L_INT adr;
 #endif
             pmode = (space&DSP?(rd?RDUSER:WDUSER):(rd?RIUSER:WIUSER));
             w = ptrace(pmode, pid, adr, value);
 #endif
             pmode = (space&DSP?(rd?RDUSER:WDUSER):(rd?RIUSER:WIUSER));
             w = ptrace(pmode, pid, adr, value);
+            if (debug)
+               printf("ptrace(%d,%d,%d,%d) = %d with error=%d\n",
+                       pmode, pid, adr, value, w, errno);
 #ifndef vax
             IF adr&01
             THEN w1 = ptrace(pmode, pid, shorten(adr+1), value);
 #ifndef vax
             IF adr&01
             THEN w1 = ptrace(pmode, pid, shorten(adr+1), value);
@@ -102,10 +109,9 @@ L_INT      adr;
        THEN return(0);
        FI
        file=(space&DSP?datmap.ufd:txtmap.ufd);
        THEN return(0);
        FI
        file=(space&DSP?datmap.ufd:txtmap.ufd);
-       IF longseek(file,adr)==0 ORF
-          (rd ? read(file,&w,sizeof(w)) : write(file,&value,sizeof(w))) < 1
-       THEN    errflg=(space&DSP?BADDAT:BADTXT);
-       FI
+       if (longseek(file,adr)==0 ||
+          (rd ? read(file,&w,sizeof(w)) : write(file,&value,sizeof(w))) < 1)
+               errflg=(space&DSP?BADDAT:BADTXT);
        return(w);
 
 }
        return(w);
 
 }
@@ -117,10 +123,11 @@ chkmap(adr,space)
        REG MAPPTR amap;
        amap=((space&DSP?&datmap:&txtmap));
        IF space&STAR ORF !within(*adr,amap->b1,amap->e1)
        REG MAPPTR amap;
        amap=((space&DSP?&datmap:&txtmap));
        IF space&STAR ORF !within(*adr,amap->b1,amap->e1)
-       THEN IF within(*adr,amap->b2,amap->e2)
-            THEN *adr += (amap->f2)-(amap->b2);
-            ELSE errflg=(space&DSP?BADDAT:BADTXT); return(0);
-            FI
+       THEN if (within(*adr,amap->b2,amap->e2))
+               *adr += (amap->f2)-(amap->b2);
+            else {
+               errflg=(space&DSP?BADDAT:BADTXT); return(0);
+            }
        ELSE *adr += (amap->f1)-(amap->b1);
        FI
        return(1);
        ELSE *adr += (amap->f1)-(amap->b1);
        FI
        return(1);
@@ -131,3 +138,24 @@ POS        adr, lbd, ubd;
 {
        return(adr>=lbd && adr<ubd);
 }
 {
        return(adr>=lbd && adr<ubd);
 }
+
+/* ------------ */
+POS    chkget(n, space)
+L_INT          n;
+{
+#ifndef vax
+       REG INT         w;
+#else
+       REG L_INT       w;
+#endif
+
+       w = get(n, space);
+       chkerr();
+       return(w);
+}
+
+POS bchkget(n, space) 
+L_INT  n;
+{
+       return(chkget(n, space) & LOBYTE);
+}