1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- /* Unless compiled with -DNO_OVERWRITE, this variant of s_copy allows the
- * target of an assignment to appear on its right-hand side (contrary
- * to the Fortran 77 Standard, but in accordance with Fortran 90),
- * as in a(2:5) = a(4:7) .
- */
- #include "f2c.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- /* assign strings: a = b */
- // command to get sanitizer error:
- // ya make -tAr --sanitize=address cv/imgclassifiers/danet/tests/minimize_memory_ut/ -F TMinimizeMemoryTest::TestMinimizeMemoryUsageModeTrain
- #if defined(__has_feature)
- # if __has_feature(address_sanitizer)
- __attribute__((no_sanitize("address")))
- # endif
- #endif
- #if defined(__has_feature)
- # if __has_feature(memory_sanitizer)
- __attribute__((no_sanitize("memory")))
- # endif
- #endif
- #ifdef KR_headers
- VOID s_copy(a, b, la, lb) register char *a, *b; ftnlen la, lb;
- #else
- void s_copy(register char *a, register char *b, ftnlen la, ftnlen lb)
- #endif
- {
- register char *aend, *bend;
- aend = a + la;
- if(la <= lb)
- #ifndef NO_OVERWRITE
- if (a <= b || a >= b + la)
- #endif
- while(a < aend)
- *a++ = *b++;
- #ifndef NO_OVERWRITE
- else
- for(b += la; a < aend; )
- *--aend = *--b;
- #endif
- else {
- bend = b + lb;
- #ifndef NO_OVERWRITE
- if (a <= b || a >= bend)
- #endif
- while(b < bend)
- *a++ = *b++;
- #ifndef NO_OVERWRITE
- else {
- a += lb;
- while(b < bend)
- *--a = *--bend;
- a += lb;
- }
- #endif
- while(a < aend)
- *a++ = ' ';
- }
- }
- #ifdef __cplusplus
- }
- #endif
|