関数 | |
void | replace_dummy (void) |
int | rep_ftruncate (int f, off_t l) |
size_t | rep_strlcpy (char *d, const char *s, size_t bufsize) |
size_t | rep_strlcat (char *d, const char *s, size_t bufsize) |
time_t | rep_mktime (struct tm *t) |
int | rep_initgroups (char *name, gid_t id) |
long | nap (long milliseconds) |
void * | rep_memmove (void *dest, const void *src, int size) |
char * | rep_strdup (const char *s) |
char * | rep_inet_ntoa (struct in_addr ip) |
void | rep_setlinebuf (FILE *stream) |
void | rep_vsyslog (int facility_priority, const char *format, va_list arglist) |
size_t | rep_strnlen (const char *s, size_t max) |
Some platforms don't have strnlen | |
char * | rep_strndup (const char *s, size_t n) |
Some platforms don't have strndup. | |
int | rep_waitpid (pid_t pid, int *status, int options) |
int | rep_seteuid (uid_t euid) |
int | rep_setegid (gid_t egid) |
int | rep_chroot (const char *dname) |
int | rep_mkstemp (char *template) |
char * | rep_mkdtemp (char *template) |
ssize_t | rep_pread (int __fd, void *__buf, size_t __nbytes, off_t __offset) |
ssize_t | rep_pwrite (int __fd, const void *__buf, size_t __nbytes, off_t __offset) |
char * | rep_strcasestr (const char *haystack, const char *needle) |
char * | rep_strtok_r (char *s, const char *delim, char **save_ptr) |
long long int | rep_strtoll (const char *str, char **endptr, int base) |
unsigned long long int | rep_strtoull (const char *str, char **endptr, int base) |
int | rep_setenv (const char *name, const char *value, int overwrite) |
int | rep_unsetenv (const char *name) |
int | rep_socketpair (int d, int type, int protocol, int sv[2]) |
int rep_ftruncate | ( | int | f, | |
off_t | l | |||
) |
00043 { 00044 #ifdef HAVE_CHSIZE 00045 return chsize(f,l); 00046 #elif defined(F_FREESP) 00047 struct flock fl; 00048 00049 fl.l_whence = 0; 00050 fl.l_len = 0; 00051 fl.l_start = l; 00052 fl.l_type = F_WRLCK; 00053 return fcntl(f, F_FREESP, &fl); 00054 #else 00055 #error "you must have a ftruncate function" 00056 #endif 00057 }
size_t rep_strlcpy | ( | char * | d, | |
const char * | s, | |||
size_t | bufsize | |||
) |
size_t rep_strlcat | ( | char * | d, | |
const char * | s, | |||
size_t | bufsize | |||
) |
00081 { 00082 size_t len1 = strlen(d); 00083 size_t len2 = strlen(s); 00084 size_t ret = len1 + len2; 00085 00086 if (len1+len2 >= bufsize) { 00087 if (bufsize < (len1+1)) { 00088 return ret; 00089 } 00090 len2 = bufsize - (len1+1); 00091 } 00092 if (len2 > 0) { 00093 memcpy(d+len1, s, len2); 00094 d[len1+len2] = 0; 00095 } 00096 return ret; 00097 }
time_t rep_mktime | ( | struct tm * | t | ) |
参照先 localtime().
00112 { 00113 struct tm *u; 00114 time_t epoch = 0; 00115 int n; 00116 int mon [] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, 00117 y, m, i; 00118 00119 if(t->tm_year < 70) 00120 return((time_t)-1); 00121 00122 n = t->tm_year + 1900 - 1; 00123 epoch = (t->tm_year - 70) * YEAR + 00124 ((n / 4 - n / 100 + n / 400) - (1969 / 4 - 1969 / 100 + 1969 / 400)) * DAY; 00125 00126 y = t->tm_year + 1900; 00127 m = 0; 00128 00129 for(i = 0; i < t->tm_mon; i++) { 00130 epoch += mon [m] * DAY; 00131 if(m == 1 && y % 4 == 0 && (y % 100 != 0 || y % 400 == 0)) 00132 epoch += DAY; 00133 00134 if(++m > 11) { 00135 m = 0; 00136 y++; 00137 } 00138 } 00139 00140 epoch += (t->tm_mday - 1) * DAY; 00141 epoch += t->tm_hour * HOUR + t->tm_min * MINUTE + t->tm_sec; 00142 00143 if((u = localtime(&epoch)) != NULL) { 00144 t->tm_sec = u->tm_sec; 00145 t->tm_min = u->tm_min; 00146 t->tm_hour = u->tm_hour; 00147 t->tm_mday = u->tm_mday; 00148 t->tm_mon = u->tm_mon; 00149 t->tm_year = u->tm_year; 00150 t->tm_wday = u->tm_wday; 00151 t->tm_yday = u->tm_yday; 00152 t->tm_isdst = u->tm_isdst; 00153 } 00154 00155 return(epoch); 00156 }
int rep_initgroups | ( | char * | name, | |
gid_t | id | |||
) |
参照先 errno.
00165 { 00166 #ifndef HAVE_SETGROUPS 00167 /* yikes! no SETGROUPS or INITGROUPS? how can this work? */ 00168 errno = ENOSYS; 00169 return -1; 00170 #else /* HAVE_SETGROUPS */ 00171 00172 #include <grp.h> 00173 00174 gid_t *grouplst = NULL; 00175 int max_gr = 32; 00176 int ret; 00177 int i,j; 00178 struct group *g; 00179 char *gr; 00180 00181 if((grouplst = malloc(sizeof(gid_t) * max_gr)) == NULL) { 00182 errno = ENOMEM; 00183 return -1; 00184 } 00185 00186 grouplst[0] = id; 00187 i = 1; 00188 while (i < max_gr && ((g = (struct group *)getgrent()) != (struct group *)NULL)) { 00189 if (g->gr_gid == id) 00190 continue; 00191 j = 0; 00192 gr = g->gr_mem[0]; 00193 while (gr && (*gr != (char)NULL)) { 00194 if (strcmp(name,gr) == 0) { 00195 grouplst[i] = g->gr_gid; 00196 i++; 00197 gr = (char *)NULL; 00198 break; 00199 } 00200 gr = g->gr_mem[++j]; 00201 } 00202 } 00203 endgrent(); 00204 ret = setgroups(i, grouplst); 00205 free(grouplst); 00206 return ret; 00207 #endif /* HAVE_SETGROUPS */ 00208 }
long nap | ( | long | milliseconds | ) |
void* rep_memmove | ( | void * | dest, | |
const void * | src, | |||
int | size | |||
) |
00230 { 00231 unsigned long d,s; 00232 int i; 00233 if (dest==src || !size) return(dest); 00234 00235 d = (unsigned long)dest; 00236 s = (unsigned long)src; 00237 00238 if ((d >= (s+size)) || (s >= (d+size))) { 00239 /* no overlap */ 00240 memcpy(dest,src,size); 00241 return(dest); 00242 } 00243 00244 if (d < s) { 00245 /* we can forward copy */ 00246 if (s-d >= sizeof(int) && 00247 !(s%sizeof(int)) && 00248 !(d%sizeof(int)) && 00249 !(size%sizeof(int))) { 00250 /* do it all as words */ 00251 int *idest = (int *)dest; 00252 int *isrc = (int *)src; 00253 size /= sizeof(int); 00254 for (i=0;i<size;i++) idest[i] = isrc[i]; 00255 } else { 00256 /* simplest */ 00257 char *cdest = (char *)dest; 00258 char *csrc = (char *)src; 00259 for (i=0;i<size;i++) cdest[i] = csrc[i]; 00260 } 00261 } else { 00262 /* must backward copy */ 00263 if (d-s >= sizeof(int) && 00264 !(s%sizeof(int)) && 00265 !(d%sizeof(int)) && 00266 !(size%sizeof(int))) { 00267 /* do it all as words */ 00268 int *idest = (int *)dest; 00269 int *isrc = (int *)src; 00270 size /= sizeof(int); 00271 for (i=size-1;i>=0;i--) idest[i] = isrc[i]; 00272 } else { 00273 /* simplest */ 00274 char *cdest = (char *)dest; 00275 char *csrc = (char *)src; 00276 for (i=size-1;i>=0;i--) cdest[i] = csrc[i]; 00277 } 00278 } 00279 return(dest); 00280 }
char* rep_strdup | ( | const char * | s | ) |
char* rep_inet_ntoa | ( | struct in_addr | ip | ) |
void rep_setlinebuf | ( | FILE * | stream | ) |
void rep_vsyslog | ( | int | facility_priority, | |
const char * | format, | |||
va_list | arglist | |||
) |
参照先 vasprintf().
00326 { 00327 char *msg = NULL; 00328 vasprintf(&msg, format, arglist); 00329 if (!msg) 00330 return; 00331 syslog(facility_priority, "%s", msg); 00332 free(msg); 00333 }
size_t rep_strnlen | ( | const char * | s, | |
size_t | max | |||
) |
char* rep_strndup | ( | const char * | s, | |
size_t | n | |||
) |
int rep_waitpid | ( | pid_t | pid, | |
int * | status, | |||
int | options | |||
) |
int rep_seteuid | ( | uid_t | euid | ) |
int rep_setegid | ( | gid_t | egid | ) |
int rep_chroot | ( | const char * | dname | ) |
int rep_mkstemp | ( | char * | template | ) |
char* rep_mkdtemp | ( | char * | template | ) |
ssize_t rep_pread | ( | int | __fd, | |
void * | __buf, | |||
size_t | __nbytes, | |||
off_t | __offset | |||
) |
ssize_t rep_pwrite | ( | int | __fd, | |
const void * | __buf, | |||
size_t | __nbytes, | |||
off_t | __offset | |||
) |
char* rep_strcasestr | ( | const char * | haystack, | |
const char * | needle | |||
) |
char* rep_strtok_r | ( | char * | s, | |
const char * | delim, | |||
char ** | save_ptr | |||
) |
00482 { 00483 char *token; 00484 00485 if (s == NULL) s = *save_ptr; 00486 00487 s += strspn(s, delim); 00488 if (*s == '\0') { 00489 *save_ptr = s; 00490 return NULL; 00491 } 00492 00493 token = s; 00494 s = strpbrk(token, delim); 00495 if (s == NULL) { 00496 *save_ptr = token + strlen(token); 00497 } else { 00498 *s = '\0'; 00499 *save_ptr = s + 1; 00500 } 00501 00502 return token; 00503 }
long long int rep_strtoll | ( | const char * | str, | |
char ** | endptr, | |||
int | base | |||
) |
00508 { 00509 #ifdef HAVE_STRTOQ 00510 return strtoq(str, endptr, base); 00511 #elif defined(HAVE___STRTOLL) 00512 return __strtoll(str, endptr, base); 00513 #elif SIZEOF_LONG == SIZEOF_LONG_LONG 00514 return (long long int) strtol(str, endptr, base); 00515 #else 00516 # error "You need a strtoll function" 00517 #endif 00518 }
unsigned long long int rep_strtoull | ( | const char * | str, | |
char ** | endptr, | |||
int | base | |||
) |
00524 { 00525 #ifdef HAVE_STRTOUQ 00526 return strtouq(str, endptr, base); 00527 #elif defined(HAVE___STRTOULL) 00528 return __strtoull(str, endptr, base); 00529 #elif SIZEOF_LONG == SIZEOF_LONG_LONG 00530 return (unsigned long long int) strtoul(str, endptr, base); 00531 #else 00532 # error "You need a strtoull function" 00533 #endif 00534 }
int rep_setenv | ( | const char * | name, | |
const char * | value, | |||
int | overwrite | |||
) |
00539 { 00540 char *p; 00541 size_t l1, l2; 00542 int ret; 00543 00544 if (!overwrite && getenv(name)) { 00545 return 0; 00546 } 00547 00548 l1 = strlen(name); 00549 l2 = strlen(value); 00550 00551 p = malloc(l1+l2+2); 00552 if (p == NULL) { 00553 return -1; 00554 } 00555 memcpy(p, name, l1); 00556 p[l1] = '='; 00557 memcpy(p+l1+1, value, l2); 00558 p[l1+l2+1] = 0; 00559 00560 ret = putenv(p); 00561 if (ret != 0) { 00562 free(p); 00563 } 00564 00565 return ret; 00566 }
int rep_unsetenv | ( | const char * | name | ) |
参照先 len.
00571 { 00572 extern char **environ; 00573 size_t len = strlen(name); 00574 size_t i; 00575 int found = 0; 00576 00577 for (i=0; (environ && environ[i]); i++) { 00578 if (found) { 00579 environ[i-1] = environ[i]; 00580 continue; 00581 } 00582 00583 if (strncmp(environ[i], name, len) == 0 && environ[i][len] == '=') { 00584 free(environ[i]); 00585 environ[i] = NULL; 00586 found = 1; 00587 continue; 00588 } 00589 } 00590 00591 return 0; 00592 }
int rep_socketpair | ( | int | d, | |
int | type, | |||
int | protocol, | |||
int | sv[2] | |||
) |
参照先 errno.
00597 { 00598 if (d != AF_UNIX) { 00599 errno = EAFNOSUPPORT; 00600 return -1; 00601 } 00602 00603 if (protocol != 0) { 00604 errno = EPROTONOSUPPORT; 00605 return -1; 00606 } 00607 00608 if (type != SOCK_STREAM) { 00609 errno = EOPNOTSUPP; 00610 return -1; 00611 } 00612 00613 return pipe(sv); 00614 }