--- parser3/src/classes/image.C 2013/07/07 20:49:45 1.143 +++ parser3/src/classes/image.C 2015/10/09 11:42:38 1.148 @@ -25,7 +25,7 @@ #include "pa_vdate.h" #include "pa_table.h" -volatile const char * IDENT_IMAGE_C="$Id: image.C,v 1.143 2013/07/07 20:49:45 moko Exp $"; +volatile const char * IDENT_IMAGE_C="$Id: image.C,v 1.148 2015/10/09 11:42:38 moko Exp $"; // defines @@ -459,7 +459,7 @@ static Value* parse_IFD_entry_formatted_ } // date.C -tm cstr_to_time_t(char *cstr); +tm cstr_to_time_t(char *, const char **); static Value* parse_IFD_entry_formatted_value(bool is_big, ushort format, size_t component_size, uint components_count, @@ -475,7 +475,8 @@ static Value* parse_IFD_entry_formatted_ strcpy(cstr_writable, cstr); try { - return new VDate(cstr_to_time_t(cstr_writable)); + tm tmIn=cstr_to_time_t(cstr_writable, 0); + return new VDate(tmIn); } catch(...) { /*ignore bad date times*/ } } @@ -576,7 +577,7 @@ static void parse_IFD_entry(HashStringVa if(Value* value=parse_IFD_entry_value(is_big, reader, tiff_base, entry)) { if(const char* name=(gps)?exif_gps_tag_value2name.get(tag):exif_tag_value2name.get(tag)) - hash.put(String::Body(name), value); + hash.put(name, value); else hash.put(String::Body::Format(tag), value); } @@ -823,7 +824,7 @@ static void _html(Request& r, MethodPara if(params.count()) { // for backward compatibility: someday was ^html{} Value& vattribs=r.process_to_value(params[0], false/*don't intercept string*/); - if(!vattribs.is_string()) // allow empty + if(!vattribs.is_string()) { // allow empty if((attribs=vattribs.get_hash())) { Attrib_info info={&tag, 0}; attribs->for_each(append_attrib_pair, &info); @@ -831,6 +832,7 @@ static void _html(Request& r, MethodPara throw Exception(PARSER_RUNTIME, 0, "attributes must be hash"); + } } { @@ -1137,12 +1139,10 @@ static void _font(Request& r, MethodPara int monospace_width=0; // proportional int letter_spacing=1; if(params.count()>2){ - if(HashStringValue* options=params.as_no_junction(2, "param must be int or hash").get_hash()){ + if(HashStringValue* options=params[2].get_hash()){ // third option is hash if(params.count()>3) - throw Exception(PARSER_RUNTIME, - 0, - "too many options were specified"); + throw Exception(PARSER_RUNTIME, 0, "too many params were specified"); int valid_options=0; if(Value* vspacebar_width=options->get(spacebar_width_name)){ valid_options++; @@ -1162,7 +1162,7 @@ static void _font(Request& r, MethodPara throw Exception(PARSER_RUNTIME, 0, CALLED_WITH_INVALID_OPTION); } else { // backward - spacebar_width=params.as_int(2, "spacebar_width must be int", r); + spacebar_width=params.as_int(2, "param must be int or hash", r); if(params.count()>3) { monospace_width=params.as_int(3, "monospace_width must be int", r); if(!monospace_width)