Пример #1
0
InstallWorkerThread::~InstallWorkerThread()
{
    strFree(m_strPrinterName);
    strFree(m_strSourceDir);

	this->PeekMessagesUntilTerminate();
}
Пример #2
0
/**
 * Funkce vycisti seznam do nejblizsiho navesti S_LAB.
 * @param L je seznam.
 */
void hListClearToLab(tListOfCall *L)
{
  if(L->last != NULL)
  {
    // uvolni prvni polozku protoze je vzdy S_LAB
    HtItemData *item = L->last;
    L->last = item->prevItem;
    L->last->nextItem = NULL;
    free(item);
    // uvolnuj az kym neprijdes na dalsi S_LAB
    while(L->last != NULL)
    {
      item = L->last;
      // jestlize je S_LAB prerus uvolnovani jinak uvolni retezce
      if(item->type == S_LAB)
        return;
      else
      {
        strFree(&item->data.varKey);
        if(item->data.varType == T_STRING)
          strFree(&item->data.value.sValue);
      }
      // posun prvky seznamu
      L->last = item->prevItem;
      L->last->nextItem = NULL;
      free(item);
    }
  }
}
Пример #3
0
int main (int argc, char *argv[])
{
  if (argc != 3) {
    printf("Really? Even in test?\n");
    return 1;
  }

  mmuInit();
  tString text = strCreate(argv[1]);
  tString search = strCreate(argv[2]);

  printf("Text: %s\n"
         "Text len: %u\n", text.data, text.len);
  printf("Hledany string: %s\n"
         "Hledany len: %u\n", search.data, search.len);
  int position = kmpSearch(text, search);
  printf("Pozice je: %d\n", position);

  strFree(&text);
  strFree(&search);

  mmuGlobalFree();

  return 0;
}
Пример #4
0
/**
 * Funkce uvolni seznam.
 * @param L je seznam/
 */
void hListDispose(tListOfCall *L)
{
  // ak je seznam prazdny
  if(L->first !=NULL)
  {
    HtItemData *item;
    // projdi seznamem kym neni NULL
    while(L->first != NULL)
    {
      item = L->first;
      L->first = item->nextItem;
      // ak je prvek seznamu promenna data tak uvolni retezce v data
      if(item->type == S_VAR)
      {
        strFree(&item->data.varKey);
        if(item->data.varType == T_STRING)
          strFree(&item->data.value.sValue);
      }
      // uvolni
      free(item);
      item = NULL;
    }
  }
  // nastav ukazatele na NULL
  L->first = NULL;
  L->last = NULL;
}
Пример #5
0
tErrors printTape(tTape *tape) {

    if(tape == NULL) return E_INTERN;
    if(tape->first == NULL) return E_INTERN;

    tTapeItem *iter = tape->first;
    string inst;
    string op1;
    string op2;
    string result;

    if(strInit(&inst) != STR_SUCCESS) return E_INTERN;
    if(strInit(&op1) != STR_SUCCESS) return E_INTERN;
    if(strInit(&op2) != STR_SUCCESS) return E_INTERN;
    if(strInit(&result) != STR_SUCCESS) return E_INTERN;

    printf("||======================================================================||\n");
    printf("||\tINST\t|\tOP1\t|\tOP2\t|\tRESULT\t||\n");
    printf("||======================================================================||\n");

    while(iter != NULL) {

        // Line 1
        strClear(&inst);
        strClear(&op1);
        strClear(&op2);
        strClear(&result);

        constructInstStringLine1(&inst, iter->instruction);
        if(iter->op1 != NULL) constructOpStringLine1(&op1, iter->op1);
        if(iter->op2 != NULL) constructOpStringLine1(&op2, iter->op2);
        if(iter->result != NULL) constructOpStringLine1(&result, iter->result);
        printf("||\t%s\t|\t%s\t|\t%s\t|\t%s\t\t||\n", inst.str, op1.str, op2.str, result.str);

        // Line 2
        strClear(&inst);
        strClear(&op1);
        strClear(&op2);
        strClear(&result);

        constructInstStringLine2(&inst, iter);
        if(iter->op1 != NULL) constructOpStringLine2(&op1, iter->op1);
        if(iter->op2 != NULL) constructOpStringLine2(&op2, iter->op2);
        if(iter->result != NULL) constructOpStringLine2(&result, iter->result);
        printf("||\t%s\t|\t%s\t|\t%s\t|\t%s\t\t||\n", inst.str, op1.str, op2.str, result.str);
		



        printf("||======================================================================||\n");
        iter = iter->next;
    }

    strFree(&inst);
    strFree(&op1);
    strFree(&op2);
    strFree(&result);
	return E_OK;
}
Пример #6
0
void vstring::strReflow (char * & target, strSizeType width, const char * preString, const char * postString, int align)
{
   strRemoveWhiteSpace (target);        // zunaechst mal alle vorhandenen CR und LF loeschen, um dann neue einzufuegen
   strTrim (target);
   strSizeType n = strLength (target);
   char * result = 0x0000;              // hierin speichern wir den ganzen neu gestalteten Absatz zwischen
   if (n > width && width > 0)          // nur dann was tun, wenn der ganze String nicht in eine Zeile passt
   {
      char * line = 0x0000;             // hierin speichern wir eine einzelne Zeile zwischen
      strSizeType a = 0;                // Position, bis zu der bisher der absatz abgearbeitet wurde
      strSizeType b = 0;                // Position bis zu der die neue naechste Zeile geht
      while (b < n)                     // Den ganzen String abarbeiten, bis alles in einzelne Zeilen aufgeteilt wurde
      {
         b = a + width;                 // zunaechst das optimale Ende der naechsten Zeile setzen
         if (b < n)                     // Feststellen, ob der ganze reststring ueberhaupt noch aufgeteilt werden muss
         {
            while (b > a && target[b] != ' ')  // nach vorne suchen, bis wir eine Trennstelle finden
            {
               b--;
            }
            if (b == a)                 // Wenn keine Trennstelle gefunden, dann muessen wir doch nach hinten suchen
            {
               b = a + width;           // Wieder den ausgangswert setzen
               while (b < n && target[b] != ' ')  // und erstes leerzeichen nach hinten suchen
               {
                  b++;
               }
            }
         }
         else
         {
            b = n;                      // Eine weitere Aufteilung ist nicht notwendig, also den ganzen reststring einfach nehmen
         }
         strCopy (line, target, a, b);  // Kopiere jetzt die Zeile aus dem ganzen String heraus
         if (!(align == 3 && b == n))   // die letze Zeile wird beim Blocksatz nicht mehr formatiert
         {
            strReflowLine (line, width, align);  // fuege jetzt je nach ausrichtung vorne oder zwischen drin Leerzeichen ein
         }
         strCopy (result, result, preString);  // kopiere prefix dran
         strCopy (result, result, line);  // kopiere nun die eigentliche Zeile an
         strCopy (result, result, postString);  // kopiere nun den Suffix hinten dran (das LF)
         a = b + 1;                     // und setze nun den beginn des reststring hinter das leerzeichen, an dem wir grade getrennt haben
      }
      strFree (line);                   // und loesche die temporaeren zwiscehnspeicher
   }
   else
   {
      strCopy (result, result, preString);  // kopiere prefix dran
      strCopy (result, result, target);  // kopiere nun die eigentliche Zeile an
      strCopy (result, result, postString);  // kopiere nun den Suffix hinten dran (das LF)
   }
   strCopy (target, result);            // kopiere nun das gesamtergebnis in den uebergebenen String
   strFree (result);
}
Пример #7
0
void ItemFreeAktu(sGlobTableItem *pomg,sLokTableItem *poml){/*mazani alokovaneho prvku pri chybe*/
    if (pomg!=NULL){/*pokud mazu globalni prvek*/
        strFree(&(pomg->data.nazev));/*smaz*/
        strFree(&(pomg->arg));
        free(pomg);
    }else
    if (poml!=NULL){/*pokud mazu lokalni prvek*/
      strFree(&(poml->data.nazev));/*smaz*/
      free(poml);
    }

}
Пример #8
0
void
DestroyIList( ptr_IList ilist_ptr)
//pri ruseni treba kontrolovat ci polozkou instrukcie nebola retazcova konstanta
{
  
  ptr_InstEntry next, temp = ilist_ptr->head;
  
  while ( temp != NULL )
  {
    next = temp->next;
  
    if ( temp->cont.op1type == STR_OP_TYPE )
    {
      if ( temp->cont.op1.str != NULL ){
        strFree(temp->cont.op1.str);
        free(temp->cont.op1.str);
        temp->cont.op1.str = NULL;
      }
    
    }
    
    if ( temp->cont.op2type == STR_OP_TYPE )
    {
      if ( temp->cont.op2.str != NULL ){
        strFree(temp->cont.op2.str);
        free(temp->cont.op2.str);
        temp->cont.op2.str = NULL;
      }
    
    }
    
    if ( temp->cont.op3type == STR_OP_TYPE )
    {
      if ( temp->cont.op3.str != NULL ){
        strFree(temp->cont.op3.str);
        free(temp->cont.op3.str);
        temp->cont.op3.str = NULL;
      }
    }
      
    free(temp) ;
  
    temp = next;
  }
  
  
  InitIList( ilist_ptr );
}
Пример #9
0
String 
strNConcat(String s1, String s2)
{
	String s3 = strConcat(s1, s2);
	strFree(s1);
	return s3;
}
Пример #10
0
void vstring::strReplace (char * & target, const char * replace, const char * by)
{
   char * tmptarget = 0x0000;           // Zunaechst einen temporaeren Speicher deklarieren
   strSizeType n = strLength (target);
   strSizeType k = strLength (replace);
   if (k > 0)                           // ist ueberhaupt ein String angegeben, nach dem gesucht werden soll ?
   {
      strSizeType l = strLength (by);
      char strBuffer[256];              // Lege nun eine Zwischenpuffer an, der eine Feste groesse hat, und immer bei vollstaendiger Fuellung and den Zielstring angefuegt wird
      strSizeType strBufferCounter = 0;
      if (n > 0)
      {
         strSizeType i = 0, j;          // Schleifenzaehler
         while (i + k <= n)
         {
            j = 0;
            while (j < k && target[i + j] == replace[j])
            {
               j++;
            }
            if (j == k)                 // der 'replace' string wurde gefunden, also den 'by' string in den puffer einfuegen
            {
               j = 0;
               while (j < l)
               {
                  // Kopiere den string Zeichen fuer Zeichen in unseren Zwischenpuffer
                  strBuffer[strBufferCounter++] = by[j];
                  if (strBufferCounter == 256 - 1)
                  {
                     strBuffer[strBufferCounter] = 0;
                     strCopy (tmptarget, tmptarget, strBuffer);
                     strBufferCounter = 0;
                  }
                  j++;
               }
               i += k;                  // dann muessen wir erst wieder hinter dem gefundenen String weiter arbeiten
            }
            else
            {
               // der 'replace' string wurde nicht gefunden , also nur den einen character in den puffer einfuegen
               strBuffer[strBufferCounter++] = target[i];
               if (strBufferCounter == 256 - 1)
               {
                  strBuffer[strBufferCounter] = 0;
                  strCopy (tmptarget, tmptarget, strBuffer);
                  strBufferCounter = 0;
               }
               i++;
            }
         }
         // schliesslich noch den rest des puffers an unseren target string anfuegen
         strBuffer[strBufferCounter] = 0;
         strCopy (tmptarget, tmptarget, strBuffer);
         strBufferCounter = 0;
      }
      strFree (target);                 // Nun den Zielstring freigeben, falls er belegt war
      target = tmptarget;               // Nun den Zeiger einfach umsetzten. Hier muss nicht mehr kopiert werden....
      tmptarget = 0x0000;               // weil wir hier den temporaeren string als frei markieren, ohne den Speicher wieder freizugeben.
   }
}
Пример #11
0
void vstring::strCopy (char * & target, const char * source, strSizeType startindex, strSizeType endindex)
{
   char * tmptarget = 0x0000;           // Zunaechst einen Temporaeren Speicher deklarieren, weil diese Routine auch arbeiten soll, wenn der SourceString identisch mit dem Target sind. Also darf dieser erst geloescht werden, wenn alles fertig kopiert ist
   if (startindex >= 0 && endindex >= 0 && startindex <= endindex)  // sicherstellen, dass im Falle von Ende vor Start-Index (Negative Laenge) nichts kopiert wird
   {
      strSizeType i = endindex - startindex;  // berechne nun die Laenge des Ergebnisstrings
      strAlloc (tmptarget, i);          // Speicher fuer den Ergebnisstring allokieren
      if (tmptarget != 0x0000)          // Hat allokation funktioniert ?
      {
         if (source != 0x0000)          // Ist ueberhaupt ein Quellstring vorhanden
         {
            i = 0;
            while (source[i] != 0 && i < startindex)  // pruefe jetzt, ob der Source-String vielleicht schon vor dem Startindex terminiert ist
            {
               ++i;
            }
            if (i == startindex)
            {
               i = 0;
               while (startindex + i < endindex && source[startindex + i] != 0)  // nun den angebenen Speicherbereich ablaufen
               {
                  tmptarget[i] = source[startindex + i];  // und Zeichen fuer Zeichen kopieren
                  ++i;
               }
               tmptarget[i] = 0;        // nun das Null-Terminierungsbyte nicht vergessen
            }
         }
      }
   }
   strFree (target);                    // Nun den Zielstring freigeben, falls er belegt war
   target = tmptarget;                  // Nun den Zeiger einfach umsetzten. Hier muss nicht mehr kopiert werden....
   tmptarget = 0x0000;                  // weil wir hier den temporaeren string als frei markieren, ohne den Speicher wieder freizugeben.
}
Пример #12
0
void vstring::strCopy (char * & target, const char * source1, const char * source2)
{
   char * tmptarget = 0x0000;           // Zunaechst einen Temporaeren Speicher deklarieren, weil diese Routine auch arbeiten soll, wenn einer oder beide SourceString identisch mit dem Target sind. Also darf dieser erst geloescht werden, wenn alles fertig kopiert ist
   strSizeType i = strLength (source1) + strLength (source2);  // Anzahl der zu kopierenden Zeichen holen
   strAlloc (tmptarget, i);             // dann fuer den temporaeren String den Speicher belegen
   if (tmptarget != 0x0000)             // War die gesamtlaenge groesser als 0 ?
   {
      strSizeType j = 0;                // Offset es aktuellen Quellstring in den Zielstring
      if (source1 != 0x0000)            // ist der betreffende Quellstring ueberhaupt vorhanden
      {
         i = 0;                         // Zaehlvariable im Quellstring
         while (source1[i] != 0)        // bis zum Null-Terminierungsbyte durchlaufen..
         {
            tmptarget[j + i] = source1[i];  // und Zeichen fuer Zeichen kopieren
            i++;
         }
         j += i;                        // nun den Offset im Zielstring entsprechend der Eben kopierten Anzahl weitersetzen fuer den naechsten String
      }
      if (source2 != 0x0000)            // ist der zweite String vorhanden ?
      {
         i = 0;                         // genau das selbe vorgehen, wie im ersten Sring. Dieser Teil koennte fuer weitere Funktionen beliebig oft hintereinander kopiert werden
         while (source2[i] != 0)
         {
            tmptarget[j + i] = source2[i];
            i++;
         }
         j += i;
      }
      tmptarget[j] = 0;                 // Und schliesslich das Null-Terminierungs-Byte am ende des Zielstrings setzen
   }
   strFree (target);                    // Nun den Zielstring freigeben, falls er belegt war
   target = tmptarget;                  // Nun den Zeiger einfach umsetzten. Hier muss nicht mehr kopiert werden....
   tmptarget = 0x0000;                  // weil wir hier den temporaeren string als frei markieren, ohne den Speicher wieder freizugeben.
}
Пример #13
0
void AsmCodeFree(AsmCode *code) {
	strFree(code->line);
  ArrayFree(code->tokens, strFree);
	if (code->objCode != NULL)
 	   ObjFree(code->objCode);
	ObjFree(code);
}
Пример #14
0
static StringList
uclConstructOptList(String name, StringList given)
{
	StringList res;
	String flag;
	String tmp;
	Bool sep;
	
	flag = cfgLookupString(name, uclOptions);

	tmp = strConcat(name, "-sep");
	sep = cfgLookupBoolean(tmp, uclOptions);
	strFree(tmp);
	
	res = listNil(String);
	while (given) {
		if (sep) {
			res = listCons(String)(flag, res);
			res = listCons(String)(car(given), res);  
		}
		else {
			tmp = strConcat(flag, car(given));
			res = listCons(String)(tmp, res);
		}
		given = cdr(given);
	}
	return listNReverse(String)(res);
}
Пример #15
0
String
strNReplace(String txt, String orig, String repl)
{
	String s = strReplace(txt, orig, repl);
	strFree(txt);
	return s;
}
Пример #16
0
int main(int argc, char** argv)
{
	FILE *f;
	if (argc != 2)
	{
		fprintf(stderr, "Spatny pocet parametru\n");
		return INTERN_ERROR;
	}
	if (argc == 1)
   {
      fprintf(stderr, "Neni zadan vstupni soubor\n");
      return INTERN_ERROR;
   }
   if ((f = fopen(argv[1], "r")) == NULL)
   {
      fprintf(stderr, "Soubor se nepodarilo otevrit\n");
      return INTERN_ERROR;
   }   
   setSourceFile(f);
   int tokenn=0;
   do
   {
      tokenn = getNextToken();  //TOHLE SE VOLA V PARSERU
      printf("token je: %d\n",tokenn);
   } while(tokenn != 101);


   /////////////////////////////////////////////////
   ////////////TADY PO SOBĚ UKLÍZÍME////////////////
   ////////////////////////////////////////////////
   strFree(&token.data); //uvolním řetezec
   fclose(f); //zavřeme soubor
	
   return 0;
}
Пример #17
0
/**
 * Funkce pri chybe uvolni vsechny dynamicky vytvorene promenne v interpret.c
 */
void errorFree()
{
  hListDispose(g_list);
  jStackDispose(g_jStack);
  if(g_retData->varType == T_STRING)
    strFree(&g_retData->varKey);
}
Пример #18
0
void  TableFree(tGlobSymbolTable *T,Tridic *ridic,sGlobTableItem *koren,int *in){/*rekurzivni mazani tabulek*/
     if((koren)!= NULL) {/*pokud neni globalni tabulka prazdna*/
        if(koren->data.typ == FUNCTION_HEADER){/*pokud je glob. prvek funkce*/
            if(koren->data.def == 0 ) *in=0;/*pokud neni definovana*/
            TableFreeLok(T,ridic,(koren->link));/*zavolam mazani lokalni tabulky*/
        }
		TableFree(T,ridic,(koren->lptr),in);/*posouvam se vlevo*/
		TableFree(T,ridic,(koren->rptr),in);/*posouvam se vpravo*/
        //strFree(&(koren->hodnota->stringh));
        strFree(&(koren->data.nazev));/*mazu*/
        strFree(&(koren->arg));
        free(koren);
        koren = NULL;
	}
return ;
}
Пример #19
0
/* 
 * Return a processed source line list of the file contents.
 */
SrcLineList
includeFile(FileName fname)
{
	String	      fnameString;
	SrcLineList   r;

	inclSerialLineNo    = 0;
	fnameString         = strCopy(fnameUnparseStatic(fname));
	inclBuffer          = bufNew();
	includedFileCodes   = 0;
	localAssertList     = listCopy(String)(globalAssertList);

	fileState.curDir    = osCurDirName();
	fileState.fileCodes = 0;
	fileState.fileNames = 0;

	r = listNReverse(SrcLine)(
		inclFile(fnameString, false, true, &inclFileLineNo));

	strFree(fnameString);
	bufFree(inclBuffer);
	listFree(String)(localAssertList);
	listFree(Hash)(includedFileCodes);

	return r;
}
Пример #20
0
static String
uclGetKeyName(String s)
{
	String r = strCopy(s);
	String mode, std;
	String tmp;
	mode   = uclIsCompileOnly ? "cc-" 	: "link-";
	std    = uclStdc 	  ? "std-" 	: "";
	tmp = r;

	r = strConcat(mode, r);
	strFree(tmp); tmp = r;
	r = strConcat(std, r);
	strFree(tmp); 

	return r;
}
Пример #21
0
void
destroyNode(node_ptr ptr)
{
  
  strFree(ptr->data.id_name);         //uvolnime retazec meno
  free(ptr->data.id_name);            //uvolnime ukazatel nanho
  ptr->data.id_name = NULL;
  
  if ( ptr->data.type == STR_TYPE )   //ak je obshom retazec uvolnime a zrusime aj ten....
    if ( (ptr->data).value.str != NULL )
    {
      strFree((ptr->data).value.str);
      free((ptr->data).value.str);
      (ptr->data).value.str = NULL;
    }

}
Пример #22
0
void FreeRamec(sRamec *ramec){
    if(ramec != NULL){
		FreeRamec(ramec->lptr);
		FreeRamec(ramec->rptr);
        strFree(&(ramec->nazev));
		free(ramec);
        ramec = NULL;
    }
}
Пример #23
0
E_CODE functionInsertSymbol(tFunction* function,tString symbolname){
    tSymbol *symb=mmuMalloc(sizeof(tSymbol));
    strCopyString(&symbolname,&(symb->key));
    //symb->type=DT_UNKNOWN;
    symb->data=NULL;
    E_CODE err=BTInsert(&(function->symbols),&(symb->key),symb);
    if (err!=ERROR_OK){strFree(&(symb->key));mmuFree(symb);}
    return err;
}
Пример #24
0
void freeTokenMem(tToken* t) {
	if (t == NULL) return;
	if (*t == NULL) return;
	if ((*t)->typ == TYPE_STRING || (*t)->typ == TYPE_IDENTIFICATOR) {
		strFree(&(*t)->value.stringVal);
	}
	free(*t);
	*t = NULL;
}
Пример #25
0
/**
 * Uvolni tConstantInfo z pameti.
 * @param constant[in]
 */
void freeConstantInfo(tConstantInfo * constant) {
	if (constant->dataType == TAB_SYM_VAR_NO_AUTO_STRING) {
		//free stringu
		strFree(constant->value.stringVal);
		free(constant->value.stringVal);
	}
	//smazeme strukturu ke konstante
	free(constant);
}
Пример #26
0
void TableFreeLok(tGlobSymbolTable *T,Tridic *ridic,sLokTableItem *koren){/*uvolneni lokalni tabulky*/
    if(koren != NULL){/*pokud neni lokalni prazdna*/
		TableFreeLok(T,ridic,(koren->lptr));/*posouvam se vlevo*/
		TableFreeLok(T,ridic,(koren->rptr));/*posouvam se vpravo*/
        strFree(&(koren->data.nazev));/*mazu*/
		free(koren);
        koren = NULL;
    }

}
Пример #27
0
E_CODE symbolTableInsertFunction(tSymbolTable* symbolTable, tString functionName){
    tFunction *func=mmuMalloc(sizeof(tFunction));
    strCopyString(&functionName,&(func->name)); // jmeno fce
    btInit(&(func->symbols)); // symboly
    initList(&(func->instructions)); // instrukce
    initList(&(func->constants));
    func->called=1;
    E_CODE err=BTInsert(&(symbolTable->functions),&(func->name),func);
    if (err!=ERROR_OK){strFree(&(func->name));mmuFree(func);}
    return err;
}
Пример #28
0
local void
checkPrintfCase(int w, const char *txt)
{
	String name = strPrintf("%d-[%s]", w, txt);
	char buf[20];
	sprintf(buf, "%*s", w, txt);
	String s2 = strPrintf("%*s", w, txt);

	testStringEqual(name, buf, s2);
	strFree(name);
}
Пример #29
0
string* tabSymListCreateTmpSymbol(tTabSymListElemPtr generateFor, tTabSym* locTable) {
	char buffer[BUFFER_SIZE];
	int flag;
	unsigned int index=0;
	if(locTable==NULL) return NULL;	//chyba
	unsigned int* chooseCounter;
	//vybereme counter
	if(generateFor==NULL){
		chooseCounter=&locTable->tmpCounter;
	}else{
		chooseCounter=&generateFor->table->tmpCounter;
	}


	if(sumCounters(generateFor, &index)==0){
		//chyba overflow
		return NULL;
	}

	//zkontrolujeme overflow
	if (locTable->tmpCounter > UINT_MAX - index){
		//chyba overflow
		return 0;
	}
	index+=locTable->tmpCounter;

	//Notice that only when this returned value is non-negative and less than n, the string has been completely written.
	flag = snprintf(buffer, BUFFER_SIZE, "%u", index);//vytvoreni nazvu docasne promenne
	if (flag < 0 || flag >= BUFFER_SIZE) {
		//chyba pri vytvareni nazvu
		return NULL;
	}
	string* newString = malloc(sizeof(string));
	if (newString == NULL) {
		//chyba pri alokaci
		return NULL;
	}
	if(strInit(newString)){
		free(newString);
		return NULL;
	}
	if(strConConstString(newString, buffer)){
		strFree(newString);
		free(newString);
		return NULL;
	}

	//zvysime counter u tabulky symbolu
	(*chooseCounter)++;
	return newString;
}
Пример #30
0
int clean_scanner()
{
	strFree(buffer);

	if (fclose(in) != EOF)
	{
		return OK;
	}
	else
	{
		fprintf(stderr, "Input file couldn't be closed!\n");
		return EOF;
	}
}