+ break;
+ case '$':
+ c = my_euid == 0 ? '#' : '$';
+ break;
+#ifdef CONFIG_FEATURE_GETUSERNAME_AND_HOMEDIR
+ case 'w':
+ pbuf = pwd_buf;
+ l = strlen(home_pwd_buf);
+ if (home_pwd_buf[0] != 0 &&
+ strncmp(home_pwd_buf, pbuf, l) == 0 &&
+ (pbuf[l]=='/' || pbuf[l]=='\0') &&
+ strlen(pwd_buf+l)<PATH_MAX) {
+ pbuf = buf2;
+ *pbuf = '~';
+ strcpy(pbuf+1, pwd_buf+l);
+ }
+ break;
+#endif
+ case 'W':
+ pbuf = pwd_buf;
+ cp = strrchr(pbuf,'/');
+ if ( (cp != NULL) && (cp != pbuf) )
+ pbuf += (cp-pbuf)+1;
+ break;
+ case '!':
+ snprintf(pbuf = buf2, sizeof(buf2), "%d", num_ok_lines);
+ break;
+ case 'e': case 'E': /* \e \E = \033 */
+ c = '\033';
+ break;
+ case 'x': case 'X':
+ for (l = 0; l < 3;) {
+ int h;
+ buf2[l++] = *prmt_ptr;
+ buf2[l] = 0;
+ h = strtol(buf2, &pbuf, 16);
+ if (h > UCHAR_MAX || (pbuf - buf2) < l) {
+ l--;
+ break;
+ }
+ prmt_ptr++;
+ }
+ buf2[l] = 0;
+ c = (char)strtol(buf2, 0, 16);
+ if(c==0)
+ c = '?';
+ pbuf = buf;
+ break;
+ case '[': case ']':
+ if (c == flg_not_length) {
+ flg_not_length = flg_not_length == '[' ? ']' : '[';
+ continue;
+ }
+ break;
+ }
+ }
+ }
+ if(pbuf == buf)
+ *pbuf = c;
+ prmt_len += strlen(pbuf);
+ prmt_mem_ptr = strcat(xrealloc(prmt_mem_ptr, prmt_len+1), pbuf);
+ if (flg_not_length == ']')
+ sub_len++;