6aef78af13
This reapplies logical r360944 and r360946 (reverting r360955), with fixed copystr() stand-in replacement macro. Eventually the goal is to convert consumers and kill the macro, but for a first step it helps if the macro is correct. Prior commit message: Unlike the other copy*() functions, it does not serve to copy from one address space to another or protect against potential faults. It's just an older incarnation of the now-more-common strlcpy(). Add a coccinelle script to tools/ which can be used to mechanically convert existing instances where replacement with strlcpy is trivial. In the two cases which matched, fuse_vfsops.c and union_vfsops.c, the code was further refactored manually to simplify. Replace the declaration of copystr() in systm.h with a small macro wrapper around strlcpy (with correction from brooks@ -- thanks). Remove N redundant MI implementations of copystr. For MIPS, this entailed inlining the assembler copystr into the only consumer, copyinstr, and making the latter a leaf function. Reviewed by: jhb (earlier version) Discussed with: brooks (thanks!) Differential Revision: https://reviews.freebsd.org/D24672
40 lines
757 B
Plaintext
40 lines
757 B
Plaintext
@ nostorederror_nostoredlen @
|
|
expression __src, __dst, __len;
|
|
statement S1;
|
|
@@
|
|
|
|
S1
|
|
-copystr(__src, __dst, __len, NULL);
|
|
+strlcpy(__dst, __src, __len);
|
|
|
|
@ ifcondition_nostoredlen @
|
|
expression __src, __dst, __len;
|
|
statement S1;
|
|
@@
|
|
if (
|
|
(
|
|
-copystr(__src, __dst, __len, NULL) == ENAMETOOLONG
|
|
|
|
|
-copystr(__src, __dst, __len, NULL) != 0
|
|
|
|
|
-copystr(__src, __dst, __len, NULL)
|
|
)
|
|
+strlcpy(__dst, __src, __len) >= __len
|
|
) S1
|
|
|
|
@ nostorederror_storedlen1 @
|
|
expression __src, __dst, __len;
|
|
identifier __done;
|
|
statement S1;
|
|
@@
|
|
S1
|
|
(
|
|
-copystr(__src, __dst, __len, &__done);
|
|
+__done = strlcpy(__dst, __src, __len);
|
|
+__done = MIN(__done, __len);
|
|
|
|
|
-copystr(__src, __dst, __len, __done);
|
|
+ *__done = strlcpy(__dst, __src, __len);
|
|
+ *__done = MIN(*__done, __len);
|
|
)
|