+
+char *strndup_chk(const char *s, size_t len, const char *tag)
+{
+ assert(s != NULL);
+ char *t = NULL;
+
+ if(len < strlen(s)) {
+ t = malloc_chk(len + 1, tag);
+ strncpy(t, s, len);
+ t[len] = '\0';
+ } else {
+ t = strdup_chk(s, tag);
+ }
+ return t;
+}
+
+char *strip_end(char *s)
+{
+ int i;
+ i = strlen(s) - 1;
+ while(i > 0 && (s[i] == '\n' || s[i] == ' ' || s[i] == '\t')) {
+ s[i--] = '\0';
+ }
+ return s;
+}