code hanging

Discussion in 'Software' started by JJJIrish05, Mar 6, 2008.

  1. JJJIrish05

    JJJIrish05 Sergeant

    ok.... it compiles.... but it seems to be getting hung up somewhere and I can't figure out where..... any good programs to use to figure out where and why its getting hung up? Or anyone willing to run/look at my code and see if they can figure it out?

    Code:
    [color=green]#include <stdio.h>		[color=green]// Standard input/output routines    [/color][/color]
    [color=green]#include <dirent.h>		[color=green]// readdir(), etc.                    [/color][/color]
    [color=green]#include <sys/stat.h>		[color=green]// stat(), etc.                       [/color][/color]
    [color=green]#include <string.h>		[color=green]// strstr(), etc.                     [/color][/color]
    [color=green]#include <unistd.h>		[color=green]// getcwd(), etc.   [/color][/color]
    [color=green]#include <sys/types.h>[/color]
    [color=green]#include <fcntl.h>[/color]
    
    [color=green]#define MAX_DIR_PATH 1024 [color=green]// Maximal full path length we support[/color][/color]
    
    
    
    [color=blue]void[/color] 
    sysbackup[color=darkred]([/color][color=blue]char[/color][color=red]*[/color] origPath, [color=blue]char[/color][color=red]*[/color] backupPath[color=darkred])[/color]
    [color=darkred]{[/color]
      DIR [color=red]*[/color]dir;			[color=green]// Pointer to the scanned directory[/color]
      [color=blue]struct[/color] dirent [color=red]*[/color]entry;		[color=green]//  Pointer to one directory entry[/color]
      [color=blue]struct[/color] dirent [color=red]*[/color]lastentry;
      [color=blue]char[/color] cwd[color=darkred][[/color]MAX_DIR_PATH + [color=blue]1[/color][color=darkred]][/color];	[color=green]// Current working directory[/color]
      [color=blue]struct[/color] stat dir_stat;		[color=green]// Used by stat()[/color]
      [color=blue]int[/color] f_from;			[color=green]//stream of source file[/color]
      [color=blue]int[/color] f_to;			[color=green]//stream of target file[/color]
      [color=blue]char[/color] [color=red]*[/color]buf[color=darkred][[/color]MAX_DIR_PATH+[color=blue]1[/color][color=darkred]][/color];   [color=green]// input buffer[/color]
    
      [color=green]// First, save the path of current working directory [/color]
    
      printf[color=darkred]([/color][color=red]"test \n"[/color][color=darkred])[/color];
       
      [color=blue]if[/color] [color=darkred]([/color]!getcwd [color=darkred]([/color]cwd, MAX_DIR_PATH + [color=blue]1[/color][color=darkred]))[/color]
      [color=darkred]{[/color]
    	  perror [color=darkred]([/color][color=red]"getcwd:"[/color][color=darkred])[/color];
          [color=blue]return[/color];
      [color=darkred]}[/color]
    
    
      [color=green]// Open the directory to read[/color]
      
      dir = opendir [color=darkred]([/color][color=red]"."[/color][color=darkred])[/color];
      [color=blue]if[/color] [color=darkred]([/color]!dir[color=darkred])[/color]
      [color=darkred]{[/color]
    	  fprintf [color=darkred]([/color]stderr, [color=red]"Cannot read directory '%s': "[/color], cwd[color=darkred])[/color];
          perror [color=darkred]([/color][color=red]""[/color][color=darkred])[/color];
          [color=blue]return[/color];
      [color=darkred]}[/color]
    
      [color=green]/*=======================================================
       * 
       * Scan the directory, traversing each sub-directory, and each file / directory name. 
       *
       ========================================================*/[/color]
    
      [color=blue]while[/color] [color=darkred](([/color]entry = readdir [color=darkred]([/color]dir[color=darkred])))[/color]
      [color=darkred]{[/color]
    	  printf[color=darkred]([/color][color=red]"while \n"[/color][color=darkred])[/color];
          [color=green]// Check if the given entry is a directory[/color]
          [color=blue]if[/color] [color=darkred]([/color]stat [color=darkred]([/color]entry-[color=darkred]>[/color]d_name, [color=red]&[/color]dir_stat[color=darkred])[/color] == -[color=blue]1[/color][color=darkred])[/color]
    	  [color=darkred]{[/color]
    		  perror [color=darkred]([/color][color=red]"stat:"[/color][color=darkred])[/color];
    		  [color=blue]continue[/color];
    	  [color=darkred]}[/color]
          
          [color=green]// Skip the "." and ".." entries, to avoid loops[/color]
          
          [color=blue]if[/color] [color=darkred]([/color]strcmp [color=darkred]([/color]entry-[color=darkred]>[/color]d_name, [color=red]"."[/color][color=darkred])[/color] == [color=blue]0[/color][color=darkred])[/color]
    		  [color=blue]continue[/color];
          
          [color=blue]if[/color] [color=darkred]([/color]strcmp [color=darkred]([/color]entry-[color=darkred]>[/color]d_name, [color=red]".."[/color][color=darkred])[/color] == [color=blue]0[/color][color=darkred])[/color]
    		  [color=blue]continue[/color];
          
          [color=green]/* Is this a directory? */[/color]
          [color=blue]if[/color] [color=darkred]([/color]S_ISDIR [color=darkred]([/color]dir_stat.st_mode[color=darkred]))[/color]
    	  [color=darkred]{[/color]
    		  printf[color=darkred]([/color][color=red]"isdir \n"[/color][color=darkred])[/color];
    		    lastentry=entry;
    		    [color=green]/* Change into the new directory */[/color]
    			[color=blue]if[/color] [color=darkred]([/color]chdir [color=darkred]([/color]entry-[color=darkred]>[/color]d_name[color=darkred])[/color] == -[color=blue]1[/color][color=darkred])[/color]
    			[color=darkred]{[/color]
    				fprintf [color=darkred]([/color]stderr, [color=red]"Cannot chdir into '%s': "[/color], entry-[color=darkred]>[/color]d_name[color=darkred])[/color];
    			    perror [color=darkred]([/color][color=red]""[/color][color=darkred])[/color];
    			    [color=blue]continue[/color];
    			[color=darkred]}[/color]
    
    			mkdir[color=darkred]([/color]strcat[color=darkred]([/color]backupPath, lastentry-[color=darkred]>[/color]d_name[color=darkred])[/color], [color=blue]777[/color][color=darkred])[/color];
    	  
    	  		[color=green]/* check this directory */[/color]
    			sysbackup[color=darkred]([/color]strcat[color=darkred]([/color]origPath, lastentry-[color=darkred]>[/color]d_name[color=darkred])[/color], backupPath[color=darkred])[/color];
    
    	        [color=green]/* Finally, restore the original working directory. */[/color]
    			[color=blue]if[/color] [color=darkred]([/color]chdir [color=darkred]([/color][color=red]".."[/color][color=darkred])[/color] == -[color=blue]1[/color][color=darkred])[/color]
    			[color=darkred]{[/color]
    				fprintf [color=darkred]([/color]stderr, [color=red]"Cannot chdir back to '%s': "[/color], cwd[color=darkred])[/color];
    			    perror [color=darkred]([/color][color=red]""[/color][color=darkred])[/color];
    			    [color=blue]return[/color];
    			[color=darkred]}[/color]
    	  [color=darkred]}[/color] [color=blue]else[/color] [color=green]//if (S_ISREG (dir_stat.st_mode)) //If not directory assume its a file[/color]
    	  [color=darkred]{[/color]
    		  printf[color=darkred]([/color][color=red]"isreg \n"[/color][color=darkred])[/color];
    		  f_from=open[color=darkred]([/color]strcat[color=darkred]([/color]origPath, entry-[color=darkred]>[/color]d_name[color=darkred])[/color], [color=blue]777[/color][color=darkred])[/color];
    		  [color=blue]if[/color] [color=darkred]([/color]!f_from[color=darkred])[/color] 
    		  [color=darkred]{[/color]
    			  fprintf[color=darkred]([/color]stderr, [color=red]"Cannot open source file1: "[/color][color=darkred])[/color];
    			  perror[color=darkred]([/color][color=red]""[/color][color=darkred])[/color];
    			  [color=blue]return[/color];
    		  [color=darkred]}[/color]
    		  f_to=creat[color=darkred]([/color]strcat[color=darkred]([/color]backupPath, entry-[color=darkred]>[/color]d_name[color=darkred])[/color], [color=blue]777[/color][color=darkred])[/color];
    		  [color=blue]if[/color] [color=darkred]([/color]!f_to[color=darkred])[/color] 
    		  [color=darkred]{[/color]
    			  fprintf[color=darkred]([/color]stderr, [color=red]"Cannot open target file: "[/color][color=darkred])[/color];
    			  perror[color=darkred]([/color][color=red]""[/color][color=darkred])[/color];
    			  [color=blue]return[/color];
    		  [color=darkred]}[/color]
    		  [color=blue]while[/color] [color=darkred]([/color]read[color=darkred]([/color]f_from, buf, MAX_DIR_PATH+[color=blue]1[/color][color=darkred]))[/color]
    		  [color=darkred]{[/color]
    			  [color=blue]if[/color] [color=darkred]([/color]write[color=darkred]([/color]f_to, buf, MAX_DIR_PATH+[color=blue]1[/color][color=darkred])[/color] == EOF[color=darkred])[/color]
    			  [color=darkred]{[/color]  [color=green]/* error writing data */[/color]
    				  fprintf[color=darkred]([/color]stderr, [color=red]"Error writing to target file2: %d:"[/color], f_to[color=darkred])[/color];
    				  perror[color=darkred]([/color][color=red]""[/color][color=darkred])[/color];
    				  [color=blue]return[/color];
    			  [color=darkred]}[/color]
    		  [color=darkred]}[/color]
    
    	  [color=darkred]}[/color]
      [color=darkred]}[/color]
    [color=darkred]}[/color][color=green]// End sysbackup()[/color]
    
    [color=blue]void[/color] 
    stdbackup[color=darkred]([/color][color=blue]char[/color][color=red]*[/color] origPath, [color=blue]char[/color][color=red]*[/color] backupPath[color=darkred])[/color]
    [color=darkred]{[/color]
      DIR [color=red]*[/color]dir;			[color=green]// Pointer to the scanned directory[/color]
      [color=blue]struct[/color] dirent [color=red]*[/color]entry;		[color=green]//  Pointer to one directory entry[/color]
      [color=blue]struct[/color] dirent [color=red]*[/color]lastentry;
      [color=blue]char[/color] cwd[color=darkred][[/color]MAX_DIR_PATH + [color=blue]1[/color][color=darkred]][/color];	[color=green]// Current working directory[/color]
      [color=blue]struct[/color] stat dir_stat;		[color=green]// Used by stat()[/color]
      [color=darkblue]FILE[/color][color=red]*[/color] f_from;			[color=green]//stream of source file[/color]
      [color=darkblue]FILE[/color][color=red]*[/color] f_to;			[color=green]//stream of target file[/color]
      [color=blue]char[/color] buf[color=darkred][[/color]MAX_DIR_PATH+[color=blue]1[/color][color=darkred]][/color];   [color=green]// input buffer[/color]
    
      [color=green]// First, save the path of current working directory [/color]
       
      [color=blue]if[/color] [color=darkred]([/color]!getcwd [color=darkred]([/color]cwd, MAX_DIR_PATH + [color=blue]1[/color][color=darkred]))[/color]
      [color=darkred]{[/color]
    	  perror [color=darkred]([/color][color=red]"getcwd:"[/color][color=darkred])[/color];
          [color=blue]return[/color];
      [color=darkred]}[/color]
    
    
      [color=green]// Open the directory to read[/color]
      
      dir = opendir [color=darkred]([/color][color=red]"."[/color][color=darkred])[/color];
      [color=blue]if[/color] [color=darkred]([/color]!dir[color=darkred])[/color]
      [color=darkred]{[/color]
    	  fprintf [color=darkred]([/color]stderr, [color=red]"Cannot read directory '%s': "[/color], cwd[color=darkred])[/color];
          perror [color=darkred]([/color][color=red]""[/color][color=darkred])[/color];
          [color=blue]return[/color];
      [color=darkred]}[/color]
    
      [color=green]/*=======================================================
       * 
       * Scan the directory, traversing each sub-directory, and each file / directory name. 
       *
       ========================================================*/[/color]
    
      [color=blue]while[/color] [color=darkred](([/color]entry = readdir [color=darkred]([/color]dir[color=darkred])))[/color]
      [color=darkred]{[/color]
          [color=green]// Check if the given entry is a directory[/color]
          [color=blue]if[/color] [color=darkred]([/color]stat [color=darkred]([/color]entry-[color=darkred]>[/color]d_name, [color=red]&[/color]dir_stat[color=darkred])[/color] == -[color=blue]1[/color][color=darkred])[/color]
    	  [color=darkred]{[/color]
    		  perror [color=darkred]([/color][color=red]"stat:"[/color][color=darkred])[/color];
    		  [color=blue]continue[/color];
    	  [color=darkred]}[/color]
          
          [color=green]// Skip the "." and ".." entries, to avoid loops[/color]
          
          [color=blue]if[/color] [color=darkred]([/color]strcmp [color=darkred]([/color]entry-[color=darkred]>[/color]d_name, [color=red]"."[/color][color=darkred])[/color] == [color=blue]0[/color][color=darkred])[/color]
    		  [color=blue]continue[/color];
          
          [color=blue]if[/color] [color=darkred]([/color]strcmp [color=darkred]([/color]entry-[color=darkred]>[/color]d_name, [color=red]".."[/color][color=darkred])[/color] == [color=blue]0[/color][color=darkred])[/color]
    		  [color=blue]continue[/color];
          
          [color=green]/* Is this a directory? */[/color]
          [color=blue]if[/color] [color=darkred]([/color]S_ISDIR [color=darkred]([/color]dir_stat.st_mode[color=darkred]))[/color]
    	  [color=darkred]{[/color]
    		    lastentry=entry;
    		    [color=green]/* Change into the new directory */[/color]
    			[color=blue]if[/color] [color=darkred]([/color]chdir [color=darkred]([/color]entry-[color=darkred]>[/color]d_name[color=darkred])[/color] == -[color=blue]1[/color][color=darkred])[/color]
    			[color=darkred]{[/color]
    				fprintf [color=darkred]([/color]stderr, [color=red]"Cannot chdir into '%s': "[/color], entry-[color=darkred]>[/color]d_name[color=darkred])[/color];
    			    perror [color=darkred]([/color][color=red]""[/color][color=darkred])[/color];
    			    [color=blue]continue[/color];
    			[color=darkred]}[/color]
    
    			mkdir[color=darkred]([/color]strcat[color=darkred]([/color]backupPath, lastentry-[color=darkred]>[/color]d_name[color=darkred])[/color], [color=blue]777[/color][color=darkred])[/color];
    	  
    	  		[color=green]/* check this directory */[/color]
    			stdbackup[color=darkred]([/color]strcat[color=darkred]([/color]origPath, lastentry-[color=darkred]>[/color]d_name[color=darkred])[/color], backupPath[color=darkred])[/color];
    
    	        [color=green]/* Finally, restore the original working directory. */[/color]
    			[color=blue]if[/color] [color=darkred]([/color]chdir [color=darkred]([/color][color=red]".."[/color][color=darkred])[/color] == -[color=blue]1[/color][color=darkred])[/color]
    			[color=darkred]{[/color]
    				fprintf [color=darkred]([/color]stderr, [color=red]"Cannot chdir back to '%s': "[/color], cwd[color=darkred])[/color];
    			    perror [color=darkred]([/color][color=red]""[/color][color=darkred])[/color];
    			    [color=blue]return[/color];
    			[color=darkred]}[/color]
    	  [color=darkred]}[/color] [color=blue]else[/color] [color=green]//If not directory assume its a file[/color]
    	  [color=darkred]{[/color]
    		  f_from=fopen[color=darkred]([/color]strcat[color=darkred]([/color]origPath, entry-[color=darkred]>[/color]d_name[color=darkred])[/color], [color=red]"r"[/color][color=darkred])[/color];
    		  [color=blue]if[/color] [color=darkred]([/color]!f_from[color=darkred])[/color] 
    		  [color=darkred]{[/color]
    			  fprintf[color=darkred]([/color]stderr, [color=red]"Cannot open source file: "[/color][color=darkred])[/color];
    			  perror[color=darkred]([/color][color=red]""[/color][color=darkred])[/color];
    			  [color=blue]return[/color];
    		  [color=darkred]}[/color]
    		  f_to=fopen[color=darkred]([/color]strcat[color=darkred]([/color]backupPath, entry-[color=darkred]>[/color]d_name[color=darkred])[/color], [color=red]"w+"[/color][color=darkred])[/color];
    		  [color=blue]if[/color] [color=darkred]([/color]!f_to[color=darkred])[/color] 
    		  [color=darkred]{[/color]
    			  fprintf[color=darkred]([/color]stderr, [color=red]"Cannot open target file: "[/color][color=darkred])[/color];
    			  perror[color=darkred]([/color][color=red]""[/color][color=darkred])[/color];
    			  [color=blue]return[/color];
    		  [color=darkred]}[/color]
    		  [color=blue]while[/color] [color=darkred]([/color]fgets[color=darkred]([/color]buf, MAX_DIR_PATH+[color=blue]1[/color], f_from[color=darkred]))[/color]
    		  [color=darkred]{[/color]
    			  [color=blue]if[/color] [color=darkred]([/color]fputs[color=darkred]([/color]buf, f_to[color=darkred])[/color] == EOF[color=darkred])[/color]
    			  [color=darkred]{[/color]  [color=green]/* error writing data */[/color]
    				  fprintf[color=darkred]([/color]stderr, [color=red]"Error writing to target file: "[/color][color=darkred])[/color];
    				  perror[color=darkred]([/color][color=red]""[/color][color=darkred])[/color];
    				  [color=blue]return[/color];
    			  [color=darkred]}[/color]
    		  [color=darkred]}[/color]
    	  [color=darkred]}[/color]
      [color=darkred]}[/color]
    [color=darkred]}[/color][color=green]// End stdbackup()[/color]
    
    [color=blue]int[/color] main [color=darkred]([/color][color=blue]int[/color] argc, [color=blue]char[/color] [color=red]**[/color]argv[color=darkred])[/color]
    [color=darkred]{[/color]
      [color=blue]char[/color] [color=red]*[/color]option;		        [color=green]// Option -sys or -std[/color]
      [color=blue]char[/color] [color=red]*[/color]dir_path;		[color=green]// directory path[/color]
      [color=blue]struct[/color] stat dir_stat;		[color=green]// Used by stat()[/color]
      [color=blue]char[/color] dir_to_copy[color=darkred][[/color]MAX_DIR_PATH + [color=blue]1[/color][color=darkred]][/color];
      [color=blue]char[/color] cwd[color=darkred][[/color]MAX_DIR_PATH + [color=blue]1[/color][color=darkred]][/color];
    
      [color=blue]if[/color] [color=darkred]([/color]argc != [color=blue]3[/color] || !argv[color=darkred][[/color][color=blue]1[/color][color=darkred]][/color] || !argv[color=darkred][[/color][color=blue]2[/color][color=darkred]])[/color]
      [color=darkred]{[/color]
          fprintf [color=darkred]([/color]stderr, [color=red]"Usage: %s <option> <directory path>\n"[/color],
    	       argv[color=darkred][[/color][color=blue]0[/color][color=darkred]])[/color];
          [color=blue]return[/color][color=darkred]([/color]-[color=blue]1[/color][color=darkred])[/color];
      [color=darkred]}[/color]
      
      option = argv[color=darkred][[/color][color=blue]1[/color][color=darkred]][/color];
      dir_path = argv[color=darkred][[/color][color=blue]2[/color][color=darkred]][/color];
    
      [color=green]// Make sure the given path refers to a directory[/color]
      
      [color=blue]if[/color] [color=darkred]([/color]stat [color=darkred]([/color]dir_path, [color=red]&[/color]dir_stat[color=darkred])[/color] == -[color=blue]1[/color][color=darkred])[/color]
      [color=darkred]{[/color]
          perror [color=darkred]([/color][color=red]"stat:"[/color][color=darkred])[/color];
          [color=blue]return[/color][color=darkred]([/color]-[color=blue]1[/color][color=darkred])[/color];
      [color=darkred]}[/color]
      
      [color=blue]if[/color] [color=darkred]([/color]!S_ISDIR [color=darkred]([/color]dir_stat.st_mode[color=darkred]))[/color]
      [color=darkred]{[/color]
    	  fprintf [color=darkred]([/color]stderr, [color=red]"'%s' is not a directory\n"[/color], dir_path[color=darkred])[/color];
          [color=blue]return[/color][color=darkred]([/color]-[color=blue]1[/color][color=darkred])[/color];
      [color=darkred]}[/color]
    
    [color=green]// Change into the given directory[/color]
      
      [color=blue]if[/color] [color=darkred]([/color]chdir [color=darkred]([/color]dir_path[color=darkred])[/color] == -[color=blue]1[/color][color=darkred])[/color]
      [color=darkred]{[/color]
          fprintf [color=darkred]([/color]stderr, [color=red]"Cannot change to directory '%s': "[/color], dir_path[color=darkred])[/color];
          perror [color=darkred]([/color][color=red]""[/color][color=darkred])[/color];
          [color=blue]return[/color][color=darkred]([/color]-[color=blue]1[/color][color=darkred])[/color];
      [color=darkred]}[/color]
    
      getcwd [color=darkred]([/color]cwd, MAX_DIR_PATH + [color=blue]1[/color][color=darkred])[/color];
    
      [color=blue]if[/color] [color=darkred]([/color]strcmp[color=darkred]([/color]option, [color=red]"-std"[/color][color=darkred])[/color] == [color=blue]0[/color][color=darkred])[/color]
      [color=darkred]{[/color]
    	  mkdir[color=darkred]([/color]strcat[color=darkred]([/color]dir_to_copy, [color=red]"BackStd"[/color][color=darkred])[/color], [color=blue]777[/color][color=darkred])[/color];
    	  stdbackup[color=darkred]([/color]cwd, dir_to_copy[color=darkred])[/color];
      [color=darkred]}[/color] [color=blue]else if[/color] [color=darkred]([/color]strcmp [color=darkred]([/color]option, [color=red]"-sys"[/color][color=darkred])[/color] == [color=blue]0[/color][color=darkred])[/color]
      [color=darkred]{[/color]
    	  mkdir[color=darkred]([/color]strcat[color=darkred]([/color]dir_to_copy, [color=red]"BackSys"[/color][color=darkred])[/color], [color=blue]777[/color][color=darkred])[/color];
    	  sysbackup[color=darkred]([/color]cwd, dir_to_copy[color=darkred])[/color];
      [color=darkred]}[/color] [color=blue]else[/color]
      [color=darkred]{[/color]
    	  fprintf [color=darkred]([/color]stderr, [color=red]"'%s' is not a valid option, try again with -std or -sys\n"[/color], option[color=darkred])[/color];
    	  [color=blue]return[/color][color=darkred]([/color]-[color=blue]1[/color][color=darkred])[/color];
      [color=darkred]}[/color]
    
      [color=blue]return 0[/color];
    [color=darkred]}[/color]
    
     
  2. jpavoine

    jpavoine Private E-2

    Yop. Stored.
    Will try tonite on development station, see you around ?
    We use another system than the Internet, which will delay answer.
    Just for the fun, anyway ...
     

MajorGeeks.Com Menu

Downloads All In One Tweaks \ Android \ Anti-Malware \ Anti-Virus \ Appearance \ Backup \ Browsers \ CD\DVD\Blu-Ray \ Covert Ops \ Drive Utilities \ Drivers \ Graphics \ Internet Tools \ Multimedia \ Networking \ Office Tools \ PC Games \ System Tools \ Mac/Apple/Ipad Downloads

Other News: Top Downloads \ News (Tech) \ Off Base (Other Websites News) \ Way Off Base (Offbeat Stories and Pics)

Social: Facebook \ YouTube \ Twitter \ Tumblr \ Pintrest \ RSS Feeds