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) { |