|
/* Belirtilen narg adet nesne şablon dizgesi için geçerli mi, değil mi? Geçerliyse 1, değilse 0 dönsün ve bir hata iletisi bassın. */ int validate_args (char *sablon, int nargs, OBJECT *args) { int *argturleri; int ngereken; /* Argümanlar hakkında bilgi alalım. Her dönüşüm belirtimi en az iki karakterlik olmalı, o halde dizgenin yarı uzunluğundan daha fazla sayıda belirtim olamaz. */ argturleri = (int *) alloca (strlen (sablon) / 2 * sizeof (int)); ngereken = parse_printf_format (sablon, nargs, argturleri); /* Argüman sayısına bakalım. */ if (ngereken > nargs) { error ("argüman sayısı çok az (en az %d argüman gerekiyor)", ngereken); return 0; } /* Her argüman için istenen C türüne bakalım ve verilen nesne uygun mu görelim. */ for (i = 0; i < ngereken; i++) { int istenen; if (argturleri[i] & PA_FLAG_PTR) istenen = STRUCTURE; else switch (argturleri[i] & ~PA_FLAG_MASK) { case PA_INT: case PA_FLOAT: case PA_DOUBLE: istenen = NUMBER; break; case PA_CHAR: istenen = CHAR; break; case PA_STRING: istenen = STRING; break; case PA_POINTER: istenen = STRUCTURE; break; } if (TYPE (args[i]) != istenen) { error ("%d. argümanın türü uygun değil", i); return 0; } } return 1; }
|