~ubuntu-branches/ubuntu/gutsy/avr-libc/gutsy

« back to all changes in this revision

Viewing changes to libc/string/strncpy.S

  • Committer: Bazaar Package Importer
  • Author(s): Hakan Ardo
  • Date: 2006-11-15 21:12:47 UTC
  • mfrom: (3.1.2 feisty)
  • Revision ID: james.westby@ubuntu.com-20061115211247-b7qhgnb6o49v5zsg
Tags: 1:1.4.5-2
* Convertion to debheler fixed (closes: #398220)
* Reference to /usr/share/common-licenses in copyright file

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
27
  POSSIBILITY OF SUCH DAMAGE. */
28
28
 
 
29
/* $Id: strncpy.S,v 1.5 2005/10/30 19:36:53 aesok Exp $ */
 
30
 
29
31
#include "macros.inc"
30
32
 
31
33
#define dest_hi r25
49
51
    \returns The strncpy() function returns a pointer to the destination
50
52
    string dest.  */
51
53
 
52
 
#if !defined(DOXYGEN)
 
54
#if !defined(__DOXYGEN__)
53
55
 
54
56
        .text
55
57
        .global _U(strncpy)
56
58
        .type   _U(strncpy), @function
57
59
_U(strncpy):
58
 
        LOAD_Z(src_lo, src_hi)
59
 
        LOAD_X(dest_lo, dest_hi)
60
 
.strncpy_loop:
 
60
        X_movw  ZL, src_lo
 
61
        X_movw  XL, dest_lo
 
62
.L_strncpy_loop:
61
63
        subi    len_lo, lo8(1)
62
64
        sbci    len_hi, hi8(1)
63
 
        brcs    .strncpy_done
 
65
        brcs    .L_strncpy_done
64
66
        ld      __tmp_reg__, Z+
65
67
        st      X+, __tmp_reg__
66
68
        tst     __tmp_reg__
67
 
        brne    .strncpy_loop
 
69
        brne    .L_strncpy_loop
68
70
; store null characters up to the end of dest
69
71
; as the glibc manual says:
70
72
; This behavior is rarely useful, but it is specified by the ISO C standard.
71
 
        rjmp    .strncpy_clr_start
72
 
.strncpy_clr_loop:
 
73
        rjmp    .L_strncpy_clr_start
 
74
.L_strncpy_clr_loop:
73
75
        st      X+, __zero_reg__
74
 
.strncpy_clr_start:
 
76
.L_strncpy_clr_start:
75
77
        subi    len_lo, lo8(1)
76
78
        sbci    len_hi, hi8(1)
77
 
        brcc    .strncpy_clr_loop
78
 
.strncpy_done:
 
79
        brcc    .L_strncpy_clr_loop
 
80
.L_strncpy_done:
79
81
; return dest (unchanged)
80
82
        ret
81
 
.strncpy_end:
82
 
        .size   _U(strncpy), .strncpy_end - _U(strncpy)
 
83
.L_strncpy_end:
 
84
        .size   _U(strncpy), .L_strncpy_end - _U(strncpy)
83
85
 
84
 
#endif /* not DOXYGEN */
 
86
#endif /* not __DOXYGEN__ */