📄 ml_mem.c
字号:
#endif
return (p);
} /* END OF FUNCTION */
#endif /* ... XMK_USE_memset */
#ifdef XMK_USE_memcpy
/*+FHDR E*/
/*
+------------------------------------------------------------------------------+
| Functionname : memcpy |
| Author : S&P Media GmbH Germany |
+------------------------------------------------------------------------------+
| |
| Description : |
| This function is a template for the memcpy () implementation. |
| |
| CAUTION : |
| ------------- |
| Take care in the case of using preemption ! |
| |
+------------------------------------------------------------------------------+
*/
/*-FHDR E*/
/*+FDEF E*/
#ifndef XNOPROTO
void * XMK_memcpy_NAME ( void * dest, const void * source, size_t length )
#else
void * XMK_memcpy_NAME ( dest, source, length)
void * dest;
const void * source;
size_t length;
#endif
/*-FDEF E*/
{
char *d;
char *s;
#ifdef XMK_ADD_PRINTF_MEMORY
XMK_FUNCTION("memcpy");
#endif
d = (char *) dest;
s = (char *) source ;
while (length --)
{
*d = *s;
d++; s++;
};
#ifdef XMK_ADD_PRINTF_MEMORY
XMK_TRACE_EXIT("memcpy");
#endif
return (dest);
} /* END OF FUNCTION */
#endif /* ... XMK_USE_memcpy */
#ifdef XMK_USE_strlen
/*+FHDR E*/
/*
+------------------------------------------------------------------------------+
| Functionname : strlen |
| Author : S&P Media GmbH Germany |
+------------------------------------------------------------------------------+
| |
| Description : |
| This function is a template for the strlen () implementation. |
| |
| CAUTION : |
| ------------- |
| Take care in the case of using preemption ! |
| |
+------------------------------------------------------------------------------+
*/
/*-FHDR E*/
/*+FDEF E*/
#ifndef XNOPROTO
size_t XMK_strlen_NAME ( const char * p )
#else
size_t XMK_strlen_NAME ( p )
const char * p;
#endif
/*-FDEF E*/
{
int cnt = 0;
/*#ifdef XMK_ADD_PRINTF_MEMORY
XMK_FUNCTION("strlen");
#endif
*/
while (*p)
{
cnt ++;
p++;
};
/*
#ifdef XMK_ADD_PRINTF_MEMORY
XMK_TRACE_EXIT("strlen");
#endif
*/
return (cnt);
} /* END OF FUNCTION */
#endif /* ... XMK_USE_strlen */
#ifdef XMK_USE_strcpy
/*+FHDR E*/
/*
+------------------------------------------------------------------------------+
| Functionname : strcpy |
| Author : S&P Media GmbH Germany |
+------------------------------------------------------------------------------+
| |
| Description : |
| This function is a template for the strcpy () implementation. |
| |
| CAUTION : |
| ------------- |
| Take care in the case of using preemption ! |
| |
+------------------------------------------------------------------------------+
*/
/*-FHDR E*/
/*+FDEF E*/
#ifndef XNOPROTO
char * XMK_strcpy_NAME ( char * pdest, const char * psource )
#else
char * XMK_strcpy_NAME ( pdest, psource )
char * pdest;
const char * psource;
#endif
/*-FDEF E*/
{
char * p_return;
#ifdef XMK_ADD_PRINTF_MEMORY
XMK_FUNCTION("strcpy");
#endif
p_return = pdest;
while (*psource)
{
*pdest = *psource;
pdest ++ ;
psource ++ ;
};
*pdest ='\0';
#ifdef XMK_ADD_PRINTF_MEMORY
XMK_TRACE_EXIT("strcpy");
#endif
return (p_return);
} /* END OF FUNCTION */
#endif /* ... XMK_USE_strcpy */
#ifdef XMK_USE_strncpy
/*+FHDR E*/
/*
+------------------------------------------------------------------------------+
| Functionname : strncpy |
| Author : S&P Media GmbH Germany |
+------------------------------------------------------------------------------+
| |
| Description : |
| This function is a template for the strncpy () implementation. |
| |
| CAUTION : |
| ------------- |
| Take care in the case of using preemption ! |
| |
+------------------------------------------------------------------------------+
*/
/*-FHDR E*/
/*+FDEF E*/
#ifndef XNOPROTO
char * XMK_strncpy_NAME ( char * pdest, const char * psource, size_t length )
#else
char * XMK_strncpy_NAME ( pdest, psource, length )
char * pdest;
const char * psource;
size_t length;
#endif
/*-FDEF E*/
{
char *s = pdest;
register char c;
#ifdef XMK_ADD_PRINTF_MEMORY
XMK_FUNCTION("strncpy");
#endif
--pdest;
if (length >= 4)
{
size_t length4 = length >> 2;
for (;;)
{
c = *psource++;
*++pdest = c;
if (c == '\0')
break;
c = *psource++;
*++pdest = c;
if (c == '\0')
break;
c = *psource++;
*++pdest = c;
if (c == '\0')
break;
c = *psource++;
*++pdest = c;
if (c == '\0')
break;
if (--length4 == 0)
goto last_chars;
}
length = length - (pdest - s) - 1;
if (length == 0)
return s;
goto zero_fill;
}
last_chars:
length &= 3;
if (length == 0)
return s;
do
{
c = *psource++;
*++pdest = c;
if (--length == 0)
return s;
}
while (c != '\0');
zero_fill:
do
*++pdest = '\0';
while (--length > 0);
#ifdef XMK_ADD_PRINTF_MEMORY
XMK_TRACE_EXIT("strncpy");
#endif
return s;
} /* END OF FUNCTION */
#endif /* ... XMK_USE_strncpy */
#ifdef XMK_USE_strcmp
/*+FHDR E*/
/*
+------------------------------------------------------------------------------+
| Functionname : strcmp |
| Author : S&P Media GmbH Germany |
+------------------------------------------------------------------------------+
| |
| Description : |
| This function is a template for the strcmp () implementation. |
| |
| CAUTION : |
| ------------- |
| Take care in the case of using preemption ! |
| |
+------------------------------------------------------------------------------+
*/
/*-FHDR E*/
/*+FDEF E*/
#ifndef XNOPROTO
int XMK_strcmp_NAME (const char * p1, const char * p2)
#else
int XMK_strcmp_NAME (p1, p2)
const char * p1;
const char * p2;
#endif
/*-FDEF E*/
{
unsigned char c1, c2;
#ifdef XMK_ADD_PRINTF_MEMORY
XMK_FUNCTION("strcmp");
#endif
do
{
c1 = (unsigned char) *p1++;
c2 = (unsigned char) *p2++;
if (c1 == '\0') return (c1 - c2);
}
while (c1 == c2);
#ifdef XMK_ADD_PRINTF_MEMORY
XMK_TRACE_EXIT("strcmp");
#endif
return (c1 - c2);
} /* END OF FUNCTION */
#endif /* ... XMK_USE_strcmp */
#endif /* __ML_MEM_C_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -