- g_return_val_if_fail(IS_U_OBJECT(obj), -1);
- return U_OBJECT_GET_CLASS(obj)->deserialize(U_OBJECT(obj), f);
+ g_return_val_if_fail(IS_UOBJECT(obj), -1);
+ UObject *uo = UOBJECT(obj);
+ struct upkg_file *f;
+ int rc;
+
+ g_return_val_if_fail(uo->pkg_file == NULL, -1);
+ f = upkg_export_open(pkg, idx);
+ if (!f) {
+ return -1;
+ }
+
+ rc = UOBJECT_GET_CLASS(obj)->deserialize(uo, f);
+ if (rc != 0) {
+ upkg_export_close(f);
+ } else {
+ uo->pkg = pkg;
+ uo->pkg_idx = idx;
+ uo->pkg_file = f;
+ }
+
+ return rc;