nmdutil.c File Reference

#include <stdlib.h>
#include "nmd.h"
#include "nmd_impl.h"
#include "string.h"

Include dependency graph for nmdutil.c:

Go to the source code of this file.

Data Structures

struct  NMD_string_

Functions

static NMDErrorCode NMDStringCreateOfSize (int n, NMD_string *r_str)
NMDErrorCode NMDStringCreate (char *txt, NMD_string *r_str)
NMDErrorCode NMDStringDestroy (NMD_string str)
NMDErrorCode NMDStringGetString (NMD_string str, char **t)
NMDErrorCode NMDStringConcat (char s1, NMD_string str1, char s2, NMD_string str2, char s3, NMD_string *r_str)


Function Documentation

NMDErrorCode NMDStringConcat ( char  s1,
NMD_string  str1,
char  s2,
NMD_string  str2,
char  s3,
NMD_string r_str 
)

Definition at line 57 of file nmdutil.c.

References CHECKHASNMDCOOKIE, NMD_string_::n, NMDStringCreateOfSize(), and NMD_string_::t.

00058 {
00059   NMD_string str; NMDErrorCode ierr; int l;
00060   CHECKHASNMDCOOKIE(str1);
00061 
00062   l = str1->n + ( str2 ? str2->n : 0 ) + (s1!=0) + (s2!=0) + (s3!=0);
00063   ierr = NMDStringCreateOfSize(l,&str); NMD_ERR_RETURN(ierr);
00064 
00065   l = 0;
00066   if (s1) {
00067     if (l+1>str->n) NMD_ERR_REPORT("string overflow");
00068     memcpy(str->t+l,&s1,1);
00069   }
00070 
00071   l = strlen(str->t);
00072   if (l+str1->n>str->n) NMD_ERR_REPORT("string overflow");
00073   memcpy(str->t+l,str1->t,str1->n);
00074 
00075   if (s2) {
00076     CHECKHASNMDCOOKIE(str2);
00077     l = strlen(str->t);
00078     if (l+1>str->n) NMD_ERR_REPORT("string overflow");
00079     memcpy(str->t+l,&s2,1);
00080   }
00081 
00082   if (str2) {
00083     l = strlen(str->t);
00084     if (l+str2->n>str->n) NMD_ERR_REPORT("string overflow");
00085     memcpy(str->t+l,str2->t,str2->n);
00086   }
00087 
00088   if (s3) {
00089     l = strlen(str->t);
00090     if (l+1>str->n) NMD_ERR_REPORT("string overflow");
00091     memcpy(str->t+l,&s3,1);
00092   }
00093 
00094   *r_str = str;
00095   return 0;
00096 }

Here is the call graph for this function:

NMDErrorCode NMDStringCreate ( char *  txt,
NMD_string r_str 
)

Definition at line 25 of file nmdutil.c.

References NMDStringCreateOfSize(), and NMD_string_::t.

00026 {
00027   NMD_string str; NMDErrorCode ierr; int l;
00028   l = strlen(txt);
00029   ierr = NMDStringCreateOfSize(l,&str); NMD_ERR_RETURN(ierr);
00030   memcpy(str->t,txt,l);
00031   *r_str = str;
00032   return 0;
00033 }

Here is the call graph for this function:

static NMDErrorCode NMDStringCreateOfSize ( int  n,
NMD_string r_str 
) [static]

Definition at line 13 of file nmdutil.c.

References NMD_string_::cookie, NMD_string_::n, NMD_MALLOC, NMDCOOKIE, and NMD_string_::t.

Referenced by NMDStringConcat(), and NMDStringCreate().

00014 {
00015   NMD_string str; char *t;
00016   NMD_MALLOC(t,n+1,char,"nmd string");
00017   NMD_MALLOC(str,1,struct NMD_string_,"string object");
00018   str->n = n; str->t = t; str->cookie = NMDCOOKIE;
00019   *r_str = str;
00020   return 0;
00021 }

NMDErrorCode NMDStringDestroy ( NMD_string  str  ) 

Definition at line 37 of file nmdutil.c.

References CHECKHASNMDCOOKIE, NMD_FREE, and NMD_string_::t.

00038 {
00039   CHECKHASNMDCOOKIE(str);
00040   NMD_FREE(str->t); 
00041   NMD_FREE(str);
00042   return 0;
00043 }

NMDErrorCode NMDStringGetString ( NMD_string  str,
char **  t 
)

Definition at line 47 of file nmdutil.c.

References CHECKHASNMDCOOKIE, and NMD_string_::t.

00048 {
00049   CHECKHASNMDCOOKIE(str);
00050   *t = str->t;
00051   return 0;
00052 }


Generated on Sun Oct 4 03:59:29 2009 for NMD by  doxygen 1.5.9