Diff for /libaitio/src/Attic/tools.c between versions 1.6 and 1.9

version 1.6, 2011/10/31 13:53:51 version 1.9, 2012/03/15 01:52:23
Line 12  terms: Line 12  terms:
 All of the documentation and software included in the ELWIX and AITNET  All of the documentation and software included in the ELWIX and AITNET
 Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>  Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
   
Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
         by Michael Pounov <misho@elwix.org>.  All rights reserved.          by Michael Pounov <misho@elwix.org>.  All rights reserved.
   
 Redistribution and use in source and binary forms, with or without  Redistribution and use in source and binary forms, with or without
Line 297  io_FreeNullTerm(char *** __restrict arr) Line 297  io_FreeNullTerm(char *** __restrict arr)
 }  }
   
 /*  /*
    * io_Path2File() - Parse and make path/filename pair
    *
    * @csArgs = Input argument line
    * @psPath = Output Path, if ==NULL path not returned
    * @pathLen = Size of path array
    * @psFile = Output File
    * @fileLen = Size of file array
    * return: 0 error format; -1 error:: can`t read; >0 ok, number of readed items
    */
   inline int
   io_Path2File(const char * __restrict csArgs, char * __restrict psPath, 
                   int pathLen, char * __restrict psFile, int fileLen)
   {
           char *pos, *psBuf;
   
           if (!csArgs || !psFile || !fileLen)
                   return -1;
           if (psPath && !pathLen)
                   return -1;
   
           psBuf = strdup(csArgs);
           if (!psBuf) {
                   LOGERR;
                   return -1;
           }
   
           pos = strrchr(psBuf, '/');
           if (!pos) {
                   strlcpy(psFile, psBuf, fileLen);
   
                   free(psBuf);
                   return 1;
           } else
                   *pos++ = 0;
   
           strlcpy(psFile, pos, fileLen);
           if (psPath)
                   strlcpy(psPath, psBuf, pathLen);
   
           free(psBuf);
           return 2;
   }
   
   /*
  * io_ether_ntoa() Convert ethernet address to string   * io_ether_ntoa() Convert ethernet address to string
  * @n = ethernet address structure, like struct ether_addr   * @n = ethernet address structure, like struct ether_addr
  * @a = string   * @a = string
Line 346  io_ether_aton(const char *a, struct io_ether_addr *e) Line 390  io_ether_aton(const char *a, struct io_ether_addr *e)
         e->ether_addr_octet[5] = o5;          e->ether_addr_octet[5] = o5;
   
         return e;          return e;
   }
   
   /*
    * io_n2port() Extract port from network structure
    * @addr = Address
    * return: 0 not supported family type or port number
    */
   inline u_short
   io_n2port(io_sockaddr_t * __restrict addr)
   {
           u_short port = 0;
   
           if (!addr)
                   return port;
   
           switch (addr->sa.sa_family) {
                   case AF_INET:
                           return ntohs(addr->sin.sin_port);
                   case AF_INET6:
                           return ntohs(addr->sin6.sin6_port);
                   default:
                           io_SetErr(ESOCKTNOSUPPORT, "Unsuported address family %d", 
                                           addr->sa.sa_family);
                           break;
           }
   
           return port;
   }
   
   /*
    * io_n2addr() Extract address from network structure
    * @addr = Address
    * @val = Value for store string address
    * return: NULL error or !=NULL string address from val
    */
   const char *
   io_n2addr(io_sockaddr_t * __restrict addr, ait_val_t * __restrict val)
   {
           char str[INET6_ADDRSTRLEN] = { 0 };
           const char *ret = NULL;
   
           if (!addr || !val)
                   return ret;
   
           switch (addr->sa.sa_family) {
                   case AF_INET:
                           if (!inet_ntop(AF_INET, &addr->sin.sin_addr, str, INET_ADDRSTRLEN)) {
                                   LOGERR;
                                   return ret;
                           } else
                                   ret = str;
                           break;
                   case AF_INET6:
                           if (!inet_ntop(AF_INET6, &addr->sin6.sin6_addr, str, INET6_ADDRSTRLEN)) {
                                   LOGERR;
                                   return ret;
                           } else
                                   ret = str;
                           break;
                   default:
                           io_SetErr(EPROTONOSUPPORT, "Unsuported address family %d", 
                                           addr->sa.sa_family);
                           return ret;
           }
   
           if (!AIT_ISEMPTY(val))
                   AIT_FREE_VAL(val);
           AIT_SET_STR(val, ret);
           return (const char*) AIT_GET_STR(val);
   }
   
   /*
    * io_gethostbyname() Get host and port and make network structure
    * @psHost = Hostname
    * @port = Port
    * @addr = Network address structure
    * return: NULL error or !=NULL network structure
    */
   io_sockaddr_t *
   io_gethostbyname(const char *psHost, u_short port, io_sockaddr_t * __restrict addr)
   {
           struct hostent *host;
   
           if (!psHost || !addr)
                   return NULL;
   
           /* resolver */
           if (!addr->sa.sa_family)
                   host = gethostbyname(psHost);
           else
                   host = gethostbyname2(psHost, addr->sa.sa_family);
           if (!host) {
                   io_SetErr(EINVAL, "Resolver #%d - %s", h_errno, hstrerror(h_errno));
                   return NULL;
           }
   
           memset(addr, 0, sizeof(io_sockaddr_t));
           switch (host->h_addrtype) {
                   case AF_INET:
                           addr->sin.sin_len = sizeof(struct sockaddr_in);
                           addr->sin.sin_family = AF_INET;
                           addr->sin.sin_port = htons(port);
                           memcpy(&addr->sin.sin_addr, host->h_addr, sizeof addr->sin.sin_addr);
                           return addr;
                   case AF_INET6:
                           addr->sin6.sin6_len = sizeof(struct sockaddr_in6);
                           addr->sin6.sin6_family = AF_INET6;
                           addr->sin6.sin6_port = htons(port);
                           memcpy(&addr->sin6.sin6_addr, host->h_addr, sizeof addr->sin6.sin6_addr);
                           return addr;
                   default:
                           io_SetErr(EPROTONOSUPPORT, "Unsuported address family %d", 
                                           host->h_addrtype);
                           break;
           }
   
           return NULL;
 }  }

Removed from v.1.6  
changed lines
  Added in v.1.9


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>