Listing 2

static PyObject *openrj_open(PyObject *self, PyObject *args)
{
  char  *path;
  long  flags;
  if(!PyArg_ParseTuple(args, "sl", &path, &flags)) 
  {
    return NULL;
  }
  else
  {
    ORJDatabase const *db;
    ORJError          error;
    ORJRC             rc  = ORJ_ReadDatabaseA( path, NULL, flags
                                             , &db, &error);
    if(ORJ_RC_SUCCESS != rc)
    {
      // If rc == ORJ_RC_PARSEERROR then prepare a parse-related message,
      // using ORJ_GetParseErrorStringA()
      // else a message using ORJ_GetErrorStringA()
      char errMessage[] = . . .; //
      PyErr_SetString(DatabaseExceptionObject, errMessage);
      return NULL;
    }
    else
    {
      return (PyObject*)openrj_Database_alloc(self, db, path);
    }
  }
}