Make sexpSimpleString and sexpObject opaque and abstract.
authorjbj <devnull@localhost>
Fri, 28 May 2004 01:18:36 +0000 (01:18 +0000)
committerjbj <devnull@localhost>
Fri, 28 May 2004 01:18:36 +0000 (01:18 +0000)
CVS patchset: 7264
CVS date: 2004/05/28 01:18:36

rpmio/sexp/sexp-basic.c
rpmio/sexp/sexp-input.c
rpmio/sexp/sexp-main.c
rpmio/sexp/sexp-output.c
rpmio/sexp/sexp.h

index 58bfc05..c4d3003 100644 (file)
@@ -11,6 +11,8 @@
 #include "sexp.h"
 
 /*@access sexpIter @*/
+/*@access sexpSimpleString @*/
+/*@access sexpObject @*/
 
 /******************/
 /* ERROR MESSAGES */
@@ -66,10 +68,10 @@ char *sexpAlloc(int n)
  * Creates and initializes new sexpSimpleString object.
  * Allocates 16-character buffer to hold string.
  */
-sexpSimpleString *newSimpleString(void)
+sexpSimpleString newSimpleString(void)
 {
-  sexpSimpleString *ss;
-  ss = (sexpSimpleString *) sexpAlloc(sizeof(*ss));
+  sexpSimpleString ss;
+  ss = (sexpSimpleString) sexpAlloc(sizeof(*ss));
   ss->length = 0;
   ss->allocatedLength = 16;
   ss->string = (octet *)sexpAlloc(16);
@@ -79,20 +81,20 @@ sexpSimpleString *newSimpleString(void)
 /* simpleStringLength(ss)
  * returns length of simple string
  */
-long int simpleStringLength(sexpSimpleString *ss)
+long int simpleStringLength(sexpSimpleString ss)
 { return ss->length; }
 
 /* simpleStringString(ss)
  * returns pointer to character array of simple string
  */
-octet *simpleStringString(sexpSimpleString *ss)
+octet *simpleStringString(sexpSimpleString ss)
 { return ss->string; }
 
 /* reallocateSimpleString(ss)
  * Changes space allocated to ss.
  * Space allocated is set to roughly 3/2 the current string length, plus 16.
  */
-sexpSimpleString *reallocateSimpleString(sexpSimpleString *ss)
+sexpSimpleString reallocateSimpleString(sexpSimpleString ss)
 {
   int newsize, i;
   octet *newstring;
@@ -120,7 +122,7 @@ sexpSimpleString *reallocateSimpleString(sexpSimpleString *ss)
  * Appends the character c to the end of simple string ss.
  * Reallocates storage assigned to s if necessary to make room for c.
  */
-void appendCharToSimpleString(int c, sexpSimpleString *ss)
+void appendCharToSimpleString(int c, sexpSimpleString ss)
 {
   if (ss==NULL) {
     ss = newSimpleString();
@@ -157,25 +159,25 @@ sexpString *newSexpString(void)
 /* sexpStringPresentationHint()
  * returns presentation hint field of the string
  */
-sexpSimpleString *sexpStringPresentationHint(sexpString *s)
+sexpSimpleString sexpStringPresentationHint(sexpString *s)
 { return s->presentationHint; }
 
 /* setSexpStringPresentationHint()
  * assigns the presentation hint field of the string
  */
-void setSexpStringPresentationHint(sexpString *s, sexpSimpleString *ss)
+void setSexpStringPresentationHint(sexpString *s, sexpSimpleString ss)
 { s->presentationHint = ss; }
 
 /* setSexpStringString()
  * assigns the string field of the string
  */
-void setSexpStringString(sexpString *s, sexpSimpleString *ss)
+void setSexpStringString(sexpString *s, sexpSimpleString ss)
 { s->string = ss; }
 
 /* sexpStringString()
  * returns the string field of the string
  */
-sexpSimpleString *sexpStringString(sexpString *s)
+sexpSimpleString sexpStringString(sexpString *s)
 { return s->string; }
 
 /* closeSexpString()
@@ -206,7 +208,7 @@ sexpList *newSexpList(void)
 /* sexpAddSexpListObject()
  * add object to end of list
  */
-void sexpAddSexpListObject(sexpList *list, sexpObject *object)
+void sexpAddSexpListObject(sexpList *list, sexpObject object)
 {
   if (list->first == NULL)
     list->first = object;
@@ -253,7 +255,7 @@ sexpIter sexpIterNext(sexpIter iter)
 /* sexpIterObject ()
  * return object corresponding to current state of iterator
  */
-sexpObject *sexpIterObject(sexpIter iter)
+sexpObject sexpIterObject(sexpIter iter)
 { if (iter == NULL) return NULL;
   return ((sexpList *)iter)->first;
 }
@@ -262,12 +264,12 @@ sexpObject *sexpIterObject(sexpIter iter)
 /* SEXP OBJECT MANIPULATION */
 /****************************/
 
-int isObjectString(sexpObject *object)
+int isObjectString(sexpObject object)
 { if (((sexpString *)object)->type == SEXP_STRING) return TRUE;
   else                                             return FALSE;
 }
 
-int isObjectList(sexpObject *object)
+int isObjectList(sexpObject object)
 { if (((sexpList *)object)->type == SEXP_LIST) return TRUE;
   else                                         return FALSE;
 }
index 4f81760..d59715b 100644 (file)
@@ -8,6 +8,7 @@
 #include "sexp.h"
 
 /*@access sexpInputStream @*/
+/*@access sexpObject @*/
 
 /**************************************/
 /* CHARACTER ROUTINES AND DEFINITIONS */
@@ -237,7 +238,7 @@ void skipChar(sexpInputStream is, int c)
 /* scanToken(is,ss)
  * scan one or more characters into simple string ss as a token.
  */
-void scanToken(sexpInputStream is, sexpSimpleString *ss)
+void scanToken(sexpInputStream is, sexpSimpleString ss)
 {
   skipWhiteSpace(is);
   while (isTokenChar(is->nextChar))
@@ -252,9 +253,9 @@ void scanToken(sexpInputStream is, sexpSimpleString *ss)
  * scan one or more characters (until EOF reached)
  * return an object that is just that string
  */
-sexpObject *scanToEOF(sexpInputStream is)
+sexpObject scanToEOF(sexpInputStream is)
 {
-  sexpSimpleString *ss = newSimpleString();
+  sexpSimpleString ss = newSimpleString();
   sexpString *s = newSexpString();
   setSexpStringString(s,ss);
   skipWhiteSpace(is);
@@ -263,7 +264,7 @@ sexpObject *scanToEOF(sexpInputStream is)
       appendCharToSimpleString(is->nextChar,ss);
       is->getChar(is);
     }
-  return (sexpObject *)s;
+  return (sexpObject)s;
 }
 
 /* scanDecimal(is)
@@ -284,7 +285,7 @@ unsigned long int scanDecimal(sexpInputStream is)
 /* scanVerbatimString(is,ss,length)
  * Reads verbatim string of given length into simple string ss.
  */
-void scanVerbatimString(sexpInputStream is, sexpSimpleString *ss, long int length)
+void scanVerbatimString(sexpInputStream is, sexpSimpleString ss, long int length)
 {
   long int i = 0L;
   skipWhiteSpace(is);
@@ -303,7 +304,7 @@ void scanVerbatimString(sexpInputStream is, sexpSimpleString *ss, long int lengt
  * Handles ordinary C escapes.
  * If of indefinite length, length is -1.
  */
-void scanQuotedString(sexpInputStream is, sexpSimpleString *ss, long int length)
+void scanQuotedString(sexpInputStream is, sexpSimpleString ss, long int length)
 {
   int c;
   skipChar(is,'"');
@@ -388,7 +389,7 @@ void scanQuotedString(sexpInputStream is, sexpSimpleString *ss, long int length)
  * Reads hexadecimal string into simple string ss.
  * String is of given length result, or length = -1 if indefinite length.
  */
-void scanHexString(sexpInputStream is, sexpSimpleString *ss, long int length)
+void scanHexString(sexpInputStream is, sexpSimpleString ss, long int length)
 { changeInputByteSize(is,4);
   skipChar(is,'#');
   while (is->nextChar != EOF && (is->nextChar != '#' || is->byteSize==4))
@@ -408,7 +409,7 @@ void scanHexString(sexpInputStream is, sexpSimpleString *ss, long int length)
  * Reads base64 string into simple string ss.
  * String is of given length result, or length = -1 if indefinite length.
  */
-void scanBase64String(sexpInputStream is, sexpSimpleString *ss, long int length)
+void scanBase64String(sexpInputStream is, sexpSimpleString ss, long int length)
 { changeInputByteSize(is,6);
   skipChar(is,'|');
   while (is->nextChar != EOF && (is->nextChar != '|' || is->byteSize == 6))
@@ -429,10 +430,10 @@ void scanBase64String(sexpInputStream is, sexpSimpleString *ss, long int length)
  * Determines type of simple string from the initial character, and
  * dispatches to appropriate routine based on that.
  */
-sexpSimpleString *scanSimpleString(sexpInputStream is)
+sexpSimpleString scanSimpleString(sexpInputStream is)
 {
   long int length;
-  sexpSimpleString *ss;
+  sexpSimpleString ss;
   ss = newSimpleString();
   skipWhiteSpace(is);
   /* Note that it is important in the following code to test for token-ness
@@ -467,7 +468,7 @@ sexpSimpleString *scanSimpleString(sexpInputStream is)
 sexpString *scanString(sexpInputStream is)
 {
   sexpString *s;
-  sexpSimpleString *ss;
+  sexpSimpleString ss;
   s = newSexpString();
   if (is->nextChar == '[')
     /* scan presentation hint */
@@ -489,7 +490,7 @@ sexpString *scanString(sexpInputStream is)
  */
 sexpList *scanList(sexpInputStream is)
 { sexpList *list;
-  sexpObject *object;
+  sexpObject object;
   skipChar(is,'(');
   skipWhiteSpace(is);
   list = newSexpList();
@@ -519,9 +520,9 @@ sexpList *scanList(sexpInputStream is)
 /* scanObject(is)
  * Reads and returns a sexpObject from the given input stream.
  */
-sexpObject *scanObject(sexpInputStream is)
+sexpObject scanObject(sexpInputStream is)
 {
-  sexpObject *object;
+  sexpObject object;
   skipWhiteSpace(is);
   if (is->nextChar == '{')
     {
@@ -533,9 +534,9 @@ sexpObject *scanObject(sexpInputStream is)
     }
   else
     { if (is->nextChar == '(')
-       object = (sexpObject *)scanList(is);
+       object = (sexpObject)scanList(is);
       else
-       object = (sexpObject *)scanString(is);
+       object = (sexpObject)scanString(is);
       return object;
     }
 }
index 0a779f8..2b893e2 100644 (file)
@@ -104,7 +104,7 @@ int main(int argc, char **argv)
 {
     poptContext optCon;
     int rc;
-    sexpObject *object;
+    sexpObject object;
     sexpInputStream is;
     sexpOutputStream os;
 
index dc77f9e..291f92c 100644 (file)
@@ -8,6 +8,8 @@
 #include "sexp.h"
 
 /*@access sexpOutputStream @*/
+/*@access sexpSimpleString @*/
+/*@access sexpObject @*/
 
 /*@unchecked@*/ /*@observer@*/
 static char *hexDigits = "0123456789ABCDEF";
@@ -163,7 +165,7 @@ void printDecimal(sexpOutputStream os, long int n)
 /* canonicalPrintVerbatimSimpleString(os,ss)
  * Print out simple string ss on output stream os as verbatim string.
  */
-void canonicalPrintVerbatimSimpleString(sexpOutputStream os, sexpSimpleString *ss)
+void canonicalPrintVerbatimSimpleString(sexpOutputStream os, sexpSimpleString ss)
 {
   long int len = simpleStringLength(ss);
   long int i;
@@ -182,18 +184,20 @@ void canonicalPrintVerbatimSimpleString(sexpOutputStream os, sexpSimpleString *s
  * Prints out sexp string s onto output stream os
  */
 void canonicalPrintString(sexpOutputStream os, sexpString *s)
-{ sexpSimpleString *ph, *ss;
-  ph = sexpStringPresentationHint(s);
-  if (ph != NULL) {
-    varPutChar(os,'[');
-    canonicalPrintVerbatimSimpleString(os,ph);
-    varPutChar(os,']');
-  }
-  ss = sexpStringString(s);
-  if (ss == NULL)
-    ErrorMessage(ERROR,"NULL string can't be printed.");
-  else
-    canonicalPrintVerbatimSimpleString(os,ss);
+{
+  sexpSimpleString ph = sexpStringPresentationHint(s);
+  sexpSimpleString ss;
+
+    if (ph != NULL) {
+       varPutChar(os,'[');
+       canonicalPrintVerbatimSimpleString(os,ph);
+       varPutChar(os,']');
+    }
+    ss = sexpStringString(s);
+    if (ss == NULL)
+       ErrorMessage(ERROR,"NULL string can't be printed.");
+    else
+       canonicalPrintVerbatimSimpleString(os,ss);
 }
 
 /* canonicalPrintList(os,list)
@@ -201,7 +205,7 @@ void canonicalPrintString(sexpOutputStream os, sexpString *s)
  */
 void canonicalPrintList(sexpOutputStream os, sexpList *list)
 { sexpIter iter;
-  sexpObject *object;
+  sexpObject object;
   varPutChar(os,'(');
   iter = sexpListIter(list);
   while (iter != NULL) {
@@ -217,7 +221,7 @@ void canonicalPrintList(sexpOutputStream os, sexpList *list)
  * Prints out object on output stream os
  * Note that this uses the common "type" field of lists and strings.
  */
-void canonicalPrintObject(sexpOutputStream os, sexpObject *object)
+void canonicalPrintObject(sexpOutputStream os, sexpObject object)
 {
   if (isObjectString(object))
     canonicalPrintString(os,(sexpString *)object);
@@ -231,7 +235,7 @@ void canonicalPrintObject(sexpOutputStream os, sexpObject *object)
 /* *************/
 /* Same as canonical, except all characters get put out as base 64 ones */
 
-void base64PrintWholeObject(sexpOutputStream os, sexpObject *object)
+void base64PrintWholeObject(sexpOutputStream os, sexpObject object)
 {
   changeOutputByteSize(os,8,BASE64);
   varPutChar(os,'{');
@@ -252,7 +256,7 @@ void base64PrintWholeObject(sexpOutputStream os, sexpObject *object)
  * Returns TRUE if simple string ss can be printed as a token.
  * Doesn't begin with a digit, and all characters are tokenchars.
  */
-int canPrintAsToken(sexpOutputStream os, sexpSimpleString *ss)
+int canPrintAsToken(sexpOutputStream os, sexpSimpleString ss)
 {
   int i;
   octet *c;
@@ -273,7 +277,7 @@ int canPrintAsToken(sexpOutputStream os, sexpSimpleString *ss)
  * Prints out simple string ss as a token (assumes that this is OK).
  * May run over max-column, but there is no fragmentation allowed...
  */
-void advancedPrintTokenSimpleString(sexpOutputStream os, sexpSimpleString *ss)
+void advancedPrintTokenSimpleString(sexpOutputStream os, sexpSimpleString ss)
 { int i;
   long int len;
   octet *c;
@@ -288,7 +292,7 @@ void advancedPrintTokenSimpleString(sexpOutputStream os, sexpSimpleString *ss)
 /* advancedLengthSimpleStringToken(ss)
  * Returns length for printing simple string ss as a token
  */
-int advancedLengthSimpleStringToken(sexpSimpleString *ss)
+int advancedLengthSimpleStringToken(sexpSimpleString ss)
 { return simpleStringLength(ss); }
 
 
@@ -298,7 +302,7 @@ int advancedLengthSimpleStringToken(sexpSimpleString *ss)
  * Print out simple string ss on output stream os as verbatim string.
  * Again, can't fragment string, so max-column is just a suggestion...
  */
-void advancedPrintVerbatimSimpleString(sexpOutputStream os, sexpSimpleString *ss)
+void advancedPrintVerbatimSimpleString(sexpOutputStream os, sexpSimpleString ss)
 {
   long int len = simpleStringLength(ss);
   long int i;
@@ -316,7 +320,7 @@ void advancedPrintVerbatimSimpleString(sexpOutputStream os, sexpSimpleString *ss
 /* advancedLengthSimpleStringVerbatim(ss)
  * Returns length for printing simple string ss in verbatim mode
  */
-int advancedLengthSimpleStringVerbatim(sexpSimpleString *ss)
+int advancedLengthSimpleStringVerbatim(sexpSimpleString ss)
 { long int len = simpleStringLength(ss);
   int i = 1;
   while (len > 9L) { i++; len = len / 10; }
@@ -328,7 +332,7 @@ int advancedLengthSimpleStringVerbatim(sexpSimpleString *ss)
 /* advancedPrintBase64SimpleString(os,ss)
  * Prints out simple string ss as a base64 value.
  */
-void advancedPrintBase64SimpleString(sexpOutputStream os, sexpSimpleString *ss)
+void advancedPrintBase64SimpleString(sexpOutputStream os, sexpSimpleString ss)
 {
   long int i,len;
   octet *c = simpleStringString(ss);
@@ -349,7 +353,7 @@ void advancedPrintBase64SimpleString(sexpOutputStream os, sexpSimpleString *ss)
 /* advancedPrintHexSimpleString(os,ss)
  * Prints out simple string ss as a hexadecimal value.
  */
-void advancedPrintHexSimpleString(sexpOutputStream os, sexpSimpleString *ss)
+void advancedPrintHexSimpleString(sexpOutputStream os, sexpSimpleString ss)
 {
   long int i,len;
   octet *c = simpleStringString(ss);
@@ -368,7 +372,7 @@ void advancedPrintHexSimpleString(sexpOutputStream os, sexpSimpleString *ss)
 /* advancedLengthSimpleStringHexadecimal(ss)
  * Returns length for printing simple string ss in hexadecimal mode
  */
-int advancedLengthSimpleStringHexadecimal(sexpSimpleString *ss)
+int advancedLengthSimpleStringHexadecimal(sexpSimpleString ss)
 { long int len = simpleStringLength(ss);
   return (1+2*len+1);
 }
@@ -379,7 +383,7 @@ int advancedLengthSimpleStringHexadecimal(sexpSimpleString *ss)
  * Returns TRUE if simple string ss can be printed as a quoted string.
  * Must have only tokenchars and blanks.
  */
-int canPrintAsQuotedString(sexpSimpleString *ss)
+int canPrintAsQuotedString(sexpSimpleString ss)
 {
   long int i, len;
   octet *c = simpleStringString(ss);
@@ -398,7 +402,7 @@ int canPrintAsQuotedString(sexpSimpleString *ss)
  *  so no escape sequences need to be generated.
  * May run over max-column, but there is no fragmentation allowed...
  */
-void advancedPrintQuotedStringSimpleString(sexpOutputStream os, sexpSimpleString *ss)
+void advancedPrintQuotedStringSimpleString(sexpOutputStream os, sexpSimpleString ss)
 { long int i;
   long int len = simpleStringLength(ss);
   octet *c = simpleStringString(ss);
@@ -418,7 +422,7 @@ void advancedPrintQuotedStringSimpleString(sexpOutputStream os, sexpSimpleString
 /* advancedLengthSimpleStringQuotedString(ss)
  * Returns length for printing simple string ss in quoted-string mode
  */
-int advancedLengthSimpleStringQuotedString(sexpSimpleString *ss)
+int advancedLengthSimpleStringQuotedString(sexpSimpleString ss)
 { long int len = simpleStringLength(ss);
   return (1+len+1);
 }
@@ -428,7 +432,7 @@ int advancedLengthSimpleStringQuotedString(sexpSimpleString *ss)
 /* advancedPrintSimpleString(os,ss)
  * Prints out simple string ss onto output stream ss
  */
-void advancedPrintSimpleString(sexpOutputStream os, sexpSimpleString *ss)
+void advancedPrintSimpleString(sexpOutputStream os, sexpSimpleString ss)
 { long int len = simpleStringLength(ss);
   if (canPrintAsToken(os,ss))
     advancedPrintTokenSimpleString(os,ss);
@@ -447,29 +451,30 @@ void advancedPrintSimpleString(sexpOutputStream os, sexpSimpleString *ss)
  */
 void advancedPrintString(sexpOutputStream os, sexpString *s)
 {
-  sexpSimpleString *ph = sexpStringPresentationHint(s);
-  sexpSimpleString *ss = sexpStringString(s);
-  if (ph != NULL)
-    { os->putChar(os,'[');
-      advancedPrintSimpleString(os,ph);
-      os->putChar(os,']');
+    sexpSimpleString ph = sexpStringPresentationHint(s);
+    sexpSimpleString ss = sexpStringString(s);
+
+    if (ph != NULL) {
+       os->putChar(os,'[');
+       advancedPrintSimpleString(os, ph);
+       os->putChar(os,']');
     }
-  if (ss == NULL)
-    ErrorMessage(ERROR,"NULL string can't be printed.");
-  else
-    advancedPrintSimpleString(os,ss);
+    if (ss == NULL)
+       ErrorMessage(ERROR,"NULL string can't be printed.");
+    else
+       advancedPrintSimpleString(os, ss);
 }
 
 /* advancedLengthSimpleStringBase64(ss)
  * Returns length for printing simple string ss as a base64 string
  */
-int advancedLengthSimpleStringBase64(sexpSimpleString *ss)
+int advancedLengthSimpleStringBase64(sexpSimpleString ss)
 { return (2+4*((simpleStringLength(ss)+2)/3)); }
 
 /* advancedLengthSimpleString(os,ss)
  * Returns length of printed image of s
  */
-int advancedLengthSimpleString(sexpOutputStream os, sexpSimpleString *ss)
+int advancedLengthSimpleString(sexpOutputStream os, sexpSimpleString ss)
 { long int len = simpleStringLength(ss);
   if (canPrintAsToken(os,ss))
     return advancedLengthSimpleStringToken(ss);
@@ -487,14 +492,16 @@ int advancedLengthSimpleString(sexpOutputStream os, sexpSimpleString *ss)
  * Returns length of printed image of string s
  */
 int advancedLengthString(sexpOutputStream os, sexpString *s)
-{ int len = 0;
-  sexpSimpleString *ph = sexpStringPresentationHint(s);
-  sexpSimpleString *ss = sexpStringString(s);
-  if (ph != NULL)
-    len += 2+advancedLengthSimpleString(os,ph);
-  if (ss != NULL)
-    len += advancedLengthSimpleString(os,ss);
-  return len;
+{
+    sexpSimpleString ph = sexpStringPresentationHint(s);
+    sexpSimpleString ss = sexpStringString(s);
+    int len = 0;
+
+    if (ph != NULL)
+       len += 2+advancedLengthSimpleString(os,ph);
+    if (ss != NULL)
+       len += advancedLengthSimpleString(os,ss);
+    return len;
 }
 
 /* advancedLengthList(os,list)
@@ -503,7 +510,7 @@ int advancedLengthString(sexpOutputStream os, sexpString *s)
 int advancedLengthList(sexpOutputStream os, sexpList *list)
 { int len = 1;                       /* for left paren */
   sexpIter iter;
-  sexpObject *object;
+  sexpObject object;
   iter = sexpListIter(list);
   while (iter != NULL)
     { object = sexpIterObject(iter);
@@ -531,7 +538,7 @@ void advancedPrintList(sexpOutputStream os, sexpList *list)
 { int vertical = FALSE;
   int firstelement = TRUE;
   sexpIter iter;
-  sexpObject *object;
+  sexpObject object;
   os->putChar(os,'(');
   os->indent++;
   if (advancedLengthList(os,list) > os->maxcolumn - os->column)
@@ -558,7 +565,7 @@ void advancedPrintList(sexpOutputStream os, sexpList *list)
 /* advancedPrintObject(os,object)
  * Prints out object on output stream os
  */
-void advancedPrintObject(sexpOutputStream os, sexpObject *object)
+void advancedPrintObject(sexpOutputStream os, sexpObject object)
 {
   if (os->maxcolumn>0 && os->column>os->maxcolumn-4)
     os->newLine(os,ADVANCED);
index cd2cdb7..5deacbe 100644 (file)
@@ -25,47 +25,50 @@ typedef unsigned char octet;
 #define SEXP_LIST   2
 
 /* sexpSimpleString */
-typedef struct sexp_simplestring { 
+typedef /*@abstract@*/ struct sexp_simplestring { 
   long int length;
   long int allocatedLength;
 /*@null@*/
   octet *string;
-} sexpSimpleString;
+} sexpSimpleString;
 
 /* sexpString */
 typedef struct sexp_string {
   int type;
 /*@null@*/
-  sexpSimpleString *presentationHint;
+  sexpSimpleString presentationHint;
 /*@null@*/
-  sexpSimpleString *string;
+  sexpSimpleString string;
 } sexpString;
 
+/* sexpObject */
+typedef /*@abstract@*/ union sexpObject_u * sexpObject;
+
 /* sexpList */
 /* If first is NULL, then rest must also be NULL; this is empty list */
 typedef struct sexp_list {  
   char type;
 /*@null@*/
-  union sexp_object *first;
+  sexpObject first;
 /*@null@*/
   struct sexp_list  *rest;
 } sexpList;
 
 /* sexpObject */
 /* so we can have a pointer to something of either type */
-typedef union sexp_object {
+union sexpObject_u {
 /*@unused@*/
   sexpString string;
 /*@unused@*/
   sexpList list;
-} sexpObject;
+};
 
 /* sexpIter */
 /* an "iterator" for going over lists */
 /* In this implementation, it is the same as a list */
 typedef /*@abstract@*/ sexpList * sexpIter;
 
-typedef /*@abstract@*/ struct sexp_inputstream {
+typedef /*@abstract@*/ struct sexpInputStream_s {
   int nextChar;        /* character currently being scanned */
   int byteSize;        /* 4 or 6 or 8 == currently scanning mode */
   int bits;            /* Bits waiting to be used */
@@ -76,7 +79,7 @@ typedef /*@abstract@*/ struct sexp_inputstream {
   FILE *inputFile;     /* where to get input, if not stdin */
 } * sexpInputStream;
 
-typedef /*@abstract@*/ struct sexp_outputstream {
+typedef /*@abstract@*/ struct sexpOutputStream_s {
   long int column;          /* column where next character will go */
   long int maxcolumn;       /* max usable column, or -1 if no maximum */
   long int indent;          /* current indentation level (starts at 0) */
@@ -104,40 +107,40 @@ void initializeMemory(void)
 char *sexpAlloc(int n)
        /*@globals fileSystem @*/
        /*@modifies fileSystem @*/;
-sexpSimpleString *newSimpleString(void)
+sexpSimpleString newSimpleString(void)
        /*@globals fileSystem @*/
        /*@modifies fileSystem @*/;
-long int simpleStringLength(sexpSimpleString *ss)
+long int simpleStringLength(sexpSimpleString ss)
        /*@*/;
-/*@null@*/
-octet *simpleStringString(sexpSimpleString *ss)
+/*@exposed@*/ /*@null@*/
+octet *simpleStringString(sexpSimpleString ss)
        /*@*/;
 /*@null@*/
-sexpSimpleString *reallocateSimpleString(sexpSimpleString *ss)
+sexpSimpleString reallocateSimpleString(sexpSimpleString ss)
        /*@globals fileSystem @*/
        /*@modifies ss, fileSystem @*/;
-void appendCharToSimpleString(int c, sexpSimpleString *ss)
+void appendCharToSimpleString(int c, sexpSimpleString ss)
        /*@globals fileSystem @*/
        /*@modifies ss, fileSystem @*/;
 sexpString *newSexpString(void)
        /*@globals fileSystem @*/
        /*@modifies fileSystem @*/;
 /*@null@*/
-sexpSimpleString *sexpStringPresentationHint(sexpString *s)
+sexpSimpleString sexpStringPresentationHint(sexpString *s)
        /*@*/;
-void setSexpStringPresentationHint(sexpString *s, sexpSimpleString *ss)
+void setSexpStringPresentationHint(sexpString *s, sexpSimpleString ss)
        /*@modifies s @*/;
-void setSexpStringString(sexpString *s, sexpSimpleString *ss)
+void setSexpStringString(sexpString *s, sexpSimpleString ss)
        /*@modifies s @*/;
 /*@null@*/
-sexpSimpleString *sexpStringString(sexpString *s)
+sexpSimpleString sexpStringString(sexpString *s)
        /*@*/;
 void closeSexpString(sexpString *s)
        /*@*/;
 sexpList *newSexpList(void)
        /*@globals fileSystem @*/
        /*@modifies fileSystem @*/;
-void sexpAddSexpListObject(sexpList *list, sexpObject *object)
+void sexpAddSexpListObject(sexpList *list, sexpObject object)
        /*@globals fileSystem @*/
        /*@modifies list, fileSystem @*/;
 void closeSexpList(sexpList *list)
@@ -149,11 +152,11 @@ sexpIter sexpListIter(sexpList *list)
 sexpIter sexpIterNext(sexpIter iter)
        /*@*/;
 /*@exposed@*/ /*@observer@*/ /*@null@*/
-sexpObject *sexpIterObject(sexpIter iter)
+sexpObject sexpIterObject(sexpIter iter)
        /*@*/;
-int isObjectString(sexpObject *object)
+int isObjectString(sexpObject object)
        /*@*/;
-int isObjectList(sexpObject *object)
+int isObjectList(sexpObject object)
        /*@*/;
 
 /* sexp-input */
@@ -186,28 +189,28 @@ void skipWhiteSpace(sexpInputStream is)
 void skipChar(sexpInputStream is, int c)
        /*@globals fileSystem @*/
        /*@modifies is, fileSystem @*/;
-void scanToken(sexpInputStream is, sexpSimpleString *ss)
+void scanToken(sexpInputStream is, sexpSimpleString ss)
        /*@globals fileSystem @*/
        /*@modifies is, ss, fileSystem @*/;
-sexpObject *scanToEOF(sexpInputStream is)
+sexpObject scanToEOF(sexpInputStream is)
        /*@globals fileSystem @*/
        /*@modifies is, fileSystem @*/;
 unsigned long int scanDecimal(sexpInputStream is)
        /*@globals fileSystem @*/
        /*@modifies is, fileSystem @*/;
-void scanVerbatimString(sexpInputStream is, sexpSimpleString *ss, long int length)
+void scanVerbatimString(sexpInputStream is, sexpSimpleString ss, long int length)
        /*@globals fileSystem @*/
        /*@modifies is, ss, fileSystem @*/;
-void scanQuotedString(sexpInputStream is, sexpSimpleString *ss, long int length)
+void scanQuotedString(sexpInputStream is, sexpSimpleString ss, long int length)
        /*@globals fileSystem @*/
        /*@modifies is, ss, fileSystem @*/;
-void scanHexString(sexpInputStream is, sexpSimpleString *ss, long int length)
+void scanHexString(sexpInputStream is, sexpSimpleString ss, long int length)
        /*@globals fileSystem @*/
        /*@modifies is, ss, fileSystem @*/;
-void scanBase64String(sexpInputStream is, sexpSimpleString *ss, long int length)
+void scanBase64String(sexpInputStream is, sexpSimpleString ss, long int length)
        /*@globals fileSystem @*/
        /*@modifies is, ss, fileSystem @*/;
-sexpSimpleString *scanSimpleString(sexpInputStream is)
+sexpSimpleString scanSimpleString(sexpInputStream is)
        /*@globals fileSystem @*/
        /*@modifies is, fileSystem @*/;
 sexpString *scanString(sexpInputStream is)
@@ -216,7 +219,7 @@ sexpString *scanString(sexpInputStream is)
 sexpList *scanList(sexpInputStream is)
        /*@globals fileSystem @*/
        /*@modifies is, fileSystem @*/;
-sexpObject *scanObject(sexpInputStream is)
+sexpObject scanObject(sexpInputStream is)
        /*@globals fileSystem @*/
        /*@modifies is, fileSystem @*/;
 
@@ -238,7 +241,7 @@ sexpOutputStream newSexpOutputStream(void)
        /*@modifies fileSystem @*/;
 void printDecimal(sexpOutputStream os, long int n)
        /*@modifies os @*/;
-void canonicalPrintVerbatimSimpleString(sexpOutputStream os, sexpSimpleString *ss)
+void canonicalPrintVerbatimSimpleString(sexpOutputStream os, sexpSimpleString ss)
        /*@globals fileSystem @*/
        /*@modifies os, fileSystem @*/;
 void canonicalPrintString(sexpOutputStream os, sexpString *s)
@@ -247,48 +250,48 @@ void canonicalPrintString(sexpOutputStream os, sexpString *s)
 void canonicalPrintList(sexpOutputStream os, sexpList *list)
        /*@globals fileSystem @*/
        /*@modifies os, fileSystem @*/;
-void canonicalPrintObject(sexpOutputStream os, sexpObject *object)
+void canonicalPrintObject(sexpOutputStream os, sexpObject object)
        /*@globals fileSystem @*/
        /*@modifies os, fileSystem @*/;
-void base64PrintWholeObject(sexpOutputStream os, sexpObject *object)
+void base64PrintWholeObject(sexpOutputStream os, sexpObject object)
        /*@globals fileSystem @*/
        /*@modifies os, fileSystem @*/;
-int canPrintAsToken(sexpOutputStream os, sexpSimpleString *ss)
+int canPrintAsToken(sexpOutputStream os, sexpSimpleString ss)
        /*@*/;
-void advancedPrintTokenSimpleString(sexpOutputStream os, sexpSimpleString *ss)
+void advancedPrintTokenSimpleString(sexpOutputStream os, sexpSimpleString ss)
        /*@modifies os @*/;
-int advancedLengthSimpleStringToken(sexpSimpleString *ss)
+int advancedLengthSimpleStringToken(sexpSimpleString ss)
        /*@*/;
 /*@unused@*/
-void advancedPrintVerbatimSimpleString(sexpOutputStream os, sexpSimpleString *ss)
+void advancedPrintVerbatimSimpleString(sexpOutputStream os, sexpSimpleString ss)
        /*@globals fileSystem @*/
        /*@modifies os, fileSystem @*/;
 /*@unused@*/
-int advancedLengthSimpleStringVerbatim(sexpSimpleString *ss)
+int advancedLengthSimpleStringVerbatim(sexpSimpleString ss)
        /*@*/;
-void advancedPrintBase64SimpleString(sexpOutputStream os, sexpSimpleString *ss)
+void advancedPrintBase64SimpleString(sexpOutputStream os, sexpSimpleString ss)
        /*@globals fileSystem @*/
        /*@modifies os, fileSystem @*/;
-void advancedPrintHexSimpleString(sexpOutputStream os, sexpSimpleString *ss)
+void advancedPrintHexSimpleString(sexpOutputStream os, sexpSimpleString ss)
        /*@globals fileSystem @*/
        /*@modifies os, fileSystem @*/;
-int advancedLengthSimpleStringHexadecimal(sexpSimpleString *ss)
+int advancedLengthSimpleStringHexadecimal(sexpSimpleString ss)
        /*@*/;
-int canPrintAsQuotedString(sexpSimpleString *ss)
+int canPrintAsQuotedString(sexpSimpleString ss)
        /*@*/;
-void advancedPrintQuotedStringSimpleString(sexpOutputStream os, sexpSimpleString *ss)
+void advancedPrintQuotedStringSimpleString(sexpOutputStream os, sexpSimpleString ss)
        /*@modifies os @*/;
-int advancedLengthSimpleStringQuotedString(sexpSimpleString *ss)
+int advancedLengthSimpleStringQuotedString(sexpSimpleString ss)
        /*@*/;
-void advancedPrintSimpleString(sexpOutputStream os, sexpSimpleString *ss)
+void advancedPrintSimpleString(sexpOutputStream os, sexpSimpleString ss)
        /*@globals fileSystem @*/
        /*@modifies os, fileSystem @*/;
 void advancedPrintString(sexpOutputStream os, sexpString *s)
        /*@globals fileSystem @*/
        /*@modifies os, fileSystem @*/;
-int advancedLengthSimpleStringBase64(sexpSimpleString *ss)
+int advancedLengthSimpleStringBase64(sexpSimpleString ss)
        /*@*/;
-int advancedLengthSimpleString(sexpOutputStream os, sexpSimpleString *ss)
+int advancedLengthSimpleString(sexpOutputStream os, sexpSimpleString ss)
        /*@*/;
 int advancedLengthString(sexpOutputStream os, sexpString *s)
        /*@*/;
@@ -297,6 +300,6 @@ int advancedLengthList(sexpOutputStream os, sexpList *list)
 void advancedPrintList(sexpOutputStream os, sexpList *list)
        /*@globals fileSystem @*/
        /*@modifies os, fileSystem @*/;
-void advancedPrintObject(sexpOutputStream os, sexpObject *object)
+void advancedPrintObject(sexpOutputStream os, sexpObject object)
        /*@globals fileSystem @*/
        /*@modifies os, fileSystem @*/;