39
39
Standard) perfectly.
41
41
Here are some other suggestions:
42
</p><div class="orderedlist"><ol type="1"><li><p>
42
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
43
43
use d_printf instead of printf for display text
44
44
reason: enable auto-substitution of translated language text
45
</p></li><li class="listitem"><p>
46
46
use SAFE_FREE instead of free
47
47
reason: reduce traps due to null pointers
48
</p></li><li class="listitem"><p>
49
49
don't use bzero use memset, or ZERO_STRUCT and ZERO_STRUCTP macros
51
</p></li><li class="listitem"><p>
52
52
don't use strcpy and strlen (use safe_* equivalents)
53
53
reason: to avoid traps due to buffer overruns
54
</p></li><li class="listitem"><p>
55
55
don't use getopt_long, use popt functions instead
56
56
reason: portability
57
</p></li><li class="listitem"><p>
58
58
explicitly add const qualifiers on parm passing in functions where parm
59
59
is input only (somewhat controversial but const can be #defined away)
60
</p></li><li class="listitem"><p>
61
61
when passing a va_list as an arg, or assigning one to another
62
62
please use the VA_COPY() macro
63
63
reason: on some platforms, va_list is a struct that must be
64
64
initialized in each function...can SEGV if you don't.
65
</p></li><li class="listitem"><p>
66
66
discourage use of threads
67
67
reason: portability (also see architecture.doc)
68
</p></li><li class="listitem"><p>
69
69
don't explicitly include new header files in C files - new h files
70
70
should be included by adding them once to includes.h
71
71
reason: consistency
72
</p></li><li class="listitem"><p>
73
73
don't explicitly extern functions (they are autogenerated by
74
74
"make proto" into proto.h)
75
75
reason: consistency
76
</p></li><li class="listitem"><p>
77
77
use endian safe macros when unpacking SMBs (see byteorder.h and
79
79
reason: not everyone uses Intel
80
</p></li><li class="listitem"><p>
81
81
Note Unicode implications of charset handling (see internals.doc). See
82
82
pull_* and push_* and convert_string functions.
83
83
reason: Internationalization
84
</p></li><li class="listitem"><p>
85
85
Don't assume English only
87
</p></li><li class="listitem"><p>
88
88
Try to avoid using in/out parameters (functions that return data which
89
89
overwrites input parameters)
90
90
reason: Can cause stability problems
91
</p></li><li class="listitem"><p>
92
92
Ensure copyright notices are correct, don't append Tridge's name to code
93
93
that he didn't write. If you did not write the code, make sure that it
94
94
can coexist with the rest of the Samba GPLed code.
95
</p></li><li class="listitem"><p>
96
96
Consider usage of DATA_BLOBs for length specified byte-data.
98
</p></li><li class="listitem"><p>
99
99
Take advantage of tdbs for database like function
100
100
reason: consistency
101
</p></li><li class="listitem"><p>
102
102
Don't access the SAM_ACCOUNT structure directly, they should be accessed
103
103
via pdb_get...() and pdb_set...() functions.
104
104
reason: stability, consistency
105
</p></li><li class="listitem"><p>
106
106
Don't check a password directly against the passdb, always use the
107
107
check_password() interface.
108
108
reason: long term pluggability
109
</p></li><li class="listitem"><p>
110
110
Try to use asprintf rather than pstrings and fstrings where possible
111
</p></li><li class="listitem"><p>
112
112
Use normal C comments / * instead of C++ comments // like
113
113
this. Although the C++ comment format is part of the C99
114
114
standard, some older vendor C compilers do not accept it.
115
</p></li><li class="listitem"><p>
116
116
Try to write documentation for API functions and structures
117
117
explaining the point of the code, the way it should be used, and
118
118
any special conditions or results. Mark these with a double-star
119
119
comment start / ** so that they can be picked up by Doxygen, as in
121
</p></li><li class="listitem"><p>
122
122
Keep the scope narrow. This means making functions/variables
123
123
static whenever possible. We don't want our namespace
124
124
polluted. Each module should have a minimal number of externally
125
125
visible functions or variables.
126
</p></li><li class="listitem"><p>
127
127
Use function pointers to keep knowledge about particular pieces of
128
128
code isolated in one place. We don't want a particular piece of
129
129
functionality to be spread out across lots of places - that makes