Exemplo n.º 1
0
void auido_del(char *dest, byte * tool_state)
{
	ag_setbusy();

	if (auic_s > 0) {
		int valid_files = 0;
		int number_files = auic_s;
		byte *copy_status = malloc(number_files * sizeof(byte));
		char **source_path = malloc(number_files * sizeof(char *));
		memset(copy_status, 0, number_files * sizeof(byte));
		memset(source_path, 0, number_files * sizeof(char *));
		int i = 0;

		for (i = 0; i < number_files; i++) {
			source_path[i] = auic_getpath(i);
			if (source_path[i] != NULL) {
				//-- Check paste validity
				copy_status[i] = 0;
				char *real_source =
				    realpath(source_path[i], NULL);
				if (isnodelete(real_source)) {
					copy_status[i] = 1;
				}
				if (copy_status[i] != 1)
					valid_files++;
				free(real_source);
			} else {
				copy_status[i] = 3;
			}
		}

		if (valid_files > 0) {
			auido_show_del(copy_status, source_path, number_files);
		}
		//-- Releases
		for (i = 0; i < number_files; i++) {
			if (source_path[i] != NULL)
				free(source_path[i]);
		}
		free(source_path);
		free(copy_status);
	}

	auic_release();
	*tool_state = 0;
	return;
}
Exemplo n.º 2
0
void afs_filedelete_do(AFSDTP dt, const char * path, byte ischild) {
  //-- Define
  struct stat fstat;
  struct stat lfstat;
  byte islnk = 0;
  int sz = 0;
  
  //-- Forbidden File
  if (isnodelete(path)) {
    return;
  }
  
  //-- Get Stat
  if (stat(path, &fstat)) {
    return;
  }
  
  //-- Set Current Info
  if (ischild) {
    //-- Get Link Stat
    if ((lstat(path, &lfstat) == 0) && S_ISLNK(lfstat.st_mode)) {
      sz = lfstat.st_size;
      islnk = 1;
    }
    else {
      sz = fstat.st_size;
    }
    
    //-- Set Current Filename
    char * bsn = basename(path);
    
    if (bsn != NULL) {
      snprintf(dt->curr, 255, "%s", bsn);
      free(bsn);
    }
    
    //-- Set Current Status
    dt->n += 1;
    dt->cr = 0;
    dt->cs = sz;
    //-- Set Total Size
    int kbsz = sz / AFS_KILOBYTE;
    dt->b += sz % AFS_KILOBYTE;
    
    if (dt->b >= AFS_KILOBYTE) {
      dt->b -= AFS_KILOBYTE;
      dt->k += 1;
    }
    
    dt->k += kbsz;
    //-- Tick
    afs_tick(dt);
  }
  
  if (!islnk && S_ISDIR(fstat.st_mode)) {
    DIR * d = opendir(path);
    size_t path_len = strlen(path);
    
    if (d) {
      struct dirent * p;
      
      while ((dt->status == 1) && (p = readdir(d))) {
        //-- No "." & ".."
        if ((p->d_name[0] == '.')
            && ((p->d_name[1] == 0)
                || ((p->d_name[1] == '.')
                    && (p->d_name[2] == 0)))) {
          continue;
        }
        
        //-- Filename Buffer
        size_t len = path_len + strlen(p->d_name) + 2;
        char * buf = malloc(len);
        
        if (buf) {
          snprintf(buf, len, "%s/%s", path,
                   p->d_name);
          afs_filedelete_do(dt, buf, 1);
          free(buf);
        }
      }
    }
    
    closedir(d);
    rmdir(path);
  }
  else {
    unlink(path);
  }
}