File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / lighttpd / src / etag.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Oct 14 10:32:48 2013 UTC (10 years, 8 months ago) by misho
Branches: lighttpd, MAIN
CVS tags: v1_4_35p0, v1_4_35, v1_4_33, HEAD
1.4.33

    1: #include "buffer.h"
    2: #include "etag.h"
    3: 
    4: #if defined HAVE_STDINT_H
    5: # include <stdint.h>
    6: #elif defined HAVE_INTTYPES_H
    7: # include <inttypes.h>
    8: #endif
    9: 
   10: #include <string.h>
   11: 
   12: int etag_is_equal(buffer *etag, const char *matches) {
   13: 	if (etag && !buffer_is_empty(etag) && 0 == strcmp(etag->ptr, matches)) return 1;
   14: 	return 0;
   15: }
   16: 
   17: int etag_create(buffer *etag, struct stat *st,etag_flags_t flags) {
   18: 	if (0 == flags) return 0;
   19: 
   20: 	buffer_reset(etag);
   21: 
   22: 	if (flags & ETAG_USE_INODE) {
   23: 		buffer_append_off_t(etag, st->st_ino);
   24: 		buffer_append_string_len(etag, CONST_STR_LEN("-"));
   25: 	}
   26: 	
   27: 	if (flags & ETAG_USE_SIZE) {
   28: 		buffer_append_off_t(etag, st->st_size);
   29: 		buffer_append_string_len(etag, CONST_STR_LEN("-"));
   30: 	}
   31: 	
   32: 	if (flags & ETAG_USE_MTIME) {
   33: 		buffer_append_long(etag, st->st_mtime);
   34: 	}
   35: 
   36: 	return 0;
   37: }
   38: 
   39: int etag_mutate(buffer *mut, buffer *etag) {
   40: 	size_t i;
   41: 	uint32_t h;
   42: 
   43: 	for (h=0, i=0; i < etag->used-1; ++i) h = (h<<5)^(h>>27)^(etag->ptr[i]);
   44: 
   45: 	buffer_reset(mut);
   46: 	buffer_copy_string_len(mut, CONST_STR_LEN("\""));
   47: 	buffer_append_off_t(mut, h);
   48: 	buffer_append_string_len(mut, CONST_STR_LEN("\""));
   49: 
   50: 	return 0;
   51: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>