OSDN Git Service

pennding への追加
authorMyun2 <myun2@nwhite.info>
Sat, 19 May 2012 08:27:05 +0000 (17:27 +0900)
committerMyun2 <myun2@nwhite.info>
Sat, 19 May 2012 08:27:05 +0000 (17:27 +0900)
roast_bufsafe.h, roast_str.c

include/roast_bufsafe.h [new file with mode: 0644]
source/roast_str.c [new file with mode: 0644]

diff --git a/include/roast_bufsafe.h b/include/roast_bufsafe.h
new file mode 100644 (file)
index 0000000..c3c03ad
--- /dev/null
@@ -0,0 +1,174 @@
+/*     Roast+ License
+
+//     ### C compilable ###
+
+//     Safe\8cn\8aÖ\90\94 (\83o\83b\83t\83@\83I\81[\83o\81[\83\89\83\93\96h\8e~)
+//             - \83o\83b\83t\83@\82ð\89z\82¦\82æ\82¤\82Æ\82µ\82½\8fê\8d\87\82Í\81A\94[\82Ü\82è\90Ø\82ç\82È\82©\82Á\82½\95\8e\9a\97ñ\82ð\90Ø\82è\8eÌ\82Ä\82Ü\82·\81B
+*/
+#ifndef __SFJP_OPENMGL_roast_bufsafe_H__
+#define __SFJP_OPENMGL_roast_bufsafe_H__
+
+#include <stdio.h>
+#include <string.h>
+#include "roast_common.h"
+#include "roast_str.h"
+
+
+/*////////////////////////////////////////////////////////////////*/
+
+/*     \95\8e\9a\97ñ\83o\83b\83t\83@\82Ì\8dÅ\8cã\82ð\0\82É\82·\82é\81B */
+#define ROAST_STR_ZTERM(STR,BUFSIZE)           STR[BUFSIZE-1] = '\0'
+#define ROAST_STR_ZERO_TERM(STR,BUFSIZE)       ROAST_STR_ZTERM(STR,BUFSIZE)    /*      alias to ROAST_STR_ZTERM */
+
+
+/*////////////////////////////////////////////////////////////////*/
+
+/*     strcpy\82Ì\83Z\81[\83t\94Å */
+#define roast_safe_strcpy(dest,src,dest_memsize)               \
+       (ROAST_STR_ZTERM(dest,dest_memsize),                            \
+       strncpy( dest, src, dest_memsize-1 ))
+
+#define roast_safe_strcat(dest,src,dest_memsize)               \
+       (ROAST_STR_ZTERM(dest,dest_memsize),                            \
+       dest_memsize-1 - strlen(dest) >= 0 ?                            \
+               strncat( dest, src, dest_memsize-1 - strlen(dest) ) : dest)
+
+/*#define roast_safe_strcat(dest,src,dest_memsize)             \
+       ROAST_STR_ZTERM(dest,dest_memsize),                                     \
+       int copy_size = dest_memsize-1 - strlen(dest),          \
+       if ( copy_size < 0 )                                                            \
+               copy_size = 0,                                                                  \
+       strncat( dest, src, copy_size )*/
+
+#define roast_safe_strccpy(dest,src,c,dest_memsize)            \
+       (ROAST_STR_ZTERM(dest,dest_memsize),                            \
+       roast_strcncpy( dest, src, c, dest_memsize-1 ))
+
+
+/*     Auto Sizeof */
+#define ROAST_SAFE_STRCPY_AS(DEST,SRC)         roast_safe_strcpy(DEST,SRC,sizeof(DEST))
+#define ROAST_SAFE_STRCAT_AS(DEST,SRC)         roast_safe_strcat(DEST,SRC,sizeof(DEST))
+#define ROAST_SAFE_STRCCPY_AS(DEST,SRC,C)      roast_safe_strccpy(DEST,SRC,C,sizeof(DEST))
+
+
+/*////////////////////////////////////////////////////////////////*/
+
+
+/*  \88À\91S\82È delete, delete[], Release()  */
+#define ROAST_SAFE_DELETE(p)                   { if ( p != NULL ) { delete p; p=NULL; }}
+#define ROAST_SAFE_DELETE_ARY(p)               { if ( p != NULL ) { delete []p; p=NULL; }}
+#define ROAST_SAFE_DELETE_ARRAY(p)             { if ( p != NULL ) { delete []p; p=NULL; }}
+#define ROAST_SAFE_FREE(p)                             { if ( p != NULL ) { free(p); p=NULL; }}
+#define ROAST_SAFE_RELEASE(p)                  { if ( p != NULL ) { (p)->Release(); (p)=NULL; }}
+
+
+/*#define ROAST_SAFE_NEW(p)                            { if ( p != NULL ) { delete p; p=NULL; }}*/
+
+
+/*//////////////////////////////////////////////////////////////////////*/
+/*//////////////////////////////////////////////////////////////////////*/
+/*//////////////////////////////////////////////////////////////////////*/
+/*//////////////////////////////////////////////////////////////////////*/
+/*//////////////////////////////////////////////////////////////////////*/
+
+
+
+#ifdef ROAST_WIN32
+
+       /*///////////////////////////////////////////////////////////////////
+       //
+       //      VC\82Ì_snprintf\82ÍC99\82Ìsnprintf\82Æ\8b\93\93®\82ª\88á\82¤\82Ì\82Å\81A\82±\82ê\82ð\8f\80\8b\92\82³\82¹\82é
+       //
+       /////////////////////////////////////////////////////////////////////*/
+
+       __ROAST_EXTERN_C_START
+       
+       int roast_vc_vsnprintf_conformed_c99(
+               char *str, size_t size, const char *format, va_list ap );
+       
+       int roast_vc_snprintf_conformed_c99(
+               char *str, size_t size, const char *format, ... );
+       
+       __ROAST_EXTERN_C_END
+
+       #define roast_vsnprintf roast_vc_vsnprintf_conformed_c99
+       #define roast_snprintf roast_vc_snprintf_conformed_c99
+
+#else /* UNIX/Linux */
+
+       #define roast_vsnprintf vsnprintf
+       #define roast_snprintf snprintf
+
+#endif
+
+/*
+
+//     snprintf \82ð roast_snprintf \82É\82µ\82¿\82á\82¤
+//     \81i\81¦ _ROAST_NOT_SNPRINTF_REPLACES \82ðdefine\82·\82é\8e\96\82É\89ñ\94ð\89Â\94\\81j
+
+#ifndef _ROAST_NOT_SNPRINTF_REPLACES
+       #define vsnprintf roast_vsnprintf
+       #define snprintf roast_snprintf
+#endif//_ROAST_NOT_SNPRINTF_REPLACES
+
+*/
+
+/*////////////////////////////////////////////////////////////////*/
+
+#ifdef _ROAST_REMOVE_MACRO_NS
+
+       #define STR_ZTERM                               ROAST_STR_ZTERM
+       #define STR_ZERO_TERM                   ROAST_STR_ZERO_TERM
+       
+       #define safe_strcpy                             roast_safe_strcpy
+       #define safe_strcat                             roast_safe_strcat
+       #define safe_strccpy                    roast_safe_strccpy
+       
+       #define SAFE_STRCPY_AS                  ROAST_SAFE_STRCPY_AS
+       #define SAFE_STRCAT_AS                  ROAST_SAFE_STRCAT_AS
+       #define SAFE_STRCCPY_AS                 ROAST_SAFE_STRCCPY_AS
+
+/*
+       #define STR_ZTERM(DEST,SRC)                                     ROAST_STR_ZTERM(DEST,SRC)
+       #define STR_ZERO_TERM(DEST,SRC)                         ROAST_STR_ZERO_TERM(DEST,SRC)
+       
+       #define safe_strcpy(DEST,SRC,BUFSIZE)           roast_safe_strcpy(DEST,SRC,BUFSIZE)
+       #define safe_strcat(DEST,SRC,BUFSIZE)           roast_safe_strcat(DEST,SRC,BUFSIZE)
+       #define safe_strccpy(DEST,SRC,C,BUFSIZE)        roast_safe_strccpy(DEST,SRC,C,BUFSIZE)
+       
+       #define SAFE_STRCPY_AS(DEST,SRC)                        ROAST_SAFE_STRCPY_AS(DEST,SRC)
+       #define SAFE_STRCAT_AS(DEST,SRC)                        ROAST_SAFE_STRCAT_AS(DEST,SRC)
+       #define SAFE_STRCCPY_AS(DEST,SRC,C)                     ROAST_SAFE_STRCCPY_AS(DEST,SRC,C)
+*/
+
+       #ifndef _ROAST_NOT_SNPRINTF_REPLACES
+               #define vsnprintf roast_vsnprintf
+               #define snprintf roast_snprintf
+       #endif/*_ROAST_NOT_SNPRINTF_REPLACES*/
+       
+       
+       
+       #ifndef SAFE_DELETE
+               #define SAFE_DELETE                     ROAST_SAFE_DELETE
+       #endif
+       
+       #ifndef SAFE_DELETE_ARY
+               #define SAFE_DELETE_ARY         ROAST_SAFE_DELETE_ARY
+       #endif
+       
+       #ifndef SAFE_DELETE_ARRAY
+               #define SAFE_DELETE_ARRAY       ROAST_SAFE_DELETE_ARRAY
+       #endif
+       
+       #ifndef SAFE_RELEASE
+               #define SAFE_RELEASE            ROAST_SAFE_RELEASE
+       #endif
+
+#endif
+
+/*
+namespace roast{
+}
+*/
+
+#endif/*__SFJP_OPENMGL_roast_bufsafe_H__*/
diff --git a/source/roast_str.c b/source/roast_str.c
new file mode 100644 (file)
index 0000000..5403a8a
--- /dev/null
@@ -0,0 +1,315 @@
+/*     Roast+ License v0.1
+
+//     ### C compilable ###
+*/
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "roast_str.h"
+#include "roast_bufsafe.h"
+
+__ROAST_EXTERN_C_START
+
+
+/*  roast_strccpy  */
+char* roast_strccpy( char* to, const char* from, const char c )
+{
+       char *to_pre = to;
+       
+       /*for( ; *from != c; from++, to++ )*/
+       for( ; *from != c && *from != '\0'; from++, to++ )      /*      \82È\82ñ\82Å\93ü\82Á\82Ä\82È\82¢\82ñ\82¾\82Á\82¯\81H\81i\82¢\82Â\82©\82Íc\82É\82È\82é\82©\82ç\81H */
+               *to = *from;
+       
+       *to = '\0';
+       
+       return to_pre;
+}
+
+
+
+/*     roast_strcncpy  */
+/*     \8cÃ\82¢\83o\81[\83W\83\87\83\93\81Bstrncpy\82Æ\82©\82Æ\8b\93\93®\82ª\88á\82¤\81B\94p\8e~   */
+char* roast_strcncpy_Old1( char* to, const char* from, const char c, int n )
+{
+       char *to_pre = to;
+       const char* p_to_buflast = to + n - 1;
+       
+       for( ; *from != c && *from != '\0' && to != p_to_buflast; from++, to++ )
+               *to = *from;
+       
+       /*int i=0;
+       for( ; *from != c && *from != '\0' && i < n; from++, to++, i++ )
+               *to = *from;*/
+       
+       *to = '\0';
+       
+       return to_pre;
+}
+
+
+/*     roast_strcncpy  */
+char* roast_strcncpy( char* to, const char* from, const char c, int n )
+{
+       char *to_pre = to;
+       const char* p_to_buflast = to + n;
+       
+       for( ; *from != c && *from != '\0' && to < p_to_buflast; from++, to++ )
+               *to = *from;
+       
+       if ( *from != c )
+       {
+               for( ; to < p_to_buflast; to++ )
+                       *to = '\0';
+       }
+       
+       return to_pre;
+}
+
+/*     roast_strchrrpc  */
+char* roast_strchrrpc( char* buf, char from, char to )
+{
+       char *p = buf;
+
+       for(; *p != '\0' ; p++ )
+       {
+               if ( *p == from )
+                       *p = to;
+       }
+
+       return buf;
+}
+
+/*********************************************************************************************************/
+
+
+/*     roast_strrpc    */
+/*char* roast_strrpc( char* target_str, size_t str_bufsize, const char* keyword_from, const char* keyword_to )
+{
+       return str;
+}*/
+
+
+
+/*     \95\8e\9a\97ñ\92u\8a·\8aÖ\90\94\81B\93ü\97Í\8fo\97Í\83o\83b\83t\83@\82ª\93¯\82\8e\96\82É\82æ\82é\92x\82¢\83o\81[\83W\83\87\83\93\81B\94p\8e~      */
+char* roast_strrpc1( char* buf, unsigned int bufsize, const char* find_str, const char* new_str )
+//char* roast_strrpc( char *str, const char *target_str, const char *new_str, size_t size )
+{
+       const int find_len = strlen(find_str);          /*      find_str\82Ì\95\8e\9a\97ñ\92·\82ð\97\\82ß\8cv\8eZ\82µ\82Ä\82¨\82­\81i\89½\89ñ\82à\8eg\82¤\82Ì\82Å\81j*/
+       const int new_len = strlen(new_str);            /*      new_str\82Ì\95\8e\9a\97ñ\92·\82ð\97\\82ß\8cv\8eZ\82µ\82Ä\82¨\82­\81i\89½\89ñ\82à\8eg\82¤\82Ì\82Å\81j*/
+       const int diff_len = new_len - find_len;        /*      find_str\82Ænew_str\82Ì\8d·\95ª\95\8e\9a\97ñ\92·\82ð\97\\82ß\8cv\8eZ\82µ\82Ä\82¨\82­\81i\89½\89ñ\82à\8eg\82¤\82Ì\82Å\81j*/
+
+       char *p = buf;                                  /*      \8c»\8dÝ\88Ê\92u\82ð\8bL\89¯\82·\82é\82½\82ß\82Ì\83|\83C\83\93\83^\81i\95Ï\93®\81j*/
+       int buf_len = strlen(buf);              /*      \8c»\8dÝ\82Ì\83o\83b\83t\83@\95\8e\9a\97ñ\92·\81i\95Ï\93®\81j*/
+       /*int p_len = strlen(buf);               *      p\82©\82ç\82Ì\95\8e\9a\97ñ\92·\81i\95Ï\93®\81j-> \91å\82µ\82Ä\91¬\93x\89ü\91P\82³\82ê\82È\82³\82»\82¤\82¾\82Á\82½\82Ì\82Å\82â\82ß\82½  */
+
+       /*//////////////////////////////////////////////////////////////////////////////////////////////*/
+       
+       
+       /*      \8c\9f\8dõ\83\8b\81[\83v      */
+       while( NULL != (p = strstr(p, find_str)) )
+       {
+               /*      \92u\8a·\82·\82é\82Ì\82É\8f\\95ª\82È\83\81\83\82\83\8a\82ª\82 \82é\82©\81H      */
+               /*if ( strlen(p) + diff_len > bufsize-1 )       */
+               if ( buf_len + diff_len > (int)bufsize-1 )      /*      strlen()\82ð\97p\82¢\82È\82¢\8e\96\82É\82æ\82è\82æ\82è\8d\82\91¬\82É\81I\81c\82É\82È\82Á\82½\94¤\81B\81B\81B*/
+               {
+                       /*      \91«\82è\82È\82¢\82Ì\82Å\92\86\92f\81B\82Æ\8c¾\82¤\8ed\97l\82É\82·\82é\82©\81c\82Æ\82è\82 \82¦\82¸\81c      */
+                       return NULL;
+               }
+               
+
+               /*      \92u\8a·\82É\82æ\82è\88È\8d~\82Ì\95\8e\9a\97ñ\88Ê\92u\82ª\82¸\82ê\82é\8fê\8d\87(diff_len\82ª0\88È\8aO)\82Í\82¸\82ç\82µ\82Ä\82¨\82­   */
+               /*      \81i\88ø\90\94\8cv\8eZ\81A\8aÖ\90\94\8cÄ\82Ñ\8fo\82µ\82¾\82¯\82Å\82à\8c\8b\8d\\82È\83I\81[\83o\81[\83w\83b\83h\82É\82È\82é\82Æ\8ev\82¤\82ñ\82Å\81Aif\82Å\88Í\82Á\82½\95û\82ª\8cø\97¦\97Ç\82¢\82Æ\8ev\82¤\82ñ\82¾\82º\81B\81j    */
+               if ( diff_len != 0 )
+                       memmove( p + new_len, p + find_len, (buf_len-(p-buf)) - find_len + 1 ); /*      strlen()\82ð\97p\82¢\82È\82¢\8e\96\82É\82æ\82è\82æ\82è\8d\82\91¬\82É\81I\81c\82É\82È\82Á\82½\94¤\81B\81B\81B*/
+                       /*memmove( p + new_len, p + find_len, strlen(p) - find_len + 1 );       */
+                       /*memmove( p, p + diff_len, strlen(p) + 1 );    \81ª\82Ì\95û\82ª\97]\95ª\82È\83R\83s\81[\8ds\82í\82È\82¢\82Ì\82Å\8d\82\91¬\82©\81E\81E\81E\81B\82½\82¾\82µ\88ø\90\94\8cv\8eZ\82Ì\83R\83X\83g\82Í\82 \82é\82¯\82Ç\82È\81B*/
+
+
+               /*      \95\8e\9a\97ñ\82ð\8fã\8f\91\82«\82·\82é      */
+               memcpy( p, new_str, new_len );
+
+               /*      \83|\83C\83\93\83^\82ðnew_len\95ª\90i\82ß\82é */
+               p += new_len;
+
+               /*      buf_len\82à\8dX\90V   */
+               buf_len += diff_len;
+       }
+
+       return buf;
+}
+
+
+/************* V2 : Fast Version *****************/
+/*     \93ü\97Í\8fo\97Í\83o\83b\83t\83@\82ð\95Ê\81X\82Æ\82·\82é\8e\96\82É\82æ\82è\8d\82\91¬\82É\82È\82è\82Ü\82µ\82½\81B  */
+/*     \81\96\82±\82Á\82¿\82Í\83o\83b\83t\83@\83T\83C\83Y\82ð\83`\83F\83b\83N\82µ\82È\82¢\83o\81[\83W\83\87\83\93\82Å\82·\81B\83o\83b\83t\83@\83T\83C\83Y\82ð\83`\83F\83b\83N\82·\82é\82Ì\82Í roast_safe_strrpc2() \82Å\82·  */
+char* roast_strrpc2( char* outbuf, const char* inbuf, const char* find_str, const char* rpc_str )
+{
+       const unsigned int find_len = strlen(find_str);                 /*      find_str\82Ì\95\8e\9a\97ñ\92·\82ð\97\\82ß\8cv\8eZ\82µ\82Ä\82¨\82­\81i\89½\89ñ\82à\8eg\82¤\82Ì\82Å\81j*/
+       const unsigned int rpcstr_len = strlen(rpc_str);                /*      rpc_str\82Ì\95\8e\9a\97ñ\92·\82ð\97\\82ß\8cv\8eZ\82µ\82Ä\82¨\82­\81i\89½\89ñ\82à\8eg\82¤\82Ì\82Å\81j*/
+
+       const char *p_from = inbuf;
+       const char *p_from_next = NULL;
+       char *p_to = outbuf;
+       unsigned int copy_len = 0;              /*      \83R\83s\81[\92·\82ð\88ê\8e\9e\93I\82É\95Û\91\82·\82é\95Ï\90\94  */
+
+       /*//////////////////////////////////////////////////////////////////////////////////////////////*/
+       
+#define __ROAST_STRRPC__STRNCPY(FROM, COPY_LEN)        strncpy(p_to, FROM, COPY_LEN);
+/*#define __ROAST_STRRPC__STRNCPY(FROM, LEN)           {       \
+               if ( (p_to+LEN) > p_to_last ){  \
+                       strncpy(p_to, FROM, p_to_last - p_to - 1 );     \
+                       *(p_to_last-1) = '\0';  \
+                       break;  \
+               }else{  \
+                       strncpy(p_to, FROM, LEN);       \
+               }}*/
+
+       for(;;)
+       {
+               /*      \8c\9f\8dõ    */
+               p_from_next = strstr(p_from, find_str);
+
+
+               /*      \92u\8a·\91Î\8fÛ\82 \82è    */
+               if ( p_from_next != NULL )
+               {
+                       /*      \92u\8a·\82·\82é\95\8e\9a\97ñ\82Ì\91O\82Ü\82Å\82ðp_to\82É\83R\83s\81[    */
+                       copy_len = p_from_next - p_from;
+                       /*strncpy(p_to, p_from, copy_len);*/
+                       __ROAST_STRRPC__STRNCPY(p_from, copy_len);
+                       p_to += copy_len;
+
+                       /*      \92u\8a·\8cã\82Ì\95\8e\9a\97ñ\82ð\83R\83s\81[  */
+                       /*strncpy(p_to, rpc_str, rpcstr_len);*/
+                       __ROAST_STRRPC__STRNCPY(rpc_str, rpcstr_len);
+                       p_to += rpcstr_len;
+
+                       /*      p_from\82Ì\83I\83t\83Z\83b\83g\82ðp_from_next\81{find_len\82É     */
+                       p_from = p_from_next + find_len;
+               }
+
+
+               /*      \82à\82¤\82±\82ê\88È\8fã\92u\8a·\91Î\8fÛ\82Í\82È\82¢\82æ    */
+               else
+               {
+                       /*      \8cã\89½\95\8e\9a\83R\83s\81[\82·\82ê\82Î\82¢\82¢\82ñ\82¾    */
+                       copy_len = strlen(p_from);
+
+                       /*      \94c\88¬\81B\83R\83s\81[\82·\82é\82æ\81B\81i'\0'\8aÜ\82ß\82Ä\81j      */
+                       /*strncpy(p_to, p_from, n+1);*/
+                       __ROAST_STRRPC__STRNCPY(p_from, copy_len+1);
+
+                       /*      \8fI\82í\82è\82Á\82·\81B\8fI\97¹\82Á\82·\81B\94²\82¯\82é\82Á\82·        */
+                       break;
+               }
+       }
+#undef __ROAST_STRRPC__STRNCPY
+       return outbuf;
+}
+
+
+/*     safe\83o\81[\83W\83\87\83\93\81i\83o\83b\83t\83@\83T\83C\83Y\82ð\83`\83F\83b\83N\81j      */
+char* roast_safe_strrpc2( char* outbuf, unsigned int outbuf_size, const char* inbuf, const char* find_str, const char* rpc_str )
+{
+       const unsigned int find_len = strlen(find_str);                 /*      find_str\82Ì\95\8e\9a\97ñ\92·\82ð\97\\82ß\8cv\8eZ\82µ\82Ä\82¨\82­\81i\89½\89ñ\82à\8eg\82¤\82Ì\82Å\81j*/
+       const unsigned int rpcstr_len = strlen(rpc_str);                /*      rpc_str\82Ì\95\8e\9a\97ñ\92·\82ð\97\\82ß\8cv\8eZ\82µ\82Ä\82¨\82­\81i\89½\89ñ\82à\8eg\82¤\82Ì\82Å\81j*/
+
+       const char *p_from = inbuf;
+       const char *p_from_next = NULL;
+       char *p_to_last = outbuf + outbuf_size;
+       char *p_to = outbuf;
+       unsigned int copy_len = 0;              /*      \83R\83s\81[\92·\82ð\88ê\8e\9e\93I\82É\95Û\91\82·\82é\95Ï\90\94  */
+
+       /*//////////////////////////////////////////////////////////////////////////////////////////////*/
+       
+//#define __ROAST_STRRPC__STRNCPY(FROM, COPY_LEN)      strncpy(p_to, FROM, COPY_LEN);
+#define __ROAST_STRRPC__STRNCPY(FROM, LEN)             {       \
+               if ( (p_to+LEN) > p_to_last ){  \
+                       strncpy(p_to, FROM, p_to_last - p_to - 1 );     \
+                       *(p_to_last-1) = '\0';  \
+                       break;  \
+               }else{  \
+                       strncpy(p_to, FROM, LEN);       \
+               }}
+
+       for(;;)
+       {
+               /*      \8c\9f\8dõ    */
+               p_from_next = strstr(p_from, find_str);
+
+
+               /*      \92u\8a·\91Î\8fÛ\82 \82è    */
+               if ( p_from_next != NULL )
+               {
+                       /*      \92u\8a·\82·\82é\95\8e\9a\97ñ\82Ì\91O\82Ü\82Å\82ðp_to\82É\83R\83s\81[    */
+                       copy_len = p_from_next - p_from;
+                       /*strncpy(p_to, p_from, copy_len);*/
+                       __ROAST_STRRPC__STRNCPY(p_from, copy_len);
+                       p_to += copy_len;
+
+                       /*      \92u\8a·\8cã\82Ì\95\8e\9a\97ñ\82ð\83R\83s\81[  */
+                       /*strncpy(p_to, rpc_str, rpcstr_len);*/
+                       __ROAST_STRRPC__STRNCPY(rpc_str, rpcstr_len);
+                       p_to += rpcstr_len;
+
+                       /*      p_from\82Ì\83I\83t\83Z\83b\83g\82ðp_from_next\81{find_len\82É     */
+                       p_from = p_from_next + find_len;
+               }
+
+
+               /*      \82à\82¤\82±\82ê\88È\8fã\92u\8a·\91Î\8fÛ\82Í\82È\82¢\82æ    */
+               else
+               {
+                       /*      \8cã\89½\95\8e\9a\83R\83s\81[\82·\82ê\82Î\82¢\82¢\82ñ\82¾    */
+                       copy_len = strlen(p_from);
+
+                       /*      \94c\88¬\81B\83R\83s\81[\82·\82é\82æ\81B\81i'\0'\8aÜ\82ß\82Ä\81j      */
+                       /*strncpy(p_to, p_from, n+1);*/
+                       __ROAST_STRRPC__STRNCPY(p_from, copy_len+1);
+
+                       /*      \8fI\82í\82è\82Á\82·\81B\8fI\97¹\82Á\82·\81B\94²\82¯\82é\82Á\82·        */
+                       break;
+               }
+       }
+#undef __ROAST_STRRPC__STRNCPY
+
+       return outbuf;
+}
+
+
+/*     \95\8e\9a\97ñ\92·\82³\82ª\92Z\82­\82È\82é\8e\96\82ª\95ª\82©\82é\8fê\8d\87\82Ì\82Ý\8eg\82Á\82Ä\89º\82³\82¢\81B    */
+/*     Result string to short only usable.     */
+char* roast_strrpc_toshort( char* iobuf, const char* find_str, const char* rpc_str )
+{
+       const char* inbuf = iobuf;
+       char* outbuf = (char*)malloc( strlen(iobuf)+1 );
+       roast_strrpc( outbuf, inbuf, find_str, rpc_str );
+       strcpy( iobuf, outbuf );
+       free(outbuf);
+       return iobuf;
+}
+
+
+/*     \93ü\8fo\97Í\83o\83b\83t\83@\8b¤\92Ê\83o\81[\83W\83\87\83\93\81B\8eÀ\8dÛ\82É\82Í\88ê\8e\9e\83o\83b\83t\83@\82ð\8dì\82Á\82Ä\82â\82Á\82Ä\82é\81B    */
+/*     I/O Buffer shared version. */
+char* roast_safe_strrpc_bufshare( char* iobuf, unsigned int buf_size, const char* find_str, const char* rpc_str )
+{
+       const char* inbuf = iobuf;
+       char* outbuf = (char*)malloc( buf_size );
+       roast_safe_strrpc( outbuf, buf_size, inbuf, find_str, rpc_str );
+       strcpy( iobuf, outbuf );
+       free(outbuf);
+       return iobuf;
+}
+
+
+/*     roast_strrpc1\82ð\96³\97\9d\82â\82è\8eg\82¤\83o\81[\83W\83\87\83\93
+char* roast_strrpc( char* outbuf, unsigned int outbuf_size, const char* inbuf, const char* find_str, const char* rpc_str )
+{
+       roast_safe_strcpy(outbuf, inbuf, outbuf_size);
+
+       return roast_strrpc1(outbuf, outbuf_size, find_str, rpc_str);
+}
+*/
+
+__ROAST_EXTERN_C_END