00001
00002
00003
00004
00005 #ifndef _U_MISC_H_
00006 #define _U_MISC_H_
00007
00008 #include <u/libu_conf.h>
00009
00010 #include <unistd.h>
00011 #include <stdlib.h>
00012 #include <stdio.h>
00013 #include <limits.h>
00014
00015
00016 #ifdef __cplusplus
00017 extern "C" {
00018 #endif
00019
00020 struct sockaddr;
00021
00022
00023 #ifndef PATH_MAX
00024 #define U_PATH_MAX 4096
00025 #else
00026 #define U_PATH_MAX PATH_MAX
00027 #endif
00028
00029
00030 #ifdef NAME_MAX
00031 #define U_NAME_MAX NAME_MAX
00032 #else
00033 #ifdef FILENAME_MAX
00034 #define U_NAME_MAX FILENAME_MAX
00035 #else
00036 #define U_NAME_MAX 512
00037 #endif
00038 #endif
00039
00040
00041 #define U_FILENAME_MAX (U_PATH_MAX + U_NAME_MAX)
00042
00043 #define U_ONCE if (({ static int __x = 0; int __y; __y = __x; __x = 1; !__y;}))
00044 #define U_SSTRCPY(to, from) u_sstrncpy((to), (from), sizeof(to) - 1)
00045 #define U_FREE(ptr) do {if (ptr) { u_free(ptr); ptr = NULL; }} while (0)
00046 #define U_FREEF(ptr, func) do {if (ptr) { func(ptr); ptr = NULL; }} while (0)
00047 #define U_CLOSE(fd) do {if (fd != -1) { close(fd); fd = -1; }} while (0)
00048 #define U_FCLOSE(fp) do {if (fp) { fclose(fp); fp = NULL; }} while (0)
00049 #define U_PCLOSE(pp) do {if (pp) { pclose(pp); pp = NULL; }} while (0)
00050 #define U_MIN(a, b) ((a) < (b) ? (a) : (b))
00051 #define U_MAX(a, b) ((a) > (b) ? (a) : (b))
00052 #define u_unused_args(...) u_use_unused_args(NULL, __VA_ARGS__)
00053
00054
00055 typedef ssize_t (*iof_t) (int, void *, size_t);
00056
00057 int u_io (iof_t f, int sd, void *buf, size_t l, ssize_t *n, int *iseof);
00058 int u_isnl (int c);
00059 void u_trim (char *s);
00060 int u_isblank (int c);
00061 int u_isblank_str (const char *ln);
00062 char *u_strndup (const char *s, size_t len);
00063 char *u_strdup (const char *s);
00064 int u_savepid (const char *pf);
00065 char *u_sstrncpy (char *dst, const char *src, size_t size);
00066 void* u_memdup (const void *src, size_t size);
00067 int u_tokenize (char *wlist, const char *delim, char **tokv, size_t tokv_sz);
00068 int u_snprintf (char *str, size_t size, const char *fmt, ...);
00069 int u_path_snprintf (char *str, size_t size, char sep, const char *fmt, ...);
00070 void u_use_unused_args (char *dummy, ...);
00071 int u_data_is_bin (char *data, size_t sz);
00072 int u_data_dump (char *data, size_t sz, const char *file);
00073 int u_load_file (const char *path, size_t sz_max, char **pbuf, size_t *psz);
00074 ssize_t u_read(int fd, void *buf, size_t size);
00075 ssize_t u_write(int fd, void *buf, size_t size);
00076 int u_accept(int s, struct sockaddr *addr, int *addrlen);
00077 int u_sleep(unsigned int secs);
00078
00079
00080 #ifdef __cplusplus
00081 }
00082 #endif
00083
00084 #endif