#endif
static int init_tracked_fds_list(size_t count) {
+ assert(count > 0);
+
/* Reduce reallocs. */
count += TRACKFDS_REALLOC_STEP;
errno = saved_errno;
return;
}
+#ifdef DEBUG
+ debug(" getenv(\"%s\"): \"%s\"\n", ENV_NAME_FDS, env);
+#endif
/* Environment is read-only. */
char env_copy[strlen(env) + 1];
strcpy(env_copy, env);
*x = 0;
int fd = atoi(last);
- if (fd < TRACKFDS_STATIC_COUNT) {
+ if (fd < 0) {
+ goto next;
+
+ } else if (fd < TRACKFDS_STATIC_COUNT) {
tracked_fds[fd] = 1;
} else {
if (!tracked_fds_list) {
}
static char *update_environment_buffer_entry(char *x, int fd) {
+ assert(fd >= 0);
+
int length = snprintf(x, 10 + 1, "%d", fd);
- if (length >= 10 + 1) {
+ if (length >= 10 + 1 || length <= 0 /* shouldn't happen */) {
/* Integer too big to fit the buffer, skip it. */
#ifdef WARNING
warning("update_environment_buffer_entry(): truncated fd: %d [%d]\n",
return x;
}
static void update_environment_buffer(char *x) {
+ assert(initialized);
+
size_t i;
for (i = 0; i < TRACKFDS_STATIC_COUNT; i++) {
if (tracked_fds[i]) {
}
}
inline static size_t update_environment_buffer_size(void) {
+ assert(initialized);
+
/* Use the maximum count (TRACKFDS_STATIC_COUNT) of used descriptors
* because it's simple and small enough not to be a problem.
*
update_environment_buffer(env);
#if 0
- debug(" setenv('%s', '%s', 1)\n", ENV_NAME_FDS, env);
+ debug(" setenv(\"%s\", \"%s\", 1)\n", ENV_NAME_FDS, env);
#endif
setenv(ENV_NAME_FDS, env, 1 /* overwrite */);
static void tracked_fds_add(int fd) {
+ assert(fd >= 0);
+
if (fd < TRACKFDS_STATIC_COUNT) {
tracked_fds[fd] = 1;
#if 0
#endif
}
static int tracked_fds_remove(int fd) {
+ assert(fd >= 0);
+
if (fd < TRACKFDS_STATIC_COUNT) {
int old_value = tracked_fds[fd];
tracked_fds[fd] = 0;
* they are not called often enough.
*/
inline static int tracked_fds_find(int fd) always_inline;
-static int tracked_fds_find(int fd) {
+inline static int tracked_fds_find(int fd) {
+ assert(fd >= 0);
+
if (fd < TRACKFDS_STATIC_COUNT) {
return tracked_fds[fd];
}
return tracked_fds_find_slow(fd);
}
static int tracked_fds_find_slow(int fd) {
+ assert(initialized);
+
if (tracked_fds_list_count == 0) {
return 0;
}