|
Server : Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e-fips-rhel5 DAV/2 PHP/5.2.17 System : Linux localhost 2.6.18-419.el5 #1 SMP Fri Feb 24 22:47:42 UTC 2017 x86_64 User : nobody ( 99) PHP Version : 5.2.17 Disable Function : NONE Directory : /proc/21571/root/usr/share/systemtap/tapset/ |
Upload File : |
// Standard string functions tapset.
// Copyright (C) 2009 Red Hat, Inc.
//
// This file is part of systemtap, and is free software. You can
// redistribute it and/or modify it under the terms of the GNU General
// Public License (GPL); either version 2, or (at your option) any
// later version.
/**
* sfunction strlen - Returns the length of a string
*
* @s: the string
*
* Description: This function returns the length of the string, which
* can be zero up to MAXSTRINGLEN.
*/
function strlen:long(s:string) %{ /* pure */ /* unprivileged */
STAP_RETVALUE = strlen(STAP_ARG_s);
%}
/**
* sfunction substr - Returns a substring
*
* @str: the string to take a substring from
* @start: starting position of the extracted string (first character is 0)
* @length: length of string to return
*
* Description: Returns the substring of the given string at the given
* start position with the given length (or smaller if the length of the
* original string is less than start + length, or length is bigger than
* MAXSTRINGLEN).
*/
function substr:string(str:string,start:long, length:long) %{ /* pure */ /* unprivileged */
int64_t length = clamp_t(int64_t, STAP_ARG_length + 1, 0, MAXSTRINGLEN);
if (STAP_ARG_start >= 0 && STAP_ARG_start < strlen(STAP_ARG_str))
strlcpy(STAP_RETVALUE, STAP_ARG_str + STAP_ARG_start, length);
%}
/**
* sfunction stringat - Returns the char at a given position in the string
*
* @str: the string to fetch the character from
* @pos: the position to get the character from (first character is 0)
*
* Description: This function returns the character at a given position in
* the string or zero if thestring doesn't have as many characters.
*/
function stringat:long(str:string, pos:long) %{ /* pure */ /* unprivileged */
if (STAP_ARG_pos >= 0 && STAP_ARG_pos < strlen(STAP_ARG_str))
STAP_RETVALUE = STAP_ARG_str[STAP_ARG_pos];
else
STAP_RETVALUE = 0;
%}
/**
* sfunction isinstr - Returns whether a string is a substring of another string
*
* @s1: string to search in
* @s2: substring to find
*
* Description: This function returns 1 if string @s1 contains @s2,
* otherwise zero.
*/
function isinstr:long(s1:string,s2:string) %{ /* pure */ /* unprivileged */
if (strstr(STAP_ARG_s1,STAP_ARG_s2) != NULL)
STAP_RETVALUE = 1;
else
STAP_RETVALUE = 0;
%}
/**
* sfunction text_str - Escape any non-printable chars in a string
*
* @input: the string to escape
*
* Description: This function accepts a string argument,
* and any ASCII characters that are not
* printable are replaced by the corresponding escape sequence in the
* returned string.
*/
function text_str:string(input:string)
%{ /* pure */ /* unprivileged */
_stp_text_str(STAP_RETVALUE, STAP_ARG_input, 0, 0, 0);
%}
/**
* sfunction text_strn - Escape any non-printable chars in a string
*
* @input: the string to escape
* @len: maximum length of string to return (0 implies MAXSTRINGLEN)
* @quoted: put double quotes around the string. If input string is
* truncated it will have "..." after the second quote
*
* Description: This function accepts a string of designated length,
* and any ASCII characters that are not
* printable are replaced by the corresponding escape sequence in the
* returned string.
*/
function text_strn:string(input:string, len:long, quoted:long)
%{ /* pure */ /* unprivileged */
int64_t len = clamp_t(int64_t, STAP_ARG_len, 0, MAXSTRINGLEN);
_stp_text_str(STAP_RETVALUE, STAP_ARG_input, len, STAP_ARG_quoted, 0);
%}
/**
* sfunction - str_replace Replaces all instances of a substring with another
*
* @prnt_str: the string to search and replace in
* @srch_str: the substring which is used to search in @prnt_str string
* @rplc_str: the substring which is used to replace @srch_str
*
* Description: This function returns the given string with
* substrings replaced.
*/
function str_replace:string (prnt_str:string, srch_str:string, rplc_str:string)
%{ /* pure */ /* unprivileged */
char *ptr = STAP_ARG_prnt_str;
char *ptr_base = STAP_ARG_prnt_str;
int strlen_srch_str = strlen(STAP_ARG_srch_str);
STAP_RETVALUE[0] = '\0';
if(strlen_srch_str == 0) {
strlcat(STAP_RETVALUE, ptr_base, MAXSTRINGLEN);
return;
}
while((ptr = strstr(ptr, STAP_ARG_srch_str)) != NULL) {
*ptr = '\0';
strlcat(STAP_RETVALUE, ptr_base, MAXSTRINGLEN);
strlcat(STAP_RETVALUE, STAP_ARG_rplc_str, MAXSTRINGLEN);
ptr = ptr + strlen_srch_str;
ptr_base = ptr;
}
strlcat(STAP_RETVALUE, ptr_base, MAXSTRINGLEN);
return;
%}
/**
* sfunction - strtol - Convert a string to a long
*
* @str: string to convert
* @base: the base to use
*
* Description: This function converts the string representation of a number to an integer.
* The @base parameter indicates the number base to assume for the string (eg. 16 for hex, 8 for octal, 2 for binary).
*/
function strtol:long(str:string, base:long)
%{ /* pure */ /* unprivileged */
STAP_RETVALUE = simple_strtol(STAP_ARG_str, NULL, STAP_ARG_base);
%}
/**
* sfunction isdigit - Checks for a digit
*
* @str: string to check
*
* Description: Checks for a digit (0 through 9) as the first
* character of a string. Returns non-zero if true, and a zero if
* false.
*/
function isdigit:long(str:string)
%{ /* pure */ /* unprivileged */
STAP_RETVALUE = isdigit(STAP_ARG_str[0]);
%}