data.c
branchtrunk
changeset 29 640ce9201139
parent 22 93aaf15c145a
child 32 cea1b4f741be
     1.1 --- a/data.c	Mon Aug 17 20:55:55 2009 +0800
     1.2 +++ b/data.c	Mon Aug 17 20:56:48 2009 +0800
     1.3 @@ -23,6 +23,7 @@
     1.4  #include <dirent.h>
     1.5  #include <stdlib.h>
     1.6  #include <stdio.h>
     1.7 +#include <stdarg.h>
     1.8  #include <errno.h>
     1.9  #include <sys/stat.h>
    1.10  #include <sys/types.h>
    1.11 @@ -60,8 +61,7 @@
    1.12  
    1.13  char *AddPath(const char *dir, const char *filename)
    1.14  {
    1.15 -  char *name=0;
    1.16 -  asprintf(&name,"%s/%s",dir,filename);
    1.17 +  char *name=aprintf("%s/%s",dir,filename);
    1.18    return name;
    1.19  }
    1.20  
    1.21 @@ -84,13 +84,23 @@
    1.22    return true;
    1.23  }
    1.24  
    1.25 +char *aprintf(const char *fmt, ...)
    1.26 +{
    1.27 +  va_list ap;
    1.28 +  va_start(ap,fmt);
    1.29 +  char *str=0;
    1.30 +  if(vasprintf(&str,fmt,ap)<0);
    1.31 +  va_end(ap);
    1.32 +  return str;
    1.33 +}
    1.34 +
    1.35  // -- cScanDir --------------------------------------------------------------
    1.36  
    1.37  bool cScanDir::ScanDir(cFileSource *src, const char *subdir, eScanType type, const char * const *spec, const char * const *excl, bool recursiv)
    1.38  {
    1.39    bool res=true;
    1.40 -  char *dir, *f=0;
    1.41 -  asprintf(&dir,subdir ? "%s/%s":"%s",src->BaseDir(),subdir);
    1.42 +  char *f=0;
    1.43 +  char *dir=aprintf(subdir ? "%s/%s":"%s",src->BaseDir(),subdir);
    1.44    DIR *d=opendir(dir);
    1.45    if(d) {
    1.46      struct dirent64 *e;
    1.47 @@ -113,8 +123,7 @@
    1.48          }
    1.49        if(S_ISDIR(st.st_mode)) {
    1.50          if(type==stFile && recursiv) {
    1.51 -          char *s;
    1.52 -          asprintf(&s,subdir ? "%2$s/%1$s":"%s",e->d_name,subdir);
    1.53 +          char *s=aprintf(subdir ? "%2$s/%1$s":"%s",e->d_name,subdir);
    1.54            res=ScanDir(src,s,type,spec,excl,recursiv);
    1.55            free(s);
    1.56            if(!res) break;
    1.57 @@ -256,15 +265,15 @@
    1.58  
    1.59  void cFileObj::Set(void)
    1.60  {
    1.61 -  free(path); path=0;
    1.62 -  asprintf(&path,subdir ? "%2$s/%1$s":"%s",name,subdir);
    1.63 +  free(path);
    1.64 +  path=aprintf(subdir ? "%2$s/%1$s":"%s",name,subdir);
    1.65    free(fpath); fpath=0;
    1.66    MakeFullName(&fpath,name);
    1.67  }
    1.68  
    1.69  void cFileObj::MakeFullName(char **fp, const char *Name)
    1.70  {
    1.71 -  asprintf(fp,subdir ? "%1$s/%3$s/%2$s":"%s/%s",source->BaseDir(),Name,subdir);
    1.72 +  *fp=aprintf(subdir ? "%1$s/%3$s/%2$s":"%s/%s",source->BaseDir(),Name,subdir);
    1.73  }
    1.74  
    1.75  bool cFileObj::GuessType(void)
    1.76 @@ -498,8 +507,7 @@
    1.77  {
    1.78    static const char *str[] = { "mount","unmount","eject","status" };
    1.79    
    1.80 -  char *cmd=0;
    1.81 -  asprintf(&cmd,"%s %s %s",mountscript,str[act],basedir);
    1.82 +  char *cmd=aprintf("%s %s %s",mountscript,str[act],basedir);
    1.83    bool res=(system(cmd)==0);
    1.84    free(cmd);
    1.85    return res;