diff --git a/src/plugins/hllapi/calls.c b/src/plugins/hllapi/calls.c index 342b570..eeeeb0d 100644 --- a/src/plugins/hllapi/calls.c +++ b/src/plugins/hllapi/calls.c @@ -461,3 +461,17 @@ #warning Implementar return -1; } + + char * hllapi_get_string(int offset, size_t len) + { + if(!(get_text_at_offset && hSession)) + return NULL; + + return get_text_at_offset(hSession,offset-1,len); + } + + void hllapi_free(void *p) + { + if(release_memory) + release_memory(p); + } diff --git a/src/plugins/hllapi/client.h b/src/plugins/hllapi/client.h index 709d26f..0aa5c9a 100644 --- a/src/plugins/hllapi/client.h +++ b/src/plugins/hllapi/client.h @@ -60,4 +60,8 @@ int hllapi_pipe_setcursor(void *h, int baddr); int hllapi_pipe_emulate_input(void *hSession, const char *s, int len, int pasting); + char * hllapi_get_string(int offset, size_t len); + void hllapi_free(void *p); + + diff --git a/src/plugins/hllapi/hllapi.c b/src/plugins/hllapi/hllapi.c index 15938bc..d4dda35 100644 --- a/src/plugins/hllapi/hllapi.c +++ b/src/plugins/hllapi/hllapi.c @@ -316,15 +316,34 @@ static int search_ps(char *buffer, unsigned short *length, unsigned short *ps) * 24 The search string was not found. * */ - size_t szBuffer = strlen(buffer); + size_t szBuffer = strlen(buffer); + char * text; + int rc = -1; - if(*length < szBuffer) + if(*length < szBuffer) szBuffer = *length; + + + text = hllapi_get_string(*ps,szBuffer); + if(!text) + return HLLAPI_STATUS_SYSTEM_ERROR; + + if(strncmp(text,buffer,szBuffer)) + { + // String not found + *ps = 0; + rc = 24; + } + else + { + // String found + *ps = 1; + rc = 0; + } + + hllapi_free(text); - - #warning Implementar - - return HLLAPI_STATUS_SYSTEM_ERROR; + return rc; } static int copy_ps(char *buffer, unsigned short *length, unsigned short *rc) @@ -338,6 +357,11 @@ static int copy_ps(char *buffer, unsigned short *length, unsigned short *rc) * * */ + size_t szBuffer = strlen(buffer); + + if(*length < szBuffer) + szBuffer = *length; + #warning Implementar -- libgit2 0.21.2