ze-filter  (ze-filter-0.8.0-develop-180218)
ze-morpho.c
Go to the documentation of this file.
1 /*
2  *
3  * ze-filter - Mail Server Filter for sendmail
4  *
5  * Copyright (c) 2001-2018 - Jose-Marcio Martins da Cruz
6  *
7  * Auteur : Jose Marcio Martins da Cruz
8  * jose.marcio.mc@gmail.org
9  *
10  * Historique :
11  * Creation : janvier 2002
12  *
13  * This program is free software, but with restricted license :
14  *
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
19  *
20  * More details about ze-filter license can be found at ze-filter
21  * web site : http://foss.jose-marcio.org
22  */
23 
24 #include <ze-sys.h>
25 
26 #include "ze-libjc.h"
27 
28 #define MAX3(a,b,c) ((a) > (b) ? \
29  ((a) > (c) ? (a) : (c)) : \
30  ((b) > (c) ? (b) : (c)))
31 
32 #define MIN3(a,b,c) ((a) < (b) ? \
33  ((a) < (c) ? (a) : (c)) : \
34  ((b) < (c) ? (b) : (c)))
35 
36 /* ****************************************************************************
37  * *
38  * *
39  **************************************************************************** */
40 bool
42  uint8_t *p;
43  size_t size;
44 {
45  uint8_t *q;
46  uint8_t *r, *s;
47  size_t n;
48 
49  if ((p == NULL) || (size == 0))
50  return FALSE;
51 
52  if ((q = (uint8_t *) malloc(size)) == NULL) {
53  ZE_LogSysError("malloc(%ld) error", (long) size);
54  return FALSE;
55  }
56 
57  memcpy(q, p, size);
58 
59  r = p;
60  s = q;
61  *s = MIN3(*r, *r, *(r + 1));
62  r++; s++;
63  for (n = 1; n < size - 2; n++, r++, s++) {
64  *s = MIN3(*(r - 1), *r, *(r + 1));
65  }
66  *s = MIN3(*(r - 1), *r, *r);
67 
68 
69  memcpy(p, q, size);
70  FREE(q);
71 
72  return TRUE;
73 }
74 
75 /* ****************************************************************************
76  * *
77  * *
78  **************************************************************************** */
79 bool
81  uint8_t *p;
82  size_t size;
83 {
84  uint8_t *q;
85  uint8_t *r, *s;
86  size_t n;
87 
88  if ((p == NULL) || (size == 0))
89  return FALSE;
90 
91  if ((q = (uint8_t *) malloc(size)) == NULL) {
92  ZE_LogSysError("malloc(%ld) error", (long) size);
93  return FALSE;
94  }
95 
96  memcpy(q, p, size);
97 
98  r = p;
99  s = q;
100  *s = MAX3(*r, *r, *(r + 1));
101  r++; s++;
102  for (n = 1; n < size - 2; n++, r++, s++) {
103  *s = MAX3(*(r - 1), *r, *(r + 1));
104  }
105  *s = MAX3(*(r - 1), *r, *r);
106 
107  memcpy(p, q, size);
108  FREE(q);
109 
110  return TRUE;
111 }
112 
113 /* ****************************************************************************
114  * *
115  * *
116  **************************************************************************** */
117 bool
119  uint8_t *p;
120  size_t size;
121 {
122  (void ) morpho_bin_erosion(p, size);
123  (void ) morpho_bin_dilation(p, size);
124 
125  return TRUE;
126 }
127 
128 /* ****************************************************************************
129  * *
130  * *
131  **************************************************************************** */
132 bool
134  uint8_t *p;
135  size_t size;
136 {
137  (void ) morpho_bin_dilation(p, size);
138  (void ) morpho_bin_erosion(p, size);
139 
140  return TRUE;
141 }
#define FREE(x)
Definition: macros.h:37
#define MIN3(a, b, c)
Definition: ze-morpho.c:32
#define FALSE
Definition: macros.h:160
bool morpho_bin_openning(uint8_t *p, size_t size)
Definition: ze-morpho.c:118
bool morpho_bin_closing(uint8_t *p, size_t size)
Definition: ze-morpho.c:133
bool morpho_bin_dilation(uint8_t *p, size_t size)
Definition: ze-morpho.c:80
#define TRUE
Definition: macros.h:157
#define MAX3(a, b, c)
Definition: ze-morpho.c:28
#define memcpy(d, s, n)
Definition: ze-sys.h:224
#define ZE_LogSysError(...)
Definition: zeSyslog.h:129
bool morpho_bin_erosion(uint8_t *p, size_t size)
Definition: ze-morpho.c:41