str.c 531 B

123456789101112131415161718
  1. #include <stdio.h>
  2. #include <string.h>
  3. int rgpgfs_strncpy_without_suffix(char *dest, const char *src,
  4. const char *suffix, size_t max_len) {
  5. size_t src_len = strnlen(src, FILENAME_MAX);
  6. size_t suffix_len = strnlen(suffix, FILENAME_MAX);
  7. if (suffix_len > src_len) {
  8. return 1;
  9. }
  10. size_t suffix_pos = src_len - suffix_len;
  11. if (suffix_pos > max_len || strcmp(&src[suffix_pos], suffix) != 0) {
  12. return 1;
  13. }
  14. strncpy(dest, src, suffix_pos);
  15. dest[suffix_pos] = '\0';
  16. return 0;
  17. }