lighttpd 1.4.x https://www.lighttpd.net/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

55 lines
1.1 KiB

#include <string.h>
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#if defined HAVE_STDINT_H
#include <stdint.h>
#elif defined HAVE_INTTYPES_H
#include <inttypes.h>
#endif
#include "buffer.h"
#include "etag.h"
int etag_is_equal(buffer *etag, const char *matches) {
if (etag && !buffer_is_empty(etag) && 0 == strcmp(etag->ptr, matches)) return 1;
return 0;
}
int etag_create(buffer *etag, struct stat *st,etag_flags_t flags) {
if (0 == flags) return 0;
buffer_reset(etag);
if (flags & ETAG_USE_INODE) {
buffer_append_off_t(etag, st->st_ino);
buffer_append_string_len(etag, CONST_STR_LEN("-"));
}
if (flags & ETAG_USE_SIZE) {
buffer_append_off_t(etag, st->st_size);
buffer_append_string_len(etag, CONST_STR_LEN("-"));
}
if (flags & ETAG_USE_MTIME) {
buffer_append_long(etag, st->st_mtime);
}
return 0;
}
int etag_mutate(buffer *mut, buffer *etag) {
size_t i;
uint32_t h;
for (h=0, i=0; i < etag->used; ++i) h = (h<<5)^(h>>27)^(etag->ptr[i]);
buffer_reset(mut);
buffer_copy_string_len(mut, CONST_STR_LEN("\""));
buffer_append_long(mut, h);
buffer_append_string_len(mut, CONST_STR_LEN("\""));
return 0;
}