Rev 4267 | Rev 4312 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4267 | Rev 4281 | ||
---|---|---|---|
Line 106... | Line 106... | ||
106 | #include <cpu.h> |
106 | #include <cpu.h> |
107 | #include <arch/asm.h> |
107 | #include <arch/asm.h> |
108 | #include <arch.h> |
108 | #include <arch.h> |
109 | #include <errno.h> |
109 | #include <errno.h> |
110 | #include <align.h> |
110 | #include <align.h> |
- | 111 | #include <debug.h> |
|
111 | 112 | ||
112 | /** Byte mask consisting of lowest @n bits (out of 8) */ |
113 | /** Byte mask consisting of lowest @n bits (out of 8) */ |
113 | #define LO_MASK_8(n) ((uint8_t) ((1 << (n)) - 1)) |
114 | #define LO_MASK_8(n) ((uint8_t) ((1 << (n)) - 1)) |
114 | 115 | ||
115 | /** Byte mask consisting of lowest @n bits (out of 32) */ |
116 | /** Byte mask consisting of lowest @n bits (out of 32) */ |
Line 534... | Line 535... | ||
534 | * No more than @a size bytes are written. If the size of the output buffer |
535 | * No more than @a size bytes are written. If the size of the output buffer |
535 | * is at least one byte, the output string will always be well-formed, i.e. |
536 | * is at least one byte, the output string will always be well-formed, i.e. |
536 | * null-terminated and containing only complete characters. |
537 | * null-terminated and containing only complete characters. |
537 | * |
538 | * |
538 | * @param dst Destination buffer. |
539 | * @param dst Destination buffer. |
539 | * @param count Size of the destination buffer. |
540 | * @param count Size of the destination buffer (must be > 0). |
540 | * @param src Source string. |
541 | * @param src Source string. |
541 | */ |
542 | */ |
542 | void str_cpy(char *dest, size_t size, const char *src) |
543 | void str_cpy(char *dest, size_t size, const char *src) |
543 | { |
544 | { |
544 | wchar_t ch; |
545 | wchar_t ch; |
545 | size_t src_off; |
546 | size_t src_off; |
546 | size_t dest_off; |
547 | size_t dest_off; |
547 | 548 | ||
548 | /* No space for the NULL-terminator in the buffer. */ |
549 | /* There must be space for a null terminator in the buffer. */ |
549 | if (size == 0) |
550 | ASSERT(size > 0); |
550 | return; |
- | |
551 | 551 | ||
552 | src_off = 0; |
552 | src_off = 0; |
553 | dest_off = 0; |
553 | dest_off = 0; |
554 | 554 | ||
555 | while ((ch = str_decode(src, &src_off, STR_NO_LIMIT)) != 0) { |
555 | while ((ch = str_decode(src, &src_off, STR_NO_LIMIT)) != 0) { |
Line 560... | Line 560... | ||
560 | dest[dest_off] = '\0'; |
560 | dest[dest_off] = '\0'; |
561 | } |
561 | } |
562 | 562 | ||
563 | /** Copy size-limited substring. |
563 | /** Copy size-limited substring. |
564 | * |
564 | * |
565 | * Copy source string @a src to destination buffer @a dest. |
565 | * Copy prefix of string @a src of max. size @a size to destination buffer |
566 | * No more than @a size bytes are written. If the size of the output buffer |
566 | * @a dest. No more than @a size bytes are written. The output string will |
567 | * is at least one byte, the output string will always be well-formed, i.e. |
567 | * always be well-formed, i.e. null-terminated and containing only complete |
568 | * null-terminated and containing only complete characters. |
568 | * characters. |
569 | * |
569 | * |
570 | * No more than @a n bytes are read from the input string, so it does not |
570 | * No more than @a n bytes are read from the input string, so it does not |
571 | * have to be null-terminated. |
571 | * have to be null-terminated. |
572 | * |
572 | * |
573 | * @param dst Destination buffer. |
573 | * @param dst Destination buffer. |
574 | * @param count Size of the destination buffer. |
574 | * @param count Size of the destination buffer (must be > 0). |
575 | * @param src Source string. |
575 | * @param src Source string. |
- | 576 | * @param n Maximum number of bytes to read from @a src. |
|
576 | */ |
577 | */ |
577 | void str_ncpy(char *dest, size_t size, const char *src, size_t n) |
578 | void str_ncpy(char *dest, size_t size, const char *src, size_t n) |
578 | { |
579 | { |
579 | wchar_t ch; |
580 | wchar_t ch; |
580 | size_t src_off; |
581 | size_t src_off; |
581 | size_t dest_off; |
582 | size_t dest_off; |
582 | 583 | ||
583 | /* No space for the null terminator in the buffer. */ |
584 | /* There must be space for a null terminator in the buffer. */ |
584 | if (size == 0) |
585 | ASSERT(size > 0); |
585 | return; |
- | |
586 | 586 | ||
587 | src_off = 0; |
587 | src_off = 0; |
588 | dest_off = 0; |
588 | dest_off = 0; |
589 | 589 | ||
590 | while ((ch = str_decode(src, &src_off, n)) != 0) { |
590 | while ((ch = str_decode(src, &src_off, n)) != 0) { |