Subversion Repositories svn.Prod repos

Rev

Rev 53 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 ls 1
/* ============================================================================
2
# Create
43 - 3
# name  : Andre Rikkert de Koe          date:	Apr 2011
2 ls 4
# descr : filefind
5
#	  This is a demo of programming in the C language.
6
#	  Its part of a project to implement a program to create a directory
7
#	  tree similar to the output of the Unix find program.
8
# EUID  : Any user who has read access to all the files being searched for. 
9
# run   : interactive
10
#
11
# Changes
12
# name  :                               date:
13
# descr : short description
14
#
15
============================================================================ */
16
 
23 - 17
#include <string.h>
18
 
2 ls 19
#include <stdio.h>
20
#include <libgen.h>
21
#include "checkfiles.h"
22
#include <unistd.h> // getcwd
23
 
24
 
25
#include <sys/types.h>
26
#include <sys/stat.h>
27
#include <dirent.h>
28
#include <unistd.h>
29
 
30
#include <errno.h>
31
 
53 - 32
#define PATH_MAX2 255
2 ls 33
 
34
// ============================================================================
35
// Functions
36
// ============================================================================
37
 
38
void Usage(char *progname, char *mesg)
39
{
40
	printf("Usage: %s directory\n" ,progname);
41
	printf("%s\n", mesg);
42
}
43
 
44
// http://www.ibm.com/developerworks/aix/library/au-unix-readdir.html
45
 
46
void traverse(char *directory)
47
{
53 - 48
	char curdir[PATH_MAX2];
49
	char curdir2[PATH_MAX2]; 
2 ls 50
 
53 - 51
	getcwd(curdir, PATH_MAX2);
2 ls 52
	chdir(directory);
53 - 53
	getcwd(curdir2, PATH_MAX2);
2 ls 54
 
55
	DIR *dir = NULL;
56
	struct dirent entry;
57
	struct dirent *entryPtr = NULL;
58
	int retval = 0;
53 - 59
	char pathName[PATH_MAX2 + 1];
60
	char pfile[PATH_MAX2 + 1];
2 ls 61
 
62
	/* Open the given directory, if you can. */  
63
	dir = opendir(curdir2);
64
	if (dir == NULL)
65
	{
66
		printf( "Error opening %s: %s", directory, strerror( errno ) );
67
	}
68
	retval = readdir_r( dir, &entry, &entryPtr );
69
	while( entryPtr != NULL )
70
	{
71
		struct stat entryInfo;
72
 
54 - 73
		if( ( strncmp( entry.d_name, ".",  PATH_MAX2 ) != 0 ) && 
74
	    	    ( strncmp( entry.d_name, "..", PATH_MAX2 ) != 0 ) )
2 ls 75
		{
76
			sprintf(pfile,"%s/%s", curdir2, entry.d_name);
77
			if (isdir(entry.d_name) && ! issymlink(entry.d_name))
78
			{
79
				printf("%s\n", pfile);
80
				traverse(entry.d_name);
81
			}
82
			else
83
			{
84
				if ((isregular(entry.d_name)) || issymlink(entry.d_name))
85
					printf("%s\n", pfile);
86
				else
87
					printf("WARRNING: Could not process file %s\n", entry.d_name);
88
			}	
89
		}
90
		retval = readdir_r( dir, &entry, &entryPtr );
91
	}
92
	chdir(curdir);
93
}
94
 
95
void start_traverse(char *directory)
96
{
97
	printf("%s\n", directory);
98
	traverse(directory);
99
}
100
 
101
// ============================================================================
102
// MAIN
103
// ============================================================================
104
 
23 - 105
int main(int argc, char *argv[])
2 ls 106
{
107
	char *progname = argv[0];
108
	char *directory;
109
	char mesg[80];
110
 
111
	progname = basename(progname);
112
	if (argc == 2)
113
	{
114
		directory = argv[1];
115
		if (isdir(directory))
116
		{
117
			start_traverse(directory);
118
		}
119
		else
120
		{
37 - 121
			sprintf(mesg, "ERROR: Not a directory : %s", directory);
2 ls 122
			Usage(progname, mesg);
123
		}
124
	}
125
	else
126
	{
37 - 127
		Usage(progname, "ERROR: 1 argument expected");
2 ls 128
	}
129
}