全pidを取得する

仕事でストレスが溜まってきたので何となく作ってみたへたれプログラム。
/proc以下からpidのディレクトリ名を取得してくる。
realloc()なんかまず動作しないけどね。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <dirent.h>

int *pid_list(void){
	int pid;
	DIR *dp;
	struct dirent *dir;
	int *list;
	int *tmp;
	int msize;
	int step;
	int i;

	step = 1024;
	msize = step;
	list = malloc(msize);
	if(list == NULL){
		return NULL;
	}

	dp = opendir("/proc/");
	if(dp == NULL){
		goto ERR;
	}

	i=0;
	while((dir = readdir(dp)) != NULL){
		pid = atoi(dir->d_name);
		if(pid == 0){
			continue;
		}
		list[i] = pid;
		i++;

		if(i==msize-1){
			msize += step;
			tmp = realloc(list, msize);
			if(tmp == NULL){
				goto ERR;
			}
			list = tmp;
		}
	}
	list[i] = NULL;

	closedir(dp);

	return list;

ERR:
	free(list);
	return NULL;
}

int main(void){
	int i;
	int *list;

	list = pid_list();
	if(list == NULL){
		free(list);
		return 1;
	}

	for(i=0; list[i]!=NULL;i++){
		printf("%d\n", list[i]);
	}
	free(list);

	return 0;
}