Module Name: src Committed By: roy Date: Fri Apr 20 10:39:37 UTC 2018
Modified Files: src/usr.sbin/rtadvd: config.c config.h dump.c dump.h if.c if.h rrenum.h rtadvd.c rtadvd.h timer.c timer.h Log Message: White space police. To generate a diff of this commit: cvs rdiff -u -r1.37 -r1.38 src/usr.sbin/rtadvd/config.c cvs rdiff -u -r1.9 -r1.10 src/usr.sbin/rtadvd/config.h cvs rdiff -u -r1.15 -r1.16 src/usr.sbin/rtadvd/dump.c \ src/usr.sbin/rtadvd/rtadvd.h cvs rdiff -u -r1.2 -r1.3 src/usr.sbin/rtadvd/dump.h cvs rdiff -u -r1.25 -r1.26 src/usr.sbin/rtadvd/if.c cvs rdiff -u -r1.10 -r1.11 src/usr.sbin/rtadvd/if.h cvs rdiff -u -r1.5 -r1.6 src/usr.sbin/rtadvd/rrenum.h cvs rdiff -u -r1.60 -r1.61 src/usr.sbin/rtadvd/rtadvd.c cvs rdiff -u -r1.14 -r1.15 src/usr.sbin/rtadvd/timer.c cvs rdiff -u -r1.8 -r1.9 src/usr.sbin/rtadvd/timer.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.sbin/rtadvd/config.c diff -u src/usr.sbin/rtadvd/config.c:1.37 src/usr.sbin/rtadvd/config.c:1.38 --- src/usr.sbin/rtadvd/config.c:1.37 Mon Nov 6 15:15:04 2017 +++ src/usr.sbin/rtadvd/config.c Fri Apr 20 10:39:37 2018 @@ -1,10 +1,10 @@ -/* $NetBSD: config.c,v 1.37 2017/11/06 15:15:04 christos Exp $ */ +/* $NetBSD: config.c,v 1.38 2018/04/20 10:39:37 roy Exp $ */ /* $KAME: config.c,v 1.93 2005/10/17 14:40:02 suz Exp $ */ /* * Copyright (C) 1998 WIDE Project. * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -16,7 +16,7 @@ * 3. Neither the name of the project nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -97,7 +97,7 @@ encode_domain(char *dst, const char *src src = p + 1; } *dst++ = '\0'; - + return dst - odst; } @@ -697,7 +697,7 @@ getconfig(const char *intface, int exith val64 > tmp->maxinterval * 2) { logit(LOG_ERR, "<%s> %s (%lld) on %s is invalid", - __func__, entbuf, (long long)val64, intface); + __func__, entbuf, (long long)val64, intface); goto errexit; } rdnss->lifetime = (uint32_t)val64; @@ -733,7 +733,7 @@ getconfig(const char *intface, int exith val64 > tmp->maxinterval * 2) { logit(LOG_ERR, "<%s> %s (%lld) on %s is invalid", - __func__, entbuf, (long long)val64, intface); + __func__, entbuf, (long long)val64, intface); goto errexit; } dnssl->lifetime = (uint32_t)val64; @@ -1123,8 +1123,8 @@ make_packet(struct rainfo *rainfo) packlen += sizeof(struct nd_opt_prefix_info) * rainfo->pfxs; if (rainfo->linkmtu) packlen += sizeof(struct nd_opt_mtu); - TAILQ_FOREACH(rti, &rainfo->route, next) - packlen += sizeof(struct nd_opt_route_info) + + TAILQ_FOREACH(rti, &rainfo->route, next) + packlen += sizeof(struct nd_opt_route_info) + ((rti->prefixlen + 0x3f) >> 6) * 8; TAILQ_FOREACH(rdns, &rainfo->rdnss, next) { @@ -1200,7 +1200,7 @@ make_packet(struct rainfo *rainfo) buf += sizeof(struct nd_opt_mtu); } - TAILQ_FOREACH(pfx, &rainfo->prefix, next) { + TAILQ_FOREACH(pfx, &rainfo->prefix, next) { uint32_t vltime, pltime; struct timespec now; @@ -1273,7 +1273,7 @@ make_packet(struct rainfo *rainfo) ndopt_rdnss->nd_opt_rdnss_reserved = 0; ndopt_rdnss->nd_opt_rdnss_lifetime = htonl(rdns->lifetime); buf += sizeof(*ndopt_rdnss); - + TAILQ_FOREACH(rdnsa, &rdns->list, next) { CHECKLEN(sizeof(rdnsa->addr)); memcpy(buf, &rdnsa->addr, sizeof(rdnsa->addr)); @@ -1290,7 +1290,7 @@ make_packet(struct rainfo *rainfo) ndopt_dnssl->nd_opt_dnssl_reserved = 0; ndopt_dnssl->nd_opt_dnssl_lifetime = htonl(dnsl->lifetime); buf += sizeof(*ndopt_dnssl); - + TAILQ_FOREACH(dnsd, &dnsl->list, next) { CHECKLEN(dnsd->len); memcpy(buf, dnsd->domain, dnsd->len); Index: src/usr.sbin/rtadvd/config.h diff -u src/usr.sbin/rtadvd/config.h:1.9 src/usr.sbin/rtadvd/config.h:1.10 --- src/usr.sbin/rtadvd/config.h:1.9 Thu Dec 13 15:36:36 2012 +++ src/usr.sbin/rtadvd/config.h Fri Apr 20 10:39:37 2018 @@ -1,10 +1,10 @@ -/* $NetBSD: config.h,v 1.9 2012/12/13 15:36:36 roy Exp $ */ +/* $NetBSD: config.h,v 1.10 2018/04/20 10:39:37 roy Exp $ */ /* $KAME: config.h,v 1.9 2003/08/06 04:19:40 ono Exp $ */ /* * Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project. * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -16,7 +16,7 @@ * 3. Neither the name of the project nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE Index: src/usr.sbin/rtadvd/dump.c diff -u src/usr.sbin/rtadvd/dump.c:1.15 src/usr.sbin/rtadvd/dump.c:1.16 --- src/usr.sbin/rtadvd/dump.c:1.15 Mon Nov 6 15:15:04 2017 +++ src/usr.sbin/rtadvd/dump.c Fri Apr 20 10:39:37 2018 @@ -1,10 +1,10 @@ -/* $NetBSD: dump.c,v 1.15 2017/11/06 15:15:04 christos Exp $ */ +/* $NetBSD: dump.c,v 1.16 2018/04/20 10:39:37 roy Exp $ */ /* $KAME: dump.c,v 1.34 2004/06/14 05:35:59 itojun Exp $ */ /* * Copyright (C) 2000 WIDE Project. * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -16,7 +16,7 @@ * 3. Neither the name of the project nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -255,7 +255,7 @@ if_dump(void) { if (p != dnsd->domain) fputc('.', fp); - while(len-- != 0) + while(len-- != 0) fputc(*p++, fp); } fputc('\n', fp); Index: src/usr.sbin/rtadvd/rtadvd.h diff -u src/usr.sbin/rtadvd/rtadvd.h:1.15 src/usr.sbin/rtadvd/rtadvd.h:1.16 --- src/usr.sbin/rtadvd/rtadvd.h:1.15 Mon Feb 27 05:41:36 2017 +++ src/usr.sbin/rtadvd/rtadvd.h Fri Apr 20 10:39:37 2018 @@ -1,10 +1,10 @@ -/* $NetBSD: rtadvd.h,v 1.15 2017/02/27 05:41:36 ozaki-r Exp $ */ +/* $NetBSD: rtadvd.h,v 1.16 2018/04/20 10:39:37 roy Exp $ */ /* $KAME: rtadvd.h,v 1.30 2005/10/17 14:40:02 suz Exp $ */ /* * Copyright (C) 1998 WIDE Project. * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -16,7 +16,7 @@ * 3. Neither the name of the project nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -38,7 +38,7 @@ #define IN6ADDR_SITELOCAL_ALLROUTERS_INIT \ {{{ 0xff, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }}} + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }}} //extern struct sockaddr_in6 sin6_linklocal_allnodes; //extern struct sockaddr_in6 sin6_linklocal_allrouters; @@ -156,7 +156,7 @@ struct rainfo { uint16_t lifetime; /* AdvDefaultLifetime */ uint16_t maxinterval; /* MaxRtrAdvInterval */ uint16_t mininterval; /* MinRtrAdvInterval */ - int managedflg; /* AdvManagedFlag */ + int managedflg; /* AdvManagedFlag */ int otherflg; /* AdvOtherConfigFlag */ int rtpref; /* router preference */ Index: src/usr.sbin/rtadvd/dump.h diff -u src/usr.sbin/rtadvd/dump.h:1.2 src/usr.sbin/rtadvd/dump.h:1.3 --- src/usr.sbin/rtadvd/dump.h:1.2 Sat Dec 10 19:14:29 2011 +++ src/usr.sbin/rtadvd/dump.h Fri Apr 20 10:39:37 2018 @@ -1,10 +1,10 @@ -/* $NetBSD: dump.h,v 1.2 2011/12/10 19:14:29 roy Exp $ */ +/* $NetBSD: dump.h,v 1.3 2018/04/20 10:39:37 roy Exp $ */ /* $KAME: dump.h,v 1.1 2000/05/23 11:31:26 itojun Exp $ */ /* * Copyright (C) 1998 WIDE Project. * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -16,7 +16,7 @@ * 3. Neither the name of the project nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE Index: src/usr.sbin/rtadvd/if.c diff -u src/usr.sbin/rtadvd/if.c:1.25 src/usr.sbin/rtadvd/if.c:1.26 --- src/usr.sbin/rtadvd/if.c:1.25 Mon Nov 6 15:15:04 2017 +++ src/usr.sbin/rtadvd/if.c Fri Apr 20 10:39:37 2018 @@ -1,10 +1,10 @@ -/* $NetBSD: if.c,v 1.25 2017/11/06 15:15:04 christos Exp $ */ +/* $NetBSD: if.c,v 1.26 2018/04/20 10:39:37 roy Exp $ */ /* $KAME: if.c,v 1.36 2004/11/30 22:32:01 suz Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -16,7 +16,7 @@ * 3. Neither the name of the project nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -68,7 +68,7 @@ static void get_rtaddrs(int addrs, struct sockaddr *sa, struct sockaddr **rti_info) { int i; - + for (i = 0; i < RTAX_MAX; i++) { if (addrs & (1 << i)) { rti_info[i] = sa; @@ -352,7 +352,7 @@ get_prefixlen(char *buf) struct rt_msghdr *rtm = (struct rt_msghdr *)buf; struct sockaddr *sa, *rti_info[RTAX_MAX]; unsigned char *p, *lim; - + sa = (struct sockaddr *)(rtm + 1); get_rtaddrs(rtm->rtm_addrs, sa, rti_info); sa = rti_info[RTAX_NETMASK]; Index: src/usr.sbin/rtadvd/if.h diff -u src/usr.sbin/rtadvd/if.h:1.10 src/usr.sbin/rtadvd/if.h:1.11 --- src/usr.sbin/rtadvd/if.h:1.10 Thu Dec 13 15:36:36 2012 +++ src/usr.sbin/rtadvd/if.h Fri Apr 20 10:39:37 2018 @@ -1,10 +1,10 @@ -/* $NetBSD: if.h,v 1.10 2012/12/13 15:36:36 roy Exp $ */ +/* $NetBSD: if.h,v 1.11 2018/04/20 10:39:37 roy Exp $ */ /* $KAME: if.h,v 1.12 2003/09/21 07:17:03 itojun Exp $ */ /* * Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project. * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -16,7 +16,7 @@ * 3. Neither the name of the project nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE Index: src/usr.sbin/rtadvd/rrenum.h diff -u src/usr.sbin/rtadvd/rrenum.h:1.5 src/usr.sbin/rtadvd/rrenum.h:1.6 --- src/usr.sbin/rtadvd/rrenum.h:1.5 Sat Dec 10 19:14:29 2011 +++ src/usr.sbin/rtadvd/rrenum.h Fri Apr 20 10:39:37 2018 @@ -1,10 +1,10 @@ -/* $NetBSD: rrenum.h,v 1.5 2011/12/10 19:14:29 roy Exp $ */ +/* $NetBSD: rrenum.h,v 1.6 2018/04/20 10:39:37 roy Exp $ */ /* $KAME: rrenum.h,v 1.3 2001/01/21 15:37:14 itojun Exp $ */ /* * Copyright (C) 1998 WIDE Project. * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -16,7 +16,7 @@ * 3. Neither the name of the project nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE Index: src/usr.sbin/rtadvd/rtadvd.c diff -u src/usr.sbin/rtadvd/rtadvd.c:1.60 src/usr.sbin/rtadvd/rtadvd.c:1.61 --- src/usr.sbin/rtadvd/rtadvd.c:1.60 Fri Apr 20 10:26:34 2018 +++ src/usr.sbin/rtadvd/rtadvd.c Fri Apr 20 10:39:37 2018 @@ -1,10 +1,10 @@ -/* $NetBSD: rtadvd.c,v 1.60 2018/04/20 10:26:34 roy Exp $ */ +/* $NetBSD: rtadvd.c,v 1.61 2018/04/20 10:39:37 roy Exp $ */ /* $KAME: rtadvd.c,v 1.92 2005/10/17 14:40:02 suz Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -16,7 +16,7 @@ * 3. Neither the name of the project nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -523,7 +523,7 @@ rtmsg_input(void) ifindex = get_ifan_ifindex(next); if (get_ifan_what(next) == IFAN_ARRIVAL) { logit(LOG_DEBUG, - "%s: interface %s arrived", + "%s: interface %s arrived", __func__, if_indextoname(ifindex, ifname)); if (if_argc == 0) { @@ -657,7 +657,7 @@ rtmsg_input(void) case RTM_IFANNOUNCE: if (get_ifan_what(next) == IFAN_DEPARTURE) { logit(LOG_DEBUG, - "%s: interface %s departed", + "%s: interface %s departed", __func__, rai->ifname); TAILQ_REMOVE(&ralist, rai, next); if (rai->leaving) @@ -718,7 +718,7 @@ rtadvd_input(void) int *hlimp = NULL; #ifdef OLDRAWSOCKET struct ip6_hdr *ip; -#endif +#endif struct icmp6_hdr *icp; int ifindex = 0; struct cmsghdr *cm; @@ -1099,7 +1099,7 @@ ra_input(int len, struct nd_router_adver goto done; } rai->rainput++; /* increment statistics */ - + /* Cur Hop Limit value */ if (ra->nd_ra_curhoplimit && rai->hoplimit && ra->nd_ra_curhoplimit != rai->hoplimit) { @@ -1198,7 +1198,7 @@ ra_input(int len, struct nd_router_adver if (inconsistent) rai->rainconsistent++; - + done: free_ndopts(&ndopts); } @@ -1351,7 +1351,7 @@ find_prefix(struct rainfo *rai, struct i if (memcmp(prefix, &pp->prefix, bytelen)) continue; if (bitlen == 0 || - ((prefix->s6_addr[bytelen] & bitmask) == + ((prefix->s6_addr[bytelen] & bitmask) == (pp->prefix.s6_addr[bytelen] & bitmask))) { return pp; } @@ -1377,7 +1377,7 @@ prefix_match(struct in6_addr *p0, int pl return 0; if (bitlen == 0 || ((p0->s6_addr[bytelen] & bitmask) == - (p1->s6_addr[bytelen] & bitmask))) { + (p1->s6_addr[bytelen] & bitmask))) { return 1; } @@ -1552,7 +1552,7 @@ sock_open(void) logit(LOG_ERR, "%s: IPV6_PKTINFO: %m", __func__); exit(EXIT_FAILURE); } -#endif +#endif on = 1; /* specify to tell value of hoplimit field of received IP6 hdr */ @@ -1603,7 +1603,7 @@ sock_open(void) /* * When attending router renumbering, join all-routers site-local - * multicast group. + * multicast group. */ if (accept_rr) { if (inet_pton(AF_INET6, ALLROUTERS_SITE, @@ -1633,7 +1633,7 @@ sock_open(void) exit(EXIT_FAILURE); } } - + /* initialize msghdr for receiving packets */ rcviov[0].iov_base = answer; rcviov[0].iov_len = sizeof(answer); Index: src/usr.sbin/rtadvd/timer.c diff -u src/usr.sbin/rtadvd/timer.c:1.14 src/usr.sbin/rtadvd/timer.c:1.15 --- src/usr.sbin/rtadvd/timer.c:1.14 Mon Nov 6 15:15:04 2017 +++ src/usr.sbin/rtadvd/timer.c Fri Apr 20 10:39:37 2018 @@ -1,10 +1,10 @@ -/* $NetBSD: timer.c,v 1.14 2017/11/06 15:15:04 christos Exp $ */ +/* $NetBSD: timer.c,v 1.15 2018/04/20 10:39:37 roy Exp $ */ /* $KAME: timer.c,v 1.11 2005/04/14 06:22:35 suz Exp $ */ /* * Copyright (C) 1998 WIDE Project. * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -16,7 +16,7 @@ * 3. Neither the name of the project nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE Index: src/usr.sbin/rtadvd/timer.h diff -u src/usr.sbin/rtadvd/timer.h:1.8 src/usr.sbin/rtadvd/timer.h:1.9 --- src/usr.sbin/rtadvd/timer.h:1.8 Fri Jun 5 14:09:20 2015 +++ src/usr.sbin/rtadvd/timer.h Fri Apr 20 10:39:37 2018 @@ -1,10 +1,10 @@ -/* $NetBSD: timer.h,v 1.8 2015/06/05 14:09:20 roy Exp $ */ +/* $NetBSD: timer.h,v 1.9 2018/04/20 10:39:37 roy Exp $ */ /* $KAME: timer.h,v 1.5 2002/05/31 13:30:38 jinmei Exp $ */ /* * Copyright (C) 1998 WIDE Project. * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -16,7 +16,7 @@ * 3. Neither the name of the project nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE