Diff for /libaitio/src/Attic/tools.c between versions 1.4 and 1.7

version 1.4, 2011/04/20 22:56:32 version 1.7, 2011/12/13 02:23:08
Line 52  SUCH DAMAGE. Line 52  SUCH DAMAGE.
  * @psLine = Text string   * @psLine = Text string
  * return: 0 nothing to do; !=0 Removed bytes   * return: 0 nothing to do; !=0 Removed bytes
 */  */
inline int io_LTrimStr(u_char * __restrict psLine)inline int
 io_LTrimStr(u_char * __restrict psLine)
 {  {
         int pos = 0;          int pos = 0;
         u_char *s;          u_char *s;
Line 72  inline int io_LTrimStr(u_char * __restrict psLine) Line 73  inline int io_LTrimStr(u_char * __restrict psLine)
  * @psLine = Text string   * @psLine = Text string
  * return: 0 nothing to do; !=0 Removed bytes   * return: 0 nothing to do; !=0 Removed bytes
 */  */
inline int io_RTrimStr(u_char * __restrict psLine)inline int
 io_RTrimStr(u_char * __restrict psLine)
 {  {
         u_char *t, *pos;          u_char *t, *pos;
   
Line 91  inline int io_RTrimStr(u_char * __restrict psLine) Line 93  inline int io_RTrimStr(u_char * __restrict psLine)
  * @psLine = Text string   * @psLine = Text string
  * return: 0 nothing to do; !=0 Removed bytes   * return: 0 nothing to do; !=0 Removed bytes
 */  */
inline int io_TrimStr(u_char * __restrict psLine)inline int
 io_TrimStr(u_char * __restrict psLine)
 {  {
         int ret = 0;          int ret = 0;
   
Line 106  inline int io_TrimStr(u_char * __restrict psLine) Line 109  inline int io_TrimStr(u_char * __restrict psLine)
  * @psLine = Text string   * @psLine = Text string
  * return: 0 nothing to do; 1 successful unquoted string   * return: 0 nothing to do; 1 successful unquoted string
 */  */
inline int io_UnquotStr(u_char * __restrict psLine)inline int
 io_UnquotStr(u_char * __restrict psLine)
 {  {
         char *pos, *str = NULL;          char *pos, *str = NULL;
         int flg;          int flg;
Line 139  inline int io_UnquotStr(u_char * __restrict psLine) Line 143  inline int io_UnquotStr(u_char * __restrict psLine)
  * @lineLen = Length of Text string   * @lineLen = Length of Text string
  * return: NULL nothing to do or error; !=0 Allocated new converted data without term\0 (must be free)   * return: NULL nothing to do or error; !=0 Allocated new converted data without term\0 (must be free)
 */  */
inline u_char *io_Ch2Hex(u_char *psLine, int lineLen)inline u_char *
 io_Ch2Hex(u_char *psLine, int lineLen)
 {  {
         register int i;          register int i;
         char szWork[3];          char szWork[3];
Line 170  inline u_char *io_Ch2Hex(u_char *psLine, int lineLen) Line 175  inline u_char *io_Ch2Hex(u_char *psLine, int lineLen)
  * @lineLen = Length of Text string   * @lineLen = Length of Text string
  * return: NULL nothing to do or error; !=0 Allocated new converted string(must be free)   * return: NULL nothing to do or error; !=0 Allocated new converted string(must be free)
 */  */
inline char *io_Hex2Ch(u_char *psLine, int lineLen)inline char *
 io_Hex2Ch(u_char *psLine, int lineLen)
 {  {
         register int i;          register int i;
         char szWork[3], *str;          char szWork[3], *str;
Line 192  inline char *io_Hex2Ch(u_char *psLine, int lineLen) Line 198  inline char *io_Hex2Ch(u_char *psLine, int lineLen)
         }          }
   
         return str;          return str;
   }
   
   /*
    * io_CopyEnv() Copy environment to new environment array;
    * @oldenv = Environment array
    * return: NULL error; !=NULL Allocated new environment array(must be free)
   */
   char **
   io_CopyEnv(const char **oldenv)
   {
           char **newenv, **el;
           register int i, num;
   
           if (!oldenv)
                   return NULL;
           else
                   newenv = el = NULL;
   
           /* count items environment */
           for (i = num = 0; oldenv[i]; i++)
                   if (*strchr(oldenv[i], '='))
                           num++;
   
           /* create and copy new environment */
           newenv = calloc(num + 1, sizeof(char*));
           if (!newenv) {
                   LOGERR;
                   return NULL;
           } else
                   el = newenv;
   
           for (i = 0; oldenv[i]; i++)
                   if (*strchr(oldenv[i], '=')) {
                           *el = strdup(oldenv[i]);
                           el++;
                   }
           *el = NULL;
   
           return newenv;
   }
   
   /*
    * io_ExecArgs() Build exec arguments from other array
    * @psProg = Program name for execute
    * @oldarg = Arguments array
    * return: NULL error; !=NULL Allocated execution array(must be free)
   */
   char **
   io_ExecArgs(const char *psProg, const char **oldarg)
   {
           char **newarg, **el;
           register int i, num;
   
           if (!psProg || !oldarg)
                   return NULL;
           else
                   newarg = el = NULL;
   
           /* count items arguments */
           for (num = 0; oldarg[num]; num++);
   
           /* create and copy new arguments */
           newarg = calloc(num + 2, sizeof(char*));
           if (!newarg) {
                   LOGERR;
                   return NULL;
           } else
                   el = newarg;
   
           *el = strdup(psProg);
           el++;
   
           for (i = 0; oldarg[i]; i++, el++)
                   *el = strdup(oldarg[i]);
           *el = NULL;
   
           return newarg;
   }
   
   /*
    * io_FreeNullTerm() Free dynamic allocated null terminated array with strings
    * @arr = Pointer to array for free
    * return: none
   */
   inline void
   io_FreeNullTerm(char *** __restrict arr)
   {
           char **a;
   
           if (arr && *arr) {
                   a = *arr;
                   while (a && *a)
                           free(*a++);
                   free(*arr);
                   *arr = NULL;
           }
   }
   
   /*
    * io_ether_ntoa() Convert ethernet address to string
    * @n = ethernet address structure, like struct ether_addr
    * @a = string
    * @len = string length
    * return: NULL error or !=NULL string a
    */
   inline char *
   io_ether_ntoa(const struct io_ether_addr *n, char * __restrict a, int len)
   {
           if (!n || !a)
                   return NULL;
   
           memset(a, 0, len);
           if (snprintf(a, len, "%02x:%02x:%02x:%02x:%02x:%02x", 
                           n->ether_addr_octet[0], n->ether_addr_octet[1], 
                           n->ether_addr_octet[2], n->ether_addr_octet[3], 
                           n->ether_addr_octet[4], n->ether_addr_octet[5]) < 17)
                   return NULL;
   
           return a;
   }
   
   /*
    * io_ether_aton() Convert string to ethernet address
    * @a = string
    * @e = ethernet address structure, like struct ether_addr
    * return: NULL error or !=NULL ethernet address structure
    */
   inline struct io_ether_addr *
   io_ether_aton(const char *a, struct io_ether_addr *e)
   {                       
           int i;
           u_int o0, o1, o2, o3, o4, o5;
   
           if (!a || !e)
                   return NULL;
   
           i = sscanf(a, "%x:%x:%x:%x:%x:%x", &o0, &o1, &o2, &o3, &o4, &o5);
           if (i != 6)
                   return NULL;
   
           e->ether_addr_octet[0] = o0;
           e->ether_addr_octet[1] = o1;
           e->ether_addr_octet[2] = o2;
           e->ether_addr_octet[3] = o3;
           e->ether_addr_octet[4] = o4;
           e->ether_addr_octet[5] = o5;
   
           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;
           }
   
           AIT_FREE_VAL(val);
           AIT_SET_STR(val, ret);
           return ret;
   }
   
   /*
    * 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.4  
changed lines
  Added in v.1.7


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