You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by ma...@apache.org on 2011/02/18 23:52:52 UTC
[lucy-commits] svn commit: r1072185 - in /incubator/lucy/trunk/clownfish/src: CFCSymbol.c
CFCVariable.c
Author: marvin
Date: Fri Feb 18 22:52:51 2011
New Revision: 1072185
URL: http://svn.apache.org/viewvc?rev=1072185&view=rev
Log:
Move validation and assignment around in CFCVariable and CFCSymbol
constructors so that validation errors get thrown before memory can be leaked.
Modified:
incubator/lucy/trunk/clownfish/src/CFCSymbol.c
incubator/lucy/trunk/clownfish/src/CFCVariable.c
Modified: incubator/lucy/trunk/clownfish/src/CFCSymbol.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCSymbol.c?rev=1072185&r1=1072184&r2=1072185&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCSymbol.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCSymbol.c Fri Feb 18 22:52:51 2011
@@ -131,30 +131,27 @@ CFCSymbol_init(CFCSymbol *self, struct C
const char *exposure, const char *class_name,
const char *class_cnick, const char *micro_sym)
{
- // Validate parcel.
+ // Validate.
CFCUTIL_NULL_CHECK(parcel);
-
- // Validate exposure.
if (!S_validate_exposure(exposure)) {
croak("Invalid exposure: '%s'", exposure ? exposure : "[NULL]");
}
- self->exposure = CFCUtil_strdup(exposure);
-
- // Validate class name (if supplied);
if (class_name && !S_validate_class_name(class_name)) {
croak("Invalid class_name: '%s'", class_name);
}
- self->class_name = CFCUtil_strdup(class_name);
+ if (!micro_sym || !S_validate_identifier(micro_sym)) {
+ croak("Invalid micro_sym: '%s'", micro_sym ? micro_sym : "[NULL]");
+ }
// Derive class_cnick if necessary, then validate.
+ const char *real_cnick = NULL;
if (class_name) {
if (class_cnick) {
- self->class_cnick = CFCUtil_strdup(class_cnick);
+ real_cnick = class_cnick;
}
else {
const char *last_colon = strrchr(class_name, ':');
- const char *cnick = last_colon ? last_colon + 1 : class_name;
- self->class_cnick = CFCUtil_strdup(cnick);
+ real_cnick = last_colon ? last_colon + 1 : class_name;
}
}
else if (class_cnick) {
@@ -162,19 +159,18 @@ CFCSymbol_init(CFCSymbol *self, struct C
croak("Can't supply class_cnick without class_name");
}
else {
- self->class_cnick = NULL;
+ real_cnick = NULL;
}
- if (self->class_cnick && !S_validate_class_cnick(self->class_cnick)) {
- croak("Invalid class_cnick: '%s'", self->class_cnick);
- }
-
- if (!micro_sym || !S_validate_identifier(micro_sym)) {
- croak("Invalid micro_sym: '%s'", micro_sym ? micro_sym : "[NULL]");
+ if (real_cnick && !S_validate_class_cnick(real_cnick)) {
+ croak("Invalid class_cnick: '%s'", real_cnick);
}
- self->micro_sym = CFCUtil_strdup(micro_sym);
- // Assign parcel.
- self->parcel = (CFCParcel*)CFCBase_incref((CFCBase*)parcel);
+ // Assign.
+ self->parcel = (CFCParcel*)CFCBase_incref((CFCBase*)parcel);
+ self->exposure = CFCUtil_strdup(exposure);
+ self->class_name = CFCUtil_strdup(class_name);
+ self->class_cnick = CFCUtil_strdup(real_cnick);
+ self->micro_sym = CFCUtil_strdup(micro_sym);
// Derive short_sym.
size_t class_cnick_len = self->class_cnick
Modified: incubator/lucy/trunk/clownfish/src/CFCVariable.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCVariable.c?rev=1072185&r1=1072184&r2=1072185&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCVariable.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCVariable.c Fri Feb 18 22:52:51 2011
@@ -58,6 +58,9 @@ CFCVariable_init(CFCVariable *self, stru
const char *class_cnick, const char *micro_sym,
struct CFCType *type)
{
+ // Validate type.
+ CFCUTIL_NULL_CHECK(type);
+
// Default exposure to "local".
const char *real_exposure = exposure ? exposure : "local";
@@ -65,7 +68,6 @@ CFCVariable_init(CFCVariable *self, stru
class_cnick, micro_sym);
// Assign type.
- CFCUTIL_NULL_CHECK(type);
self->type = (CFCType*)CFCBase_incref((CFCBase*)type);
// Cache various C string representations.