continue;
strcpy(pathptr, idx->name);
- if (!stat(path_phys, &s) && (s.st_mode & S_IFREG))
+ if (!stat(path_phys, &s) && (s.st_mode & S_IFREG)) {
+ memcpy(&p.stat, &s, sizeof(p.stat));
break;
+ }
*pathptr = 0;
}
return p.phys ? &p : NULL;
}
-#ifdef __APPLE__
-time_t timegm (struct tm *tm);
-#endif
-
static const char * uh_file_mime_lookup(const char *path)
{
struct mimetype *m = &uh_mime_types[0];
return 0;
}
-static char * uh_file_unix2date(time_t ts, char *buf)
+static char * uh_file_unix2date(time_t ts, char *buf, int len)
{
struct tm *t = gmtime(&ts);
- strftime(buf, sizeof(buf), "%a, %d %b %Y %H:%M:%S GMT", t);
+ strftime(buf, len, "%a, %d %b %Y %H:%M:%S GMT", t);
return buf;
}
if (s) {
ustream_printf(cl->us, "ETag: %s\r\n", uh_file_mktag(s, buf));
ustream_printf(cl->us, "Last-Modified: %s\r\n",
- uh_file_unix2date(s->st_mtime, buf));
+ uh_file_unix2date(s->st_mtime, buf, sizeof(buf)));
}
- ustream_printf(cl->us, "Date: %s\r\n", uh_file_unix2date(time(NULL), buf));
+ ustream_printf(cl->us, "Date: %s\r\n",
+ uh_file_unix2date(time(NULL), buf, sizeof(buf)));
}
static void uh_file_response_200(struct client *cl, struct stat *s)
{
int i;
int count = 0;
- char filename[PATH_MAX];
+ char *filename = uh_buf;
char *pathptr;
struct dirent **files = NULL;
struct stat s;
"<br /></small></li>",
pi->name, files[i]->d_name,
files[i]->d_name,
- uh_file_unix2date(s.st_mtime, buf),
+ uh_file_unix2date(s.st_mtime, buf, sizeof(buf)),
s.st_size / 1024.0);
*pathptr = 0;
"<br /></small></li>",
pi->name, files[i]->d_name,
files[i]->d_name,
- uh_file_unix2date(s.st_mtime, buf),
+ uh_file_unix2date(s.st_mtime, buf, sizeof(buf)),
uh_file_mime_lookup(filename),
s.st_size / 1024.0);