mercurial/cext/revlog.h
author Gregory Szorc <gregory.szorc@gmail.com>
Sat, 02 Nov 2019 14:17:48 -0700
branchstable
changeset 43394 d359dfc15aca
parent 40861 b12700dd261f
child 44467 9db11679f8ac
permissions -rw-r--r--
fsmonitor: handle unicode keys in tuples In Python 3, keys in the bset tuple are typically str, not bytes. PyBytes_AsString() would return NULL. But we weren't checking the return value and this would lead to a segfault. This commit makes the code type and Python version aware. The Python version specific code is to allow us to utilize a modern API for converting str -> char* without having to allocate an extra PyObject. FWIW I wanted to assume that keys were always str. However, there appear to be some bytes keys in some cases. I haven't debugged this further. Differential Revision: https://phab.mercurial-scm.org/D7210

/*
 revlog.h - efficient revlog parsing

 This software may be used and distributed according to the terms of
 the GNU General Public License, incorporated herein by reference.
*/

#ifndef _HG_REVLOG_H_
#define _HG_REVLOG_H_

#include <Python.h>

extern PyTypeObject HgRevlogIndex_Type;

#define HgRevlogIndex_Check(op) PyObject_TypeCheck(op, &HgRevlogIndex_Type)

int HgRevlogIndex_GetParents(PyObject *op, int rev, int *ps);

#endif /* _HG_REVLOG_H_ */