This is parse-header.c in view mode; [Download] [Up]
#import "parse-header.h" #include <stdlib.h> #include <stdio.h> #include <strings.h> #import <objc/hashtable.h> int parse_header(char *header, int header_len, char **fieldbody, char **pattern, int field_count, BOOL unfold) { char *header_buffer; int b,i,f_len; char *aLine; char fieldname[120]; char *other_buffer; char *f_fieldbody; BOOL found; aLine=(char *)malloc((header_len+2)*sizeof(char)); header_buffer=header; while(header_len>0){ //get one line sscanf(header_buffer, "%[^\n]\n",aLine); b=strlen(aLine); b++; header_len-=b; header_buffer+=b; //get header field name sscanf(aLine,"%118[^: \t]:",fieldname); if(aLine[strlen(fieldname)]!=':') continue; //wrong header field //lookup starting point of field body and copy it other_buffer=aLine; other_buffer+=strlen(fieldname)+1; while((*other_buffer==(char)32)||(*other_buffer==(char)9)) other_buffer++; f_fieldbody=NXCopyStringBuffer(other_buffer); f_len=strlen(f_fieldbody); //delete all space between fieldname and ":" for(i=strlen(fieldname)-1;i>=0;i--) if((fieldname[i]==(char)32)||(fieldname[i]==(char)9)) fieldname[i]='\0'; else break; //lookup field name found=NO; for(i=0;i<field_count;i++){ if((fieldbody[i]==(char *)0) && (strcmp(pattern[i],fieldname)==0)){ //Found! Now get, unfold & copy field body char *temp_buffer; found=YES; while((*header_buffer!='\0') && ((*header_buffer==(char)32) || (*header_buffer==(char)9))){ sscanf(header_buffer, "%1024[^\n]\n",aLine); b=strlen(aLine); b++; header_len-=b; header_buffer+=b; temp_buffer=aLine; //forget white-space stuff if(unfold) while((*temp_buffer!='\0') && ((*temp_buffer==(char)32) || (*temp_buffer==(char)9))) temp_buffer++; f_fieldbody=(char *)realloc(f_fieldbody, (f_len+ strlen(temp_buffer)+ 2)*sizeof(char)); if(unfold) strcat(f_fieldbody," "); else strcat(f_fieldbody,"\n"); strcat(f_fieldbody,temp_buffer); f_len=strlen(f_fieldbody); } fieldbody[i]=f_fieldbody; break; } } if(found==NO) free(f_fieldbody); } free(aLine); return 0; }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.