Diff for /libaitio/src/aitio.c between versions 1.8.6.1 and 1.11.8.1

version 1.8.6.1, 2012/03/27 21:37:56 version 1.11.8.1, 2012/08/01 08:51:00
Line 47  SUCH DAMAGE. Line 47  SUCH DAMAGE.
   
   
 int io_Debug;  int io_Debug;
   mpool_t *io_mpool;
   
   
   /* Memory management */
   
   void *(*io_malloc)(size_t) = malloc;
   void *(*io_calloc)(size_t, size_t) = calloc;
   void *(*io_realloc)(void*, size_t) = realloc;
   char *(*io_strdup)(const char*) = strdup;
   void (*io_free)(void*) = free;
   
   
 #pragma GCC visibility push(hidden)  #pragma GCC visibility push(hidden)
   
   int use_mm;
   
 int io_Errno;  int io_Errno;
 char io_Error[STRSIZ];  char io_Error[STRSIZ];
   
Line 84  io_SetErr(int eno, char *estr, ...) Line 96  io_SetErr(int eno, char *estr, ...)
         va_end(lst);          va_end(lst);
 }  }
   
   // io_mm_inuse() Check for memory management model
   inline int
   io_mm_inuse()
   {
           return use_mm & IO_MPOOL;
   }
   
   
   // init libaitio routine
   void
   _init()
   {
           ioLibInit(IO_MPOOL, 0);
   }
   
   // fini libaitio routine
   void
   _fini()
   {
           ioLibFini();
   }
   
 /*  /*
 * ioPromptRead() Read data from input h[0] with prompt to output h[1] * ioLibInit() - Init libaitio library memory management
  *   *
    * @mm = memory management (IO_SYSM or IO_MPOOL)
    * @maxmem = memory limit
    * return: -1 error or !=-1 used memory management model
    */
   inline int
   ioLibInit(int mm, u_long maxmem)
   {
           switch (mm) {
                   case IO_MPOOL:  /* mpool */
                           io_mpool = mpool_init(maxmem);
                           if (io_mpool) {
                                   io_malloc = mpool_xmalloc;
                                   io_calloc = mpool_xcalloc;
                                   io_realloc = mpool_xrealloc;
                                   io_strdup = mpool_xstrdup;
                                   io_free = mpool_xfree;
                                   use_mm = mm;
                                   break;
                           } else {
                                   #undef USE_MPOOL
                           }
                   case IO_SYSM:   /* system */
                           io_malloc = malloc;
                           io_calloc = calloc;
                           io_realloc = realloc;
                           io_strdup = strdup;
                           io_free = free;
                           use_mm = mm;
                           break;
                   default:        /* not supported */
                           io_SetErr(EINVAL, "Not supported memory management");
                           return -1;
           }
   
           return use_mm;
   }
   
   /*
    * ioLibFini() - Finish libaitio library memory management
    *
    * return: none
    */
   inline void
   ioLibFini()
   {
           switch (use_mm) {
                   case IO_MPOOL:
                           mpool_destroy(&io_mpool);
   
                           io_malloc = malloc;
                           io_calloc = calloc;
                           io_realloc = realloc;
                           io_strdup = strdup;
                           io_free = free;
                           use_mm = IO_SYSM;
                           break;
           }
   }
   
   
   /*
    * ioPromptRead() - Read data from input h[0] with prompt to output h[1]
    *
  * @h = file handles h[0] = input, h[1] = output, if NULL use stdin, stdout   * @h = file handles h[0] = input, h[1] = output, if NULL use stdin, stdout
  * @csPrompt = Prompt before input, may be NULL   * @csPrompt = Prompt before input, may be NULL
  * @psData = Readed data   * @psData = Readed data
Line 140  ioPromptRead(int *h, const char *csPrompt, char * __re Line 236  ioPromptRead(int *h, const char *csPrompt, char * __re
 }  }
   
 /*  /*
 * ioPromptPassword() Read password from input h[0] with prompt to output h[1] * ioPromptPassword() - Read password from input h[0] with prompt to output h[1]
  *   *
  * @h = file handles h[0] = input, h[1] = output, if NULL use stdin, stdout   * @h = file handles h[0] = input, h[1] = output, if NULL use stdin, stdout
  * @csPrompt = Prompt before input, may be NULL   * @csPrompt = Prompt before input, may be NULL
Line 227  next: Line 323  next:
 }  }
   
 /*  /*
 * ioRegexVerify() Function for verify data match in regex expression * ioRegexVerify() - Function for verify data match in regex expression
  *   *
  * @csRegex = Regulare expression pattern   * @csRegex = Regulare expression pattern
  * @csData = Data for check and verify   * @csData = Data for check and verify
Line 249  ioRegexVerify(const char *csRegex, const char *csData, Line 345  ioRegexVerify(const char *csRegex, const char *csData,
   
         if ((ret = regcomp(&re, csRegex, REG_EXTENDED))) {          if ((ret = regcomp(&re, csRegex, REG_EXTENDED))) {
                 regerror(ret, &re, szErr, STRSIZ);                  regerror(ret, &re, szErr, STRSIZ);
                io_SetErr(ret, "Error:: %s\n", szErr);                io_SetErr(ret, "%s", szErr);
                 regfree(&re);                  regfree(&re);
                 return NULL;                  return NULL;
         }          }
Line 267  ioRegexVerify(const char *csRegex, const char *csData, Line 363  ioRegexVerify(const char *csRegex, const char *csData,
   
         if (ret) {          if (ret) {
                 regerror(ret, &re, szErr, STRSIZ);                  regerror(ret, &re, szErr, STRSIZ);
                io_SetErr(ret, "Error:: %s\n", szErr);                io_SetErr(ret, "%s", szErr);
                 pos = NULL;                  pos = NULL;
         }          }
   
Line 276  ioRegexVerify(const char *csRegex, const char *csData, Line 372  ioRegexVerify(const char *csRegex, const char *csData,
 }  }
   
 /*  /*
 * ioRegexGet() Function for get data match in regex expression * ioRegexGet() - Function for get data match in regex expression
  *   *
  * @csRegex = Regulare expression pattern   * @csRegex = Regulare expression pattern
  * @csData = Data from get   * @csData = Data from get
Line 307  ioRegexGet(const char *csRegex, const char *csData, ch Line 403  ioRegexGet(const char *csRegex, const char *csData, ch
 }  }
   
 /*  /*
 * ioRegexReplace() Function for replace data match in regex expression with newdata * ioRegexReplace() - Function for replace data match in regex expression with newdata
  *   *
  * @csRegex = Regulare expression pattern   * @csRegex = Regulare expression pattern
  * @csData = Source data   * @csData = Source data
  * @csNew = Data for replace   * @csNew = Data for replace
 * return: NULL not match or error; !=NULL allocated new string, must be free after use! * return: NULL not match or error; !=NULL allocated new string, must be io_free after use!
 */  */
 char *  char *
 ioRegexReplace(const char *csRegex, const char *csData, const char *csNew)  ioRegexReplace(const char *csRegex, const char *csData, const char *csNew)
Line 328  ioRegexReplace(const char *csRegex, const char *csData Line 424  ioRegexReplace(const char *csRegex, const char *csData
   
         // ___ before match          // ___ before match
         len = sp + 1;          len = sp + 1;
        str = malloc(len);        str = io_malloc(len);
         if (!str) {          if (!str) {
                 LOGERR;                  LOGERR;
                 return NULL;                  return NULL;
Line 337  ioRegexReplace(const char *csRegex, const char *csData Line 433  ioRegexReplace(const char *csRegex, const char *csData
         // * replace match *          // * replace match *
         if (csNew) {          if (csNew) {
                 len += strlen(csNew);                  len += strlen(csNew);
                str = realloc(str, len);                str = io_realloc(str, len);
                 if (!str) {                  if (!str) {
                         LOGERR;                          LOGERR;
                         return NULL;                          return NULL;
Line 346  ioRegexReplace(const char *csRegex, const char *csData Line 442  ioRegexReplace(const char *csRegex, const char *csData
         }          }
         // after match ___          // after match ___
         len += strlen(csData) - ep;          len += strlen(csData) - ep;
        str = realloc(str, len);        str = io_realloc(str, len);
         if (!str) {          if (!str) {
                 LOGERR;                  LOGERR;
                 return NULL;                  return NULL;
Line 357  ioRegexReplace(const char *csRegex, const char *csData Line 453  ioRegexReplace(const char *csRegex, const char *csData
 }  }
   
 /*  /*
 * ioStrAst() Function for evaluate string like asterisk variable "{text[:[-]#[:#]]}" * ioStrAst() - Function for evaluate string like asterisk variable "{text[:[-]#[:#]]}"
  *   *
  * @csString = Input string   * @csString = Input string
 * return: NULL error, !=NULL Allocated new string evaluated from input string, must be free() * return: NULL error, !=NULL Allocated new string evaluated from input string, must be io_free()
 */  */
 char *  char *
 ioStrAst(const char *csString)  ioStrAst(const char *csString)
Line 373  ioStrAst(const char *csString) Line 469  ioStrAst(const char *csString)
   
         if (!strchr(csString, '{') || !strrchr(csString, '}')) {          if (!strchr(csString, '{') || !strrchr(csString, '}')) {
                 memset(io_Error, 0, STRSIZ);                  memset(io_Error, 0, STRSIZ);
                snprintf(io_Error, STRSIZ, "Error:: Invalid input string format ... "                snprintf(io_Error, STRSIZ, "Invalid input string format ... "
                                 "must be like {text[:[-]#[:#]]}");                                  "must be like {text[:[-]#[:#]]}");
                 io_Errno = EINVAL;                  io_Errno = EINVAL;
                 return NULL;                  return NULL;
         } else {          } else {
                str = strdup(strchr(csString, '{') + 1);                str = io_strdup(strchr(csString, '{') + 1);
                 *strrchr(str, '}') = 0;                  *strrchr(str, '}') = 0;
         }          }
   
Line 400  ioStrAst(const char *csString) Line 496  ioStrAst(const char *csString)
                 /* ok, clear show */                  /* ok, clear show */
                 ext = str;                  ext = str;
   
        out = strdup(ext);        out = io_strdup(ext);
        free(str);        io_free(str);
   
         return out;          return out;
 }  }
   
   
 /*  /*
 * ioMkDir() Function for racursive directory creation and validation * ioMkDir() - Function for racursive directory creation and validation
  *   *
  * @csDir = Full directory path   * @csDir = Full directory path
  * @mode = Mode for directory creation if missing dir   * @mode = Mode for directory creation if missing dir
Line 423  ioMkDir(const char *csDir, int mode) Line 519  ioMkDir(const char *csDir, int mode)
         if (!csDir)          if (!csDir)
                 return cx;                  return cx;
   
        str = strdup(csDir);        str = io_strdup(csDir);
         if (!str) {          if (!str) {
                 LOGERR;                  LOGERR;
                 return cx;                  return cx;
Line 451  ioMkDir(const char *csDir, int mode) Line 547  ioMkDir(const char *csDir, int mode)
         }          }
 end:  end:
         chdir(szOld);          chdir(szOld);
        free(str);        io_free(str);
         return cx;          return cx;
 }  }
   
 /*  /*
 * ioWatchDirLoop() Function for watching changes in directory and fire callback * ioWatchDirLoop() - Function for watching changes in directory and fire callback
  *   *
  * @csDir = Full directory path   * @csDir = Full directory path
  * @callback = Callback if raise event! nOp -1 delete, 0 change/move, 1 create   * @callback = Callback if raise event! nOp -1 delete, 0 change/move, 1 create
Line 568  ioWatchDirLoop(const char *csDir, int (*callback)(cons Line 664  ioWatchDirLoop(const char *csDir, int (*callback)(cons
 }  }
   
 /*  /*
 * ioCreatePIDFile() Create PID file * ioCreatePIDFile() - Create PID file
  *   *
  * @csName = PID filename   * @csName = PID filename
  * @ifExists = !=0 if filename exists return error   * @ifExists = !=0 if filename exists return error
Line 596  ioCreatePIDFile(const char *csName, int ifExists) Line 692  ioCreatePIDFile(const char *csName, int ifExists)
   
   
 /*  /*
 * ioSendFile() AITNET sendfile() userland implementation, not dependant from OS * ioSendFile() - AITNET sendfile() userland implementation, not dependant from OS
  *   *
  * @s = socket   * @s = socket
  * @csFile = file for send   * @csFile = file for send
Line 663  ioSendFile(int s, const char *csFile, size_t sendLen,  Line 759  ioSendFile(int s, const char *csFile, size_t sendLen, 
 }  }
   
 /*  /*
 * ioRecvFile() Receive file from socket, fastest (zero-copy) way * ioRecvFile() - Receive file from socket, fastest (zero-copy) way
  *   *
  * @s = socket   * @s = socket
  * @csFile = file for receive   * @csFile = file for receive
Line 698  ioRecvFile(int s, const char *csFile, size_t recvLen,  Line 794  ioRecvFile(int s, const char *csFile, size_t recvLen, 
                 unlink(csFile);                  unlink(csFile);
                 return 0;                  return 0;
         }          }
        if (lseek(fd, recvLen - 1, SEEK_SET) == -1) {        if (ftruncate(fd, recvLen) == -1) {
                LOGERR; 
                close(fd); 
                unlink(csFile); 
                return 0; 
        } 
        if (write(fd, "", 1) == -1) { 
                 LOGERR;                  LOGERR;
                 close(fd);                  close(fd);
                 unlink(csFile);                  unlink(csFile);

Removed from v.1.8.6.1  
changed lines
  Added in v.1.11.8.1


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