misc.h

00001 /* 
00002  * Copyright (c) 2005-2012 by KoanLogic s.r.l. - All rights reserved.  
00003  */
00004 
00005 #ifndef _U_MISC_H_
00006 #define _U_MISC_H_
00007 
00008 #include <u/libu.h>
00009 
00010 #include <unistd.h>
00011 #include <stdlib.h>
00012 #include <stdio.h>
00013 #include <limits.h>
00014 
00015 #ifdef __cplusplus
00016 extern "C" {
00017 #endif
00018 
00025 #ifndef PATH_MAX
00026   #define U_PATH_MAX 4096
00027 #else
00028   #define U_PATH_MAX PATH_MAX
00029 #endif
00030 
00032 #ifdef NAME_MAX
00033   #define U_NAME_MAX NAME_MAX
00034 #else
00035   #ifdef FILENAME_MAX
00036     #define U_NAME_MAX FILENAME_MAX
00037   #else
00038     #define U_NAME_MAX 512
00039   #endif 
00040 #endif
00041 
00043 #define U_FILENAME_MAX (U_PATH_MAX + U_NAME_MAX)
00044 
00045 #define U_CLOSE(fd) do {if (fd != -1) { close(fd); fd = -1; }} while (0)
00046 #define U_FCLOSE(fp) do {if (fp) { fclose(fp); fp = NULL; }} while (0)
00047 #define U_FREE(ptr) do { u_free(ptr); ptr = NULL; } while (0)
00048 #define U_FREEF(ptr, func) do {if (ptr) { func(ptr); ptr = NULL; }} while (0)
00049 #define U_MAX(a, b) ((a) > (b) ? (a) : (b))
00050 #define U_MIN(a, b) ((a) < (b) ? (a) : (b))
00051 #define U_ONCE if (({ static int __x = 0; int __y; __y = __x; __x = 1; !__y;}))
00052 #define U_PCLOSE(pp) do {if (pp) { pclose(pp); pp = NULL; }} while (0)
00053 #define U_SSTRCPY(to, from) u_sstrncpy((to), (from), sizeof(to) - 1)
00054 #define u_unused_args(...) u_use_unused_args(NULL, __VA_ARGS__)
00055 
00056 #define u_timersub(t1, t0, delta)                           \
00057     do {                                                    \
00058         (delta)->tv_sec = (t1)->tv_sec - (t0)->tv_sec;      \
00059         (delta)->tv_usec = (t1)->tv_usec - (t0)->tv_usec;   \
00060         if ((delta)->tv_usec < 0)                           \
00061         {                                                   \
00062             (delta)->tv_sec--;                              \
00063             (delta)->tv_usec += 1000000;                    \
00064         }                                                   \
00065      } while (0)
00066 
00069 typedef ssize_t (*iof_t) (int, void *, size_t);
00070 
00071 char *u_strdup (const char *s);
00072 char *u_strndup (const char *s, size_t len);
00073 int u_atol (const char *nptr, long *pl);
00074 int u_atoi (const char *nptr, int *pi);
00075 int u_atof (const char *nptr, double *pd);
00076 #ifdef HAVE_STRTOUMAX
00077 #include <inttypes.h>
00078 int u_atoumax (const char *nptr, uintmax_t *pumax);
00079 #endif  /* HAVE_STRTOUMAX */
00080 int u_data_dump (char *data, size_t sz, const char *file);
00081 int u_data_is_bin (char *data, size_t sz);
00082 int u_io (iof_t f, int sd, void *buf, size_t l, ssize_t *n, int *iseof);
00083 int u_isblank (int c);
00084 int u_isblank_str (const char *ln);
00085 int u_isnl (int c);
00086 int u_load_file (const char *path, size_t sz_max, char **pbuf, size_t *psz);
00087 int u_path_snprintf (char *str, size_t size, char sep, const char *fmt, ...);
00088 int u_savepid (const char *pf);
00089 int u_sleep (unsigned int secs);
00090 int u_snprintf (char *str, size_t size, const char *fmt, ...);
00091 int u_strlcat (char *dst, const char *src, size_t size);
00092 int u_strlcpy (char *dst, const char *src, size_t size);
00093 int u_strtok (const char *s, const char *delim, char ***ptv, size_t *pnelems);
00094 ssize_t u_read (int fd, void *buf, size_t size);
00095 ssize_t u_write (int fd, void *buf, size_t size);
00096 void u_strtok_cleanup (char **tv, size_t nelems);
00097 void u_trim (char *s);
00098 void u_use_unused_args (char *dummy, ...);
00099 void *u_memdup (const void *src, size_t size);
00100 
00101 /* depreacated interfaces */
00102 int u_tokenize (char *wlist, const char *delim, char **tokv, size_t tokv_sz) \
00103     __LIBU_DEPRECATED;
00104 char *u_sstrncpy (char *dst, const char *src, size_t size) \
00105     __LIBU_DEPRECATED;
00106 
00111 #ifdef __cplusplus
00112 }
00113 #endif
00114 
00115 #endif /* !_U_MISC_H_ */

←Products
© 2005-2012 - KoanLogic S.r.l. - All rights reserved