Exemplo n.º 1
0
void
removeTokenAt(TokensTable *tt, int index)
{
    Token *tk = (Token *)tt->p[index];
    freeToken(tk);
    tt->p[index] = NULL;
}
Exemplo n.º 2
0
/**
 * removeToken removes a token from the specified slot.
 *
 * @param slot       Pointer to slot structure.
 *
 * @return
 *                   <P><TABLE>
 *                   <TR><TD>Code</TD><TD>Meaning</TD></TR>
 *                   <TR>
 *                   <TD>CKR_OK                                 </TD>
 *                   <TD>Success                                </TD>
 *                   </TR>
 *                   <TR>
 *                   <TD>CKR_FUNCTION_FAILED                    </TD>
 *                   <TD>There is no token in the slot          </TD>
 *                   </TR>
 *                   </TABLE></P>
 */
int removeToken(struct p11Slot_t *slot)
{
	int i;

	if (slot->token == NULL) {
		return CKR_FUNCTION_FAILED;
	}

	if (!slot->primarySlot) {
		// Remove token from associated virtual slots
		for (i = 0; i < sizeof(slot->virtualSlots) / sizeof(slot->virtualSlots[0]); i++) {
			if (slot->virtualSlots[i]) {
				removeToken(slot->virtualSlots[i]);
			}
		}
	}

	if (slot->removedToken) {
		freeToken(slot->removedToken);
		slot->removedToken = NULL;
	}

	// A removed token and associated sessions are not immediately released from memory
	// to give running threads a change to complete token operations.
	slot->removedToken = slot->token;
	slot->token = NULL;
	slot->info.flags &= ~CKF_TOKEN_PRESENT;

	// Final close with resource deallocation is done from freeToken().
	tokenRemovedForSessionsOnSlot(&context->sessionPool, slot->id);

	return CKR_OK;
}
Exemplo n.º 3
0
static  Token   *savePreviousToken(Token_state *ts, TokensTable *tt)
{
    // save the previous token
    Token *temp_tk = createTokenByLen(ts->begin, ts->cur - ts->begin);
    if(!temp_tk)
    {
        error_process(ts, Error_type_not_enough_mem);
        return NULL;
    }
    else
    {
        if(!addTokenToTable(tt, temp_tk))
        {
            freeToken(temp_tk);
            return NULL;
        }
        else
        {
            ts->state = Lex_state_begin;
            
            cc_skip_space((const char **)&ts->cur);
            ts->begin = ts->cur;
            return temp_tk;
        }
    }
}
Exemplo n.º 4
0
Token* nextToken()
{
    if (token)
        freeToken(&token);

    return scannerGetToken();
}
Exemplo n.º 5
0
Arquivo: node.c Projeto: GregorR/exc
 void freeNode(Node *node)
{
    size_t i;
    for (i = 0; node->children[i]; i++)
        freeNode(node->children[i]);
    if (node->tok)
        freeToken(node->tok);
    free(node);
}
Exemplo n.º 6
0
/**
 * addToken adds a token to the specified slot.
 *
 * @param slot       Pointer to slot structure.
 * @param token      Pointer to token structure.
 *
 * @return
 *                   <P><TABLE>
 *                   <TR><TD>Code</TD><TD>Meaning</TD></TR>
 *                   <TR>
 *                   <TD>CKR_OK                                 </TD>
 *                   <TD>Success                                </TD>
 *                   </TR>
 *                   <TR>
 *                   <TD>CKR_FUNCTION_FAILED                    </TD>
 *                   <TD>There is already a token in the slot   </TD>
 *                   </TR>
 *                   </TABLE></P>
 */
int addToken(struct p11Slot_t *slot, struct p11Token_t *token)
{
	if (slot->token != NULL) {
		return CKR_FUNCTION_FAILED;
	}

	if (slot->removedToken) {
		freeToken(slot->removedToken);
		slot->removedToken = NULL;
	}

	slot->token = token;                     /* Add token to slot                */
	slot->info.flags |= CKF_TOKEN_PRESENT;   /* indicate the presence of a token */

	return CKR_OK;
}
Exemplo n.º 7
0
Token* scannerGetToken() // FUNCTION, WHICH RETURNS POINTER ON TOKEN STRUCTURE
{
    Token *token = newToken();

    scannerFillToken(token);
    if (getError()) {
        freeToken(&token);
        fclose(source);
        source = NULL;
        return NULL;
    }

    if (token->type == STT_EOF) {
        fclose(source);
        source = NULL;
    }

    return token;
}
Exemplo n.º 8
0
void freeTree(tree * t) {
	if (t->left != NULL) freeTree(t->left);
	if (t->right != NULL) freeTree(t->right);
	if (t->action != NULL) freeToken(t->action);
	free(t);
}
Exemplo n.º 9
0
token * nextToken(token *current,char *buffer,bool delPrev) {
	token * result=newToken();

	if (current!=NULL) {
		result->location=current->location+current->length;
		if (delPrev) freeToken(current);
	}

	while(result->length==0) {
		if (result->location >= strlen(buffer)) {
			free(result);
			return NULL;
		}
		switch(buffer[result->location]) {
			case ' ':
			case '\t':
				result->location=result->location+1;
				continue;
			case '+':
				result->type=PLUS;
				result->length=1;
				break;
			case '-':
				result->type=MINUS;
				result->length=1;
				break;
			case '*':
				result->type=MULTIPLY;
				result->length=1;
				break;
			case '/':
				result->type=DIVIDE;
				result->length=1;
				break;
			case ';' :
				result->type=EOS;
				result->length=1;
				break;
			case '(':
				result->type=LPAREN;
				result->length=1;
				break;
			case ')':
				result->type=RPAREN;
				result->length=1;
				break;
			case '{':
				result->type=LCURLY;
				result->length=1;
				break;
			case '}' :
				result->type=RCURLY;
				result->length=1;
				break;

			case '0':
			case '1':
			case '2':
			case '3':
			case '4':
			case '5':
			case '6':
			case '7':
			case '8':
			case '9':
				result->type=INTEGER;
				char *endptr;
				setValue(result,strtol(buffer+result->location,&endptr,10));
				result->length=(endptr-buffer)-result->location;
				break;

			case 's':
				if (0==strncmp(buffer+result->location,"set",3)) {
					if ( (strlen(buffer)<=result->location+3) ||
					     (buffer[result->location+3]==' ')   ) {
						result->type=SET;
						result->length=3;
						break;
					}
				}
				int ei=0;
				char varName[20];
				while(isalpha((int)buffer[result->location+ei])) {
					varName[ei]=buffer[result->location+ei];
					if (ei>=strlen(buffer)) break;
					ei++;
					varName[ei]='\0';
				}
				result->type=VARIABLE;
				setName(result,varName);
				result->length=ei;
				break;

			case 'w':
				if (0==strncmp(buffer+result->location,"while",5)) {
					if ( (strlen(buffer)<=result->location+5) ||
					     (buffer[result->location+5]==' ') ||
					     (buffer[result->location+5]=='(') ) {
							result->type=WHILE;
							result->length=5;
							break;
					}
				}
				ei=0;
				while(isalpha((int)buffer[result->location+ei])) {
					varName[ei]=buffer[result->location+ei];
					if (ei>=strlen(buffer)) break;
					ei++;
					varName[ei]='\0';
				}
				result->type=VARIABLE;
				setName(result,varName);
				result->length=ei;
				break;

			default:

				if (isalpha((int)buffer[result->location])) {
					ei=0;
					while(isalpha((int)buffer[result->location+ei])) {
						varName[ei]=buffer[result->location+ei];
						if (ei>=strlen(buffer)) break;
						ei++;
						varName[ei]='\0';
					}
					result->type=VARIABLE;
					setName(result,varName);
					result->length=ei;
					break;
				}

				tokenError("Unrecognized token in expression",buffer,result);
				free(result);
				exit(1);
		}
	}
	return result;
}
Exemplo n.º 10
0
void freeTokens(struct token* t) {
  if(t == NULL)
    return;
  freeTokens(t->next);
  freeToken(t);
}