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;