/mandos/trunk

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/trunk

« back to all changes in this revision

Viewing changes to plugins.d/mandos-client.c

  • Committer: Björn Påhlsson
  • Date: 2011-06-18 22:51:12 UTC
  • mto: This revision was merged to the branch mainline in revision 485.
  • Revision ID: belorn@fukt.bsnet.se-20110618225112-rnt2m4ek32758f80
using scandir instead of readdir

Show diffs side-by-side

added added

removed removed

Lines of Context:
741
741
    errno = EINTR;
742
742
    goto mandos_end;
743
743
  }
744
 
  
 
744
 
 
745
  /* Spurious warnings from -Wint-to-pointer-cast */
745
746
  gnutls_transport_set_ptr(session, (gnutls_transport_ptr_t) tcp_sd);
746
747
  
747
748
  if(quit_now){
1129
1130
  return 1;
1130
1131
}
1131
1132
 
 
1133
int notdotentries(const struct dirent *direntry){
 
1134
  /* Skip "." and ".." */
 
1135
  if(direntry->d_name[0] == '.'
 
1136
     and (direntry->d_name[1] == '\0'
 
1137
          or (direntry->d_name[1] == '.'
 
1138
              and direntry->d_name[2] == '\0'))){
 
1139
    return 0;
 
1140
  }
 
1141
  return 1;
 
1142
}
 
1143
 
1132
1144
int main(int argc, char *argv[]){
1133
1145
  AvahiSServiceBrowser *sb = NULL;
1134
1146
  int error;
1565
1577
    goto end;
1566
1578
  }
1567
1579
  
1568
 
  tempdir_created = true;
1569
1580
  if(mkdtemp(tempdir) == NULL){
1570
 
    tempdir_created = false;
1571
1581
    perror("mkdtemp");
1572
1582
    goto end;
1573
1583
  }
 
1584
  tempdir_created = true;
1574
1585
  
1575
1586
  if(quit_now){
1576
1587
    goto end;
1761
1772
    }
1762
1773
  }
1763
1774
  
1764
 
  /* Removes the temp directory used by GPGME */
 
1775
  /* Removes the GPGME temp directory and all files inside */
1765
1776
  if(tempdir_created){
1766
 
    DIR *d;
1767
 
    struct dirent *direntry;
1768
 
    d = opendir(tempdir);
1769
 
    if(d == NULL){
1770
 
      if(errno != ENOENT){
1771
 
        perror("opendir");
1772
 
      }
1773
 
    } else {
1774
 
      while(true){
1775
 
        direntry = readdir(d);
1776
 
        if(direntry == NULL){
1777
 
          break;
1778
 
        }
1779
 
        /* Skip "." and ".." */
1780
 
        if(direntry->d_name[0] == '.'
1781
 
           and (direntry->d_name[1] == '\0'
1782
 
                or (direntry->d_name[1] == '.'
1783
 
                    and direntry->d_name[2] == '\0'))){
1784
 
          continue;
1785
 
        }
 
1777
    struct dirent **direntries = NULL;
 
1778
    struct dirent *direntry = NULL;
 
1779
    ret = scandir(tempdir, &direntries, notdotentries, alphasort);
 
1780
    if (ret > 0){
 
1781
      for(int i = 0; i < ret; i++){
 
1782
        direntry = direntries[i];
1786
1783
        char *fullname = NULL;
1787
1784
        ret = asprintf(&fullname, "%s/%s", tempdir,
1788
1785
                       direntry->d_name);
1797
1794
        }
1798
1795
        free(fullname);
1799
1796
      }
1800
 
      closedir(d);
 
1797
    }
 
1798
 
 
1799
    /* need to be cleaned even if ret == 0 because man page dont specify */
 
1800
    free(direntries);
 
1801
    if (ret == -1){
 
1802
      perror("scandir");
1801
1803
    }
1802
1804
    ret = rmdir(tempdir);
1803
1805
    if(ret == -1 and errno != ENOENT){