void mystrncat (/*@unique@*/ /*@returned@*/ char *s1, char *s2, size_t n) /*@modifies *s1@*/ /*@requires MaxSet(s1) >= ( MaxRead(s1) + n); @*/ /*@ensures MaxRead(result) >= (MaxRead(s1) + n); @*/; void func(char *str) { char buffer[256]; char *b; b = malloc(256); assert(b != NULL); mystrncat(buffer, str, sizeof(buffer) - 1); mystrncat(b, str, sizeof(buffer) - 1); free (b); return; }