Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
553 serge 1
/****************************************************************************
2
*
3
*                            Open Watcom Project
4
*
5
*    Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
6
*
7
*  ========================================================================
8
*
9
*    This file contains Original Code and/or Modifications of Original
10
*    Code as defined in and that are subject to the Sybase Open Watcom
11
*    Public License version 1.0 (the 'License'). You may not use this file
12
*    except in compliance with the License. BY USING THIS FILE YOU AGREE TO
13
*    ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is
14
*    provided with the Original Code and Modifications, and is also
15
*    available at www.sybase.com/developer/opensource.
16
*
17
*    The Original Code and all software distributed under the License are
18
*    distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
19
*    EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM
20
*    ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF
21
*    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR
22
*    NON-INFRINGEMENT. Please see the License for the specific language
23
*    governing rights and limitations under the License.
24
*
25
*  ========================================================================
26
*
27
* Description:  WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE
28
*               DESCRIBE IT HERE!
29
*
30
****************************************************************************/
31
 
32
 
33
#include "variety.h"
34
#include 
35
 
36
#ifdef M_I86
37
 
38
extern char _WCFAR *fast_strncpy( char _WCFAR *, const char _WCFAR *, size_t );
39
 
40
#pragma aux fast_strncpy = \
41
        0x1e            /* push ds    */\
42
        0x96            /* xchg si,ax */\
43
        0x8e 0xd8       /* mov ds,ax  */\
44
        0x57            /* push di */\
45
        0xac            /* L1: lodsb */\
46
        0xaa            /* stosb */\
47
        0x84 0xc0       /* test al,al */\
48
        0xe0 0xfa       /* loopne L1 */\
49
        0x31 0xc0       /* xor ax,ax */\
50
        0xd1 0xe9       /* shr cx,1 */\
51
        0xf3 0xab       /* rep stosw */\
52
        0x11 0xc9       /* adc cx,cx */\
53
        0xf3 0xaa       /* rep stosb */\
54
        0x58            /* pop ax */\
55
        0x1f            /* pop ds */\
56
        parm caller     [es di] [si ax] [cx]\
57
        value           [es ax] \
58
        modify exact    [ax cx si di];
59
#endif
60
 
61
_WCRTLINK char _WCFAR *_fstrncpy( char _WCFAR *dst, const char _WCFAR *src, size_t len )
62
    {
63
#ifdef M_I86
64
        if( len ) {
65
            return( fast_strncpy( dst, src, len ) );
66
        }
67
        return( dst );
68
#else
69
        char _WCFAR *ret;
70
 
71
        ret = dst;
72
        for(;len; --len ) {
73
            if( *src == '\0' ) break;
74
            *dst++ = *src++;
75
        }
76
        while( len != 0 ) {
77
            *dst++ = '\0';      /* pad destination string with null chars */
78
            --len;
79
        }
80
        return( ret );
81
#endif
82
    }