-#ifndef FLEXNAMES
- bwrite(sp->name, NCPS, symfile);
-#else FLEXNAMES
- len = strlen(sp->name);
- if (len != 0) {
- bwrite(&stroff, sizeof (stroff), symfile);
- stroff += len + 1;
- } else
- bwrite("\0\0\0\0", sizeof (stroff), symfile);
+
+#ifdef FLEXNAMES
+ name = sp->s_name; /* save pointer */
+ if ( (sp->s_index = strlen(sp->s_name)) != 0){
+ sp->s_nmx = stroff; /* clobber pointer */
+ stroff += sp->s_index + 1;
+ } else {
+ sp->s_nmx = 0; /* clobber pointer */
+ }
+#endif
+ sp->s_type = (sp->s_ptype != 0) ? sp->s_ptype : (sp->s_type & (~XFORW));
+ bwrite(&sp->s_nm, sizeof (struct nlist), symfile);
+#ifdef FLEXNAMES
+ sp->s_name = name; /* restore pointer */