// Worker methods static void output_data(char *busport, char *data) { struct tm *utc; time_t tm; tm = time(NULL); utc = gmtime(&tm); char dt[80]; strftime(dt, 80, opts.dt_format, utc); float t = c_to_u(raw_to_c(busport, decode_raw_data(data)), opts.units); FILE *fp = stdout; if (strlen(opts.output_file) > 0) { if (!(fp = fopen(opts.output_file, "w+"))) { fprintf(stderr, "Unable to open %s for appending\n", opts.output_file); fp = stdout; } } // Uncomment this line to use the opts.dt_format output // fprintf(fp, "%s,%s,%f\n", dt, busport, t); // Otherwise we default to outputing a timestamp in seconds as this is easier // to use in JQuery/Javascript and Oracle fprintf(fp, "%ld,%f,%s\n", tm, t, busport) ; fflush(fp); if (fp != stdout) fclose(fp); }
static void _gio_file_dir(GIOControl *gc,char *path) { DIR *dir; struct dirent *ent; GDirEntry *head=NULL, *last=NULL, *cur; char *buffer, *ept, *temp; struct stat statb; dir = opendir(path); if ( dir==NULL ) { _GIO_reporterror(gc,errno); return; } buffer = (char *) malloc(strlen(path)+FILENAME_MAX+3); strcpy(buffer,path); ept = buffer+strlen(buffer); if ( ept[-1]!='/' ) *ept++ = '/'; while (( ent = readdir(dir))!=NULL ) { cur = (GDirEntry *) calloc(1,sizeof(GDirEntry)); cur->name = def2u_copy(ent->d_name); strcpy(ept,ent->d_name); stat(buffer,&statb); cur->hasdir = cur->hasexe = cur->hasmode = cur->hassize = cur->hastime = true; cur->size = statb.st_size; cur->mode = statb.st_mode; cur->modtime = statb.st_mtime; cur->isdir = S_ISDIR(cur->mode); cur->isexe = !cur->isdir && (cur->mode & 0100); temp = NULL; // Things go badly if we open a pipe or a device. So we don't. #ifdef __MINGW32__ //Symlinks behave differently on Windows and are transparent, so no S_ISLNK. if (S_ISREG(statb.st_mode) || S_ISDIR(statb.st_mode)) { #else if (S_ISREG(statb.st_mode) || S_ISDIR(statb.st_mode) || S_ISLNK(statb.st_mode)) { #endif // We look at the file and try to determine a MIME type. if ( (temp=GIOguessMimeType(buffer)) || (temp=GIOGetMimeType(buffer)) ) { cur->mimetype = u_copy(c_to_u(temp)); free(temp); } } if ( last==NULL ) head = last = cur; else { last->next = cur; last = cur; } } #if __CygWin /* Under cygwin we should give the user access to /cygdrive, even though */ /* a diropen("/") will not find it */ if ( strcmp(path,"/")==0 ) { cur = (GDirEntry *) calloc(1,sizeof(GDirEntry)); cur->name = def2u_copy("cygdrive"); strcpy(ept,"cygdrive"); stat(buffer,&statb); cur->hasdir = cur->hasexe = cur->hasmode = cur->hassize = cur->hastime = true; cur->size = statb.st_size; cur->mode = statb.st_mode; cur->modtime = statb.st_mtime; cur->isdir = S_ISDIR(cur->mode); cur->isexe = !cur->isdir && (cur->mode & 0100); if ( last==NULL ) head = last = cur; else { last->next = cur; last = cur; } } #endif closedir(dir); free(buffer); gc->iodata = head; gc->direntrydata = true; gc->return_code = 200; gc->done = true; (gc->receivedata)(gc); } static void _gio_file_statfile(GIOControl *gc,char *path) { GDirEntry *cur; struct stat statb; if ( stat(path,&statb)==-1 ) { _GIO_reporterror(gc,errno); } else { cur = (GDirEntry *) calloc(1,sizeof(GDirEntry)); cur->name = uc_copy(GFileNameTail(path)); cur->hasdir = cur->hasexe = cur->hasmode = cur->hassize = cur->hastime = true; cur->size = statb.st_size; cur->mode = statb.st_mode; cur->modtime = statb.st_mtime; cur->isdir = S_ISDIR(cur->mode); cur->isexe = !cur->isdir && (cur->mode & 0100); gc->iodata = cur; gc->direntrydata = true; gc->return_code = 200; gc->done = true; (gc->receivedata)(gc); } }
static void _gio_file_dir(GIOControl *gc,char *path) { DIR *dir; struct dirent *ent; GDirEntry *head=NULL, *last=NULL, *cur; char *buffer, *ept; struct stat statb; dir = opendir(path); if ( dir==NULL ) { _GIO_reporterror(gc,errno); return; } buffer = (char *) galloc(strlen(path)+FILENAME_MAX+3); strcpy(buffer,path); ept = buffer+strlen(buffer); if ( ept[-1]!='/' ) *ept++ = '/'; while (( ent = readdir(dir))!=NULL ) { cur = (GDirEntry *) gcalloc(1,sizeof(GDirEntry)); cur->name = def2u_copy(ent->d_name); strcpy(ept,ent->d_name); stat(buffer,&statb); cur->hasdir = cur->hasexe = cur->hasmode = cur->hassize = cur->hastime = true; cur->size = statb.st_size; cur->mode = statb.st_mode; cur->modtime = statb.st_mtime; cur->isdir = S_ISDIR(cur->mode); cur->isexe = !cur->isdir && (cur->mode & 0100); cur->mimetype= u_copy(c_to_u(GIOGetMimeType(buffer, false))); if ( last==NULL ) head = last = cur; else { last->next = cur; last = cur; } } #if __CygWin /* Under cygwin we should give the user access to /cygdrive, even though */ /* a diropen("/") will not find it */ if ( strcmp(path,"/")==0 ) { cur = (GDirEntry *) gcalloc(1,sizeof(GDirEntry)); cur->name = def2u_copy("cygdrive"); strcpy(ept,"cygdrive"); stat(buffer,&statb); cur->hasdir = cur->hasexe = cur->hasmode = cur->hassize = cur->hastime = true; cur->size = statb.st_size; cur->mode = statb.st_mode; cur->modtime = statb.st_mtime; cur->isdir = S_ISDIR(cur->mode); cur->isexe = !cur->isdir && (cur->mode & 0100); if ( last==NULL ) head = last = cur; else { last->next = cur; last = cur; } } #endif closedir(dir); free(buffer); gc->iodata = head; gc->direntrydata = true; gc->return_code = 200; gc->done = true; (gc->receivedata)(gc); }