- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
char **fpwd=(char**)malloc(160);
int lstat(const char *path, struct stat *buf);
int process_dir(const char *dir,struct stat *st1,ino_t cit);
char *cdir=".";
ino_t ci=0;
struct stat cstat;
int errors = 0;
char *myname;
int cnt=0;
int main(int argc,char **argv){
  myname=argv[0];
  cdir=(char*)malloc(512);
  if(cdir==NULL){
    perror("Not sufficient memory");
    errors++;
    return -1;
  }
   memset(cdir,'\0',512);
  strcat(cdir,cdir);
  strcat(cdir,".");
  if(fpwd==NULL){
    fprintf(stderr, "%s: out of memory: %s\n",
  			myname, strerror(errno));
  		errors++;
 		return 0;
 }
for(int i=0;i<=160;i++){
  *(fpwd+i)=(char*)malloc(1600);
 if(*(fpwd+i)==NULL){perror("Not sufficient memory");
 errors++;
 return -1;
 }
}
while(ci!=2){
  if(lstat(".",&cstat)==-1){
    fprintf(stderr, "%s: can't find file:%s %s\n",
 			myname, cdir, strerror(errno));
    errors++;
	return -1;
  };
  ci=cstat.st_ino;
  if(process_dir("..",&cstat,ci)==-1){
        fprintf(stderr, "%s: can't process dir:%s %s\n",
 			myname, cdir, strerror(errno));
    errors++;
	return -1;
  };
  int fd=open("..",O_RDONLY);
  if(fd<0){
   perror("open");
   errors++;return -1;
  }
    if(fchdir(fd)==-1){
      fprintf(stderr, "%s: can't chdir:%s\n",
 			myname, strerror(errno));
    errors++;return -1;
    };
    strcat(cdir,"/..");
}
 for(int i=cnt-1;i>=0;i--){
    printf("/%s",fpwd[i]);
  }
  printf("\n");return 0;
}
int process_dir(const char *dir,struct stat *st1,ino_t cit/*,char **fpwd*/){
    DIR *dp;
    struct dirent *ent;
    struct stat *dstat;
    if ((dp = opendir(dir)) == NULL) {
		fprintf(stderr, "%s: cannot open for reading: %s\n", dir, strerror(errno));errors++;return -1;
	}
    if(lstat(dir,dstat)==-1){
	    fprintf(stderr, "%s: can't find file:%s %s\n",
 			myname, cdir, strerror(errno));
			errors++;
	return -1;
      }
	while ((ent = readdir(dp)) != NULL){
	  if(ent->d_ino==cit && strcmp(ent->d_name,".")!=0 && strcmp(ent->d_name,"..")!=0){
	    strcat(fpwd[cnt++],ent->d_name);
	     if (closedir(dp) != 0) {
		fprintf(stderr, "%s: closedir: %s\n", dir, strerror(errno));
		errors++;
		return 1;
	      }
	    return 0;
	  }
	}
	if (closedir(dp) != 0) {
		fprintf(stderr, "%s: closedir: %s\n", dir, strerror(errno));
		errors++;
		return 1;
	}
	return 0;
}