Subversion Repositories HelenOS

Rev

Rev 4137 | Rev 4215 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4137 Rev 4207
Line 104... Line 104...
104
 * @param startpos - starting position, changes to found position
104
 * @param startpos - starting position, changes to found position
105
 * @return Pointer to the part of string that should be completed or NULL
105
 * @return Pointer to the part of string that should be completed or NULL
106
 */
106
 */
107
static char * symtab_search_one(const char *name, int *startpos)
107
static char * symtab_search_one(const char *name, int *startpos)
108
{
108
{
109
    unsigned int namelen = strlen(name);
109
    unsigned int namelen = str_size(name);
110
    char *curname;
110
    char *curname;
111
    int i, j;
111
    int i, j;
112
    int colonoffset = -1;
112
    int colonoffset = -1;
113
 
113
 
114
    for (i = 0; name[i]; i++)
114
    for (i = 0; name[i]; i++)
Line 124... Line 124...
124
            ;
124
            ;
125
        if (!curname[j])
125
        if (!curname[j])
126
            continue;
126
            continue;
127
        j -= colonoffset;
127
        j -= colonoffset;
128
        curname += j;
128
        curname += j;
129
        if (strlen(curname) < namelen)
129
        if (str_size(curname) < namelen)
130
            continue;
130
            continue;
131
        if (strncmp(curname, name, namelen) == 0) {
131
        if (strncmp(curname, name, namelen) == 0) {
132
            *startpos = i;
132
            *startpos = i;
133
            return curname + namelen;
133
            return curname + namelen;
134
        }
134
        }
Line 155... Line 155...
155
    char *hint;
155
    char *hint;
156
    int i;
156
    int i;
157
 
157
 
158
    i = 0;
158
    i = 0;
159
    while ((hint = symtab_search_one(name, &i))) {
159
    while ((hint = symtab_search_one(name, &i))) {
160
        if (!strlen(hint)) {
160
        if (!str_size(hint)) {
161
            *addr =  uint64_t_le2host(symbol_table[i].address_le);
161
            *addr =  uint64_t_le2host(symbol_table[i].address_le);
162
            found++;
162
            found++;
163
        }
163
        }
164
        i++;
164
        i++;
165
    }
165
    }
Line 212... Line 212...
212
    /* Allow completion of pointers  */
212
    /* Allow completion of pointers  */
213
    if (name[0] == '*' || name[0] == '&')
213
    if (name[0] == '*' || name[0] == '&')
214
        name++;
214
        name++;
215
 
215
 
216
    /* Do not print everything */
216
    /* Do not print everything */
217
    if (!strlen(name))
217
    if (!str_size(name))
218
        return 0;
218
        return 0;
219
   
219
   
220
 
220
 
221
    output[0] = '\0';
221
    output[0] = '\0';
222
 
222
 
223
    while ((foundtxt = symtab_search_one(name, &startpos))) {
223
    while ((foundtxt = symtab_search_one(name, &startpos))) {
224
        startpos++;
224
        startpos++;
225
        if (!found)
225
        if (!found)
226
            strncpy(output, foundtxt, strlen(foundtxt) + 1);
226
            strncpy(output, foundtxt, str_size(foundtxt) + 1);
227
        else {
227
        else {
228
            for (i = 0; output[i] && foundtxt[i] &&
228
            for (i = 0; output[i] && foundtxt[i] &&
229
                 output[i] == foundtxt[i]; i++)
229
                 output[i] == foundtxt[i]; i++)
230
                ;
230
                ;
231
            output[i] = '\0';
231
            output[i] = '\0';
Line 233... Line 233...
233
        found++;
233
        found++;
234
    }
234
    }
235
    if (!found)
235
    if (!found)
236
        return 0;
236
        return 0;
237
 
237
 
238
    if (found > 1 && !strlen(output)) {
238
    if (found > 1 && !str_size(output)) {
239
        printf("\n");
239
        printf("\n");
240
        startpos = 0;
240
        startpos = 0;
241
        while ((foundtxt = symtab_search_one(name, &startpos))) {
241
        while ((foundtxt = symtab_search_one(name, &startpos))) {
242
            printf("%s\n", symbol_table[startpos].symbol_name);
242
            printf("%s\n", symbol_table[startpos].symbol_name);
243
            startpos++;
243
            startpos++;