summaryrefslogtreecommitdiff
path: root/stream/obj_simple.c
diff options
context:
space:
mode:
authorTor Andersson <tor@ghostscript.com>2008-03-21 13:28:39 +0100
committerTor Andersson <tor@ghostscript.com>2008-03-21 13:28:39 +0100
commit4b9181cdb56a9d2015f8d79e90015038f4792334 (patch)
tree507876fcec4f91aa591f3cbf2196f4dcc4deeaad /stream/obj_simple.c
parent65e3374a2415399ded4624326a01bb9dfa77fa9e (diff)
downloadmupdf-4b9181cdb56a9d2015f8d79e90015038f4792334.tar.xz
Backport of chained error messages from experimental branch.
Diffstat (limited to 'stream/obj_simple.c')
-rw-r--r--stream/obj_simple.c54
1 files changed, 38 insertions, 16 deletions
diff --git a/stream/obj_simple.c b/stream/obj_simple.c
index 77a7bca8..d8eb77b7 100644
--- a/stream/obj_simple.c
+++ b/stream/obj_simple.c
@@ -4,18 +4,18 @@
extern void fz_droparray(fz_obj *array);
extern void fz_dropdict(fz_obj *dict);
-#define NEWOBJ(KIND,SIZE) \
- fz_obj *o; \
- o = *op = fz_malloc(SIZE); \
- if (!o) return fz_outofmem; \
- o->refs = 1; \
- o->kind = KIND; \
+#define NEWOBJ(KIND,SIZE) \
+ fz_obj *o; \
+ o = *op = fz_malloc(SIZE); \
+ if (!o) return fz_throw("outofmem: dynamic object"); \
+ o->refs = 1; \
+ o->kind = KIND;
fz_error *
fz_newnull(fz_obj **op)
{
NEWOBJ(FZ_NULL, sizeof (fz_obj));
- return nil;
+ return fz_okay;
}
fz_error *
@@ -23,7 +23,7 @@ fz_newbool(fz_obj **op, int b)
{
NEWOBJ(FZ_BOOL, sizeof (fz_obj));
o->u.b = b;
- return nil;
+ return fz_okay;
}
fz_error *
@@ -31,7 +31,7 @@ fz_newint(fz_obj **op, int i)
{
NEWOBJ(FZ_INT, sizeof (fz_obj));
o->u.i = i;
- return nil;
+ return fz_okay;
}
fz_error *
@@ -39,7 +39,7 @@ fz_newreal(fz_obj **op, float f)
{
NEWOBJ(FZ_REAL, sizeof (fz_obj));
o->u.f = f;
- return nil;
+ return fz_okay;
}
fz_error *
@@ -49,7 +49,7 @@ fz_newstring(fz_obj **op, char *str, int len)
o->u.s.len = len;
memcpy(o->u.s.buf, str, len);
o->u.s.buf[len] = '\0';
- return nil;
+ return fz_okay;
}
fz_error *
@@ -57,7 +57,7 @@ fz_newname(fz_obj **op, char *str)
{
NEWOBJ(FZ_NAME, offsetof(fz_obj, u.n) + strlen(str) + 1);
strcpy(o->u.n, str);
- return nil;
+ return fz_okay;
}
fz_error *
@@ -66,7 +66,7 @@ fz_newindirect(fz_obj **op, int objid, int genid)
NEWOBJ(FZ_INDIRECT, sizeof (fz_obj));
o->u.r.oid = objid;
o->u.r.gid = genid;
- return nil;
+ return fz_okay;
}
fz_error *
@@ -74,7 +74,7 @@ fz_newpointer(fz_obj **op, void *p)
{
NEWOBJ(FZ_POINTER, sizeof (fz_obj));
o->u.p = p;
- return nil;
+ return fz_okay;
}
fz_obj *
@@ -233,7 +233,7 @@ fz_topointer(fz_obj *obj)
{
if (fz_ispointer(obj))
return obj->u.p;
- return nil;
+ return fz_okay;
}
fz_error *
@@ -242,7 +242,7 @@ fz_newnamefromstring(fz_obj **op, fz_obj *str)
NEWOBJ(FZ_NAME, offsetof(fz_obj, u.n) + fz_tostrlen(str) + 1);
memcpy(o->u.n, fz_tostrbuf(str), fz_tostrlen(str));
o->u.n[fz_tostrlen(str)] = '\0';
- return nil;
+ return fz_okay;
}
int
@@ -261,10 +261,12 @@ fz_objcmp(fz_obj *a, fz_obj *b)
case FZ_BOOL: return a->u.b - b->u.b;
case FZ_INT: return a->u.i - b->u.i;
case FZ_REAL: return a->u.f - b->u.f;
+
case FZ_STRING:
if (a->u.s.len != b->u.s.len)
return a->u.s.len - b->u.s.len;
return memcmp(a->u.s.buf, b->u.s.buf, a->u.s.len);
+
case FZ_NAME:
return strcmp(a->u.n, b->u.n);
@@ -299,3 +301,23 @@ fz_objcmp(fz_obj *a, fz_obj *b)
return 1;
}
+char *fz_objkindstr(fz_obj *obj)
+{
+ if (obj == nil)
+ return "<nil>";
+ switch (obj->kind)
+ {
+ case FZ_NULL: return "null";
+ case FZ_BOOL: return "boolean";
+ case FZ_INT: return "integer";
+ case FZ_REAL: return "real";
+ case FZ_STRING: return "string";
+ case FZ_NAME: return "name";
+ case FZ_ARRAY: return "array";
+ case FZ_DICT: return "dictionary";
+ case FZ_INDIRECT: return "reference";
+ case FZ_POINTER: return "pointer";
+ }
+ return "<unknown>";
+}
+