Show More
@@ -9,6 +9,7 b'' | |||
|
9 | 9 | |
|
10 | 10 | #include <Python.h> |
|
11 | 11 | |
|
12 | #include "charencode.h" | |
|
12 | 13 | #include "util.h" |
|
13 | 14 | |
|
14 | 15 | static const char lowertable[128] = { |
@@ -1,29 +1,15 b'' | |||
|
1 | 1 | /* |
|
2 | util.h - utility functions for interfacing with the various python APIs. | |
|
2 | charencode.h - miscellaneous character encoding | |
|
3 | 3 | |
|
4 | 4 | This software may be used and distributed according to the terms of |
|
5 | 5 | the GNU General Public License, incorporated herein by reference. |
|
6 | 6 | */ |
|
7 | 7 | |
|
8 |
#ifndef _HG_ |
|
|
9 |
#define _HG_ |
|
|
10 | ||
|
11 | #include "compat.h" | |
|
12 | ||
|
13 | #if PY_MAJOR_VERSION >= 3 | |
|
14 | #define IS_PY3K | |
|
15 | #endif | |
|
8 | #ifndef _HG_CHARENCODE_H_ | |
|
9 | #define _HG_CHARENCODE_H_ | |
|
16 | 10 | |
|
17 | typedef struct { | |
|
18 | PyObject_HEAD | |
|
19 | char state; | |
|
20 | int mode; | |
|
21 | int size; | |
|
22 | int mtime; | |
|
23 | } dirstateTupleObject; | |
|
24 | ||
|
25 | extern PyTypeObject dirstateTupleType; | |
|
26 | #define dirstate_tuple_check(op) (Py_TYPE(op) == &dirstateTupleType) | |
|
11 | #include <Python.h> | |
|
12 | #include "compat.h" | |
|
27 | 13 | |
|
28 | 14 | /* This should be kept in sync with normcasespecs in encoding.py. */ |
|
29 | 15 | enum normcase_spec { |
@@ -32,27 +18,10 b' enum normcase_spec {' | |||
|
32 | 18 | NORMCASE_OTHER = 0 |
|
33 | 19 | }; |
|
34 | 20 | |
|
35 | #define MIN(a, b) (((a)<(b))?(a):(b)) | |
|
36 | /* VC9 doesn't include bool and lacks stdbool.h based on my searching */ | |
|
37 | #if defined(_MSC_VER) || __STDC_VERSION__ < 199901L | |
|
38 | #define true 1 | |
|
39 | #define false 0 | |
|
40 | typedef unsigned char bool; | |
|
41 | #else | |
|
42 | #include <stdbool.h> | |
|
43 | #endif | |
|
44 | ||
|
45 | static inline PyObject *_dict_new_presized(Py_ssize_t expected_size) | |
|
46 | { | |
|
47 | /* _PyDict_NewPresized expects a minused parameter, but it actually | |
|
48 | creates a dictionary that's the nearest power of two bigger than the | |
|
49 | parameter. For example, with the initial minused = 1000, the | |
|
50 | dictionary created has size 1024. Of course in a lot of cases that | |
|
51 | can be greater than the maximum load factor Python's dict object | |
|
52 | expects (= 2/3), so as soon as we cross the threshold we'll resize | |
|
53 | anyway. So create a dictionary that's at least 3/2 the size. */ | |
|
54 | return _PyDict_NewPresized(((1 + expected_size) / 2) * 3); | |
|
55 | } | |
|
21 | PyObject *unhexlify(const char *str, int len); | |
|
22 | PyObject *asciilower(PyObject *self, PyObject *args); | |
|
23 | PyObject *asciiupper(PyObject *self, PyObject *args); | |
|
24 | PyObject *make_file_foldmap(PyObject *self, PyObject *args); | |
|
56 | 25 | |
|
57 | 26 | static const int8_t hextable[256] = { |
|
58 | 27 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
@@ -85,4 +54,4 b' static inline int hexdigit(const char *p' | |||
|
85 | 54 | return 0; |
|
86 | 55 | } |
|
87 | 56 | |
|
88 |
#endif /* _HG_ |
|
|
57 | #endif /* _HG_CHARENCODE_H_ */ |
@@ -12,6 +12,7 b'' | |||
|
12 | 12 | #include <string.h> |
|
13 | 13 | #include <stdlib.h> |
|
14 | 14 | |
|
15 | #include "charencode.h" | |
|
15 | 16 | #include "util.h" |
|
16 | 17 | |
|
17 | 18 | #define DEFAULT_LINES 100000 |
@@ -38,9 +39,6 b' typedef struct {' | |||
|
38 | 39 | #define MANIFEST_NOT_SORTED -2 |
|
39 | 40 | #define MANIFEST_MALFORMED -3 |
|
40 | 41 | |
|
41 | /* defined in charencode.c */ | |
|
42 | PyObject *unhexlify(const char *str, int len); | |
|
43 | ||
|
44 | 42 | /* get the length of the path for a line */ |
|
45 | 43 | static size_t pathlen(line *l) { |
|
46 | 44 | return strlen(l->start); |
@@ -12,6 +12,7 b'' | |||
|
12 | 12 | #include <stddef.h> |
|
13 | 13 | #include <string.h> |
|
14 | 14 | |
|
15 | #include "charencode.h" | |
|
15 | 16 | #include "util.h" |
|
16 | 17 | #include "bitmanipulation.h" |
|
17 | 18 | |
@@ -29,12 +30,6 b'' | |||
|
29 | 30 | |
|
30 | 31 | static const char *const versionerrortext = "Python minor version mismatch"; |
|
31 | 32 | |
|
32 | /* defined in charencode.c */ | |
|
33 | PyObject *unhexlify(const char *str, int len); | |
|
34 | PyObject *asciilower(PyObject *self, PyObject *args); | |
|
35 | PyObject *asciiupper(PyObject *self, PyObject *args); | |
|
36 | PyObject *make_file_foldmap(PyObject *self, PyObject *args); | |
|
37 | ||
|
38 | 33 | static PyObject *dict_new_presized(PyObject *self, PyObject *args) |
|
39 | 34 | { |
|
40 | 35 | Py_ssize_t expected_size; |
@@ -13,6 +13,7 b'' | |||
|
13 | 13 | #include <stddef.h> |
|
14 | 14 | #include <string.h> |
|
15 | 15 | |
|
16 | #include "charencode.h" | |
|
16 | 17 | #include "util.h" |
|
17 | 18 | #include "bitmanipulation.h" |
|
18 | 19 |
@@ -25,13 +25,6 b' typedef struct {' | |||
|
25 | 25 | extern PyTypeObject dirstateTupleType; |
|
26 | 26 | #define dirstate_tuple_check(op) (Py_TYPE(op) == &dirstateTupleType) |
|
27 | 27 | |
|
28 | /* This should be kept in sync with normcasespecs in encoding.py. */ | |
|
29 | enum normcase_spec { | |
|
30 | NORMCASE_LOWER = -1, | |
|
31 | NORMCASE_UPPER = 1, | |
|
32 | NORMCASE_OTHER = 0 | |
|
33 | }; | |
|
34 | ||
|
35 | 28 | #define MIN(a, b) (((a)<(b))?(a):(b)) |
|
36 | 29 | /* VC9 doesn't include bool and lacks stdbool.h based on my searching */ |
|
37 | 30 | #if defined(_MSC_VER) || __STDC_VERSION__ < 199901L |
@@ -54,35 +47,4 b' static inline PyObject *_dict_new_presiz' | |||
|
54 | 47 | return _PyDict_NewPresized(((1 + expected_size) / 2) * 3); |
|
55 | 48 | } |
|
56 | 49 | |
|
57 | static const int8_t hextable[256] = { | |
|
58 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, | |
|
59 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, | |
|
60 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, | |
|
61 | 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, /* 0-9 */ | |
|
62 | -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* A-F */ | |
|
63 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, | |
|
64 | -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* a-f */ | |
|
65 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, | |
|
66 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, | |
|
67 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, | |
|
68 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, | |
|
69 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, | |
|
70 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, | |
|
71 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, | |
|
72 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, | |
|
73 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 | |
|
74 | }; | |
|
75 | ||
|
76 | static inline int hexdigit(const char *p, Py_ssize_t off) | |
|
77 | { | |
|
78 | int8_t val = hextable[(unsigned char)p[off]]; | |
|
79 | ||
|
80 | if (val >= 0) { | |
|
81 | return val; | |
|
82 | } | |
|
83 | ||
|
84 | PyErr_SetString(PyExc_ValueError, "input contains non-hex character"); | |
|
85 | return 0; | |
|
86 | } | |
|
87 | ||
|
88 | 50 | #endif /* _HG_UTIL_H_ */ |
@@ -767,7 +767,7 b' extmodules = [' | |||
|
767 | 767 | 'mercurial/cext/pathencode.c', |
|
768 | 768 | 'mercurial/cext/revlog.c'], |
|
769 | 769 | include_dirs=common_include_dirs, |
|
770 | depends=common_depends), | |
|
770 | depends=common_depends + ['mercurial/cext/charencode.h']), | |
|
771 | 771 | Extension('mercurial.cext.osutil', ['mercurial/cext/osutil.c'], |
|
772 | 772 | include_dirs=common_include_dirs, |
|
773 | 773 | extra_compile_args=osutil_cflags, |
General Comments 0
You need to be logged in to leave comments.
Login now